Уязвимость CMS Joomla 1.5, 2.5 и 3.x
Автоматическое решение проблемы и ручное для версий 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 3.x
В случае, если Вы используете последнюю версию Joomla и не вносили изменений в ядре (все Ваши правки ограничились только шаблоном сайта), то обновиться до последней версии можно с помощью встроенных средств обновления, нажав кнопку «Обновить сейчас»:
Ручное обновление 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 - это позволит Вам в автоматическом режиме защищать свой сайт от угроз.