Критическая уязвимость в PHP 5.3.9, позволяющая выполнить код на сервере

Автор:
Опубліковано: 4452 дні назад (10 лютого 2012)
0
Голосів: 0
В релизе PHP 5.3.9 была обнаружена одна из самых опасных уязвимостей за все время существования данного языка программирования. Уязвимость проявляется только в PHP 5.3.9 и позволяет удалённому злоумышленнику выполнить свой код на сервере, независимо от того какие PHP-скрипты используются. При успешном совершении атаки код будет выполнен с правами PHP-приложения, к которому отправлен специально оформленный запрос.
Уязвимость возникает в случае, когда количество входящих параметров превышает значение max_input_vars (по умолчанию 1000).

По иронии судьбы, уязвимость связанна с некорректным устранением менее опасной проблемы безопасности в прошлой версии PHP. Для защиты от совершения DoS-атаки, которая может быть вызвана проблемой с предсказуемыми коллизиями в реализации алгоритма хэширования, в PHP 5.3.9 была добавлена директива max_input_vars, позволяющая ограничить число входящих параметров для поступающих HTTP-запросов. В реализации данной директивы была допущена досадная ошибка, которая сделала возможным совершение более опасной атаки.

Суть проблемы в том, что при портировании кода с поддержкой директивы max_input_vars был пропущен блок «else» с освобождением памяти и выходом из функции. Без этого блока, при превышении заданного директивой max_input_vars лимита, который по умолчанию установлен в 1000, если превышающая лимит переменная является массивом (например, «a[]=1»), то эта переменная оказывается на месте указателя, который в дальнейшем получает управление.

Всем пользователям PHP 5.3.9 рекомендуется в экстренном порядке наложить патч или вернуться на более ранний выпуск PHP. Официального уведомления и исправления пока не выпущено. Проблему усугубляет то, что поддержка директивы max_input_vars была портирована из PHP 5.3.9 многими дистрибутивами и включена в пакеты с более старыми версиями PHP. Например, в обновлении пакета php5-5.3.3-7+squeeze6 для debian Squeeze имеется поддержка директивы max_input_vars. Та же самая ситуация наблюдается в Red Hat Enterprise Linux 5 и 6, а также в Fedora Linux и Mandriva.

Уязвимость была обнаружена специалистом в области информационной безопасности Стефаном Эссером, известным за публикацию ряда серьезных уязвимостей в PHP, а также за разработку джейлбрейка для Apple iOS, создателем проектов Hardened-PHP и Suhosin. Комментируя решение проекта Debian отказаться от использования Suhosin, Стефан указал на то, что уязвимость в PHP пришлась весьма кстати, так как она хорошо демонстрирует необходимость в использовании Suhosin, который значительно снижает возможность эксплуатации, даже в стандартной конфигурации.

В настоящее время уже вышла версия PHP 5.3.10 с исправлением уязвимости, также уже пофиксили это и в SVN. Для стабильной ветки Debian вышло обновление php5-5.3.3-7+squeeze7, полностью устраняющее данную уязвимость. Обновление также выпущено для RHEL и CentOS. Так как функция php_register_variable_ex(), ошибка в которой вызывает уязвимость, была добавлена в PHP уже давно, не исключается возможность нахождения способа атаки на более старые версии PHP, начиная c версии 5.3.5. Но данные методы уже не проявляются так легко, как с max_input_vars…
Bash-скрипт для проверки, запущены ли apache, nginx, mysql и ssh на сервере | Siege — утилита для нагрузочного тестирования веб-серверов
Коментарі (0)

Коментарі відсутні. Ваш буде першим!

← Назад

Яндекс.Метрика