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

Критическая уязвимость в PHP 5.3.9 позволяющая выполнить код на сервереВ релизе 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...


Оригинал статьи http://pingvinoff.net/2012/02/02/uyazvimost-php-5-3-9/

0 комментариев

Оставить комментарий