Предзагрузка страницы

Уязвимость CMS Joomla 1.5, 2.5 и 3.x

14 декабря стало известно об уязвимости, которая доступна во всех версиях CMS Joomla, начиная от Joomla 1.5 (до 3.4.5 включительно).

Уязвимость позволяет выполнить любой удаленный код и связана с недостаточной проверкой параметров браузера при сохранении сессий. Данная опасность носит высокий уровень угрозы, поэтому мы настоятельно рекомендуем обновить свои Joomla до актуального состояния.

Временное решение

Если вариант обновления Joomla для Вас пока что не применим, то для временной защиты сайта на любой версии CMS Joomla достаточно сделать следующее - в файл .htaccess, который расположен в корневой директории сайта, добавить строки:

RewriteCond %{HTTP_USER_AGENT} .*\{.* [NC]
RewriteRule .* - [F,L]

Это внедрение позволит отсекать все нестандартные названия браузеров в User Agent, которые содержат фигурные скобки, что в свою очередь сделает невозможным исполнение вредоносного кода.

Постоянное решение

Перед внесением всех автоматических и ручных правок мы настоятельно рекомендуем сделать резервную копию сайта.

Ручное обновление Joomla 1.5.x и 2.5.x

В случае, если Вы являетесь обладателем старых версий Joomla (1.5.x и 2.5.x), то чтобы себя обезопасить, необходимо по адресу /libraries/joomla/session/ заменить файл session.php на обновленный. Для каждой линейки прилагается свой файл:

Патч для Joomla 1.5.x

Патч для Joomla 2.5.x

Автоматическое обновление Joomla 3.x

В случае, если Вы используете последнюю версию Joomla и не вносили изменений в ядре (все Ваши правки ограничились только шаблоном сайта), то обновиться до последней версии можно с помощью встроенных средств обновления, нажав кнопку “Обновить сейчас":

Автоматическое обновление Joomla 3.x

Ручное обновление Joomla 3.x

Если автоматическое обновление не проходит или Ваша Joomla имеет значительные изменения в ядре, то обезопасить себя от угрозы взлома можно и без автоматического обновления. Для этого необходимо в файле: libraries/joomla/session/session.php найти участок кода:

// Check for client address
if (in_array('fix_adress', $this->_security) && isset($_SERVER['REMOTE_ADDR']))

Заменить на:

// Check for client address
if (in_array('fix_adress', $this->_security) 
&& isset($_SERVER['REMOTE_ADDR'])
&& filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP) !== false)

Найти и удалить блок:

// Check for clients browser
if (in_array('fix_browser', $this->_security) && isset($_SERVER['HTTP_USER_AGENT']))
{
     $browser = $this->get('session.client.browser');
     if ($browser === null)
 {
     $this->set('session.client.browser', $_SERVER['HTTP_USER_AGENT']);
 }
elseif ($_SERVER['HTTP_USER_AGENT'] !== $browser)
 {
     // @todo remove code:  $this->_state = 'error';
     // @todo remove code:  return false;
 }
}

Найти:

// Record proxy forwarded for in the session in case we need it later
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
 {
     $this->set('session.client.forwarded', $_SERVER['HTTP_X_FORWARDED_FOR']);
 }

Заменить на:

// Record proxy forwarded for in the session in case we need it later
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) 
&& filter_var($_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP) !== false)
{
    $this->set('session.client.forwarded', $_SERVER['HTTP_X_FORWARDED_FOR']);
}

Используйте только официальные компоненты, модули и плагины, а также последние версии CMS Joomla - это позволит Вам в автоматическом режиме защищать свой сайт от угроз.