В PHP обнаружена [2] одна из самых серьёзных уязвимостей за время существования данного языка. Уязвимость проявляется только в PHP 5.3.9 и позволяет удалённому злоумышленнику выполнить свой код на сервере, независимо от того какие PHP-скрипты используются. При успешном совершении атаки код будет выполнен с правами PHP-приложения, к которому отправлен специально оформленный запрос.
По иронии судьбы, уязвимость связанна с некорректным устранением менее опасной проблемы безопасности в прошлой версии PHP [3]. Для защиты от совершения DoS-атаки, которая может быть вызвана проблемой [4] с предсказуемыми коллизиями в реализации алгоритма хэширования, в PHP 5.3.9 была добавлена директива max_input_vars, позволяющая ограничить число входящих параметров для поступающих HTTP-запросов. В реализации данной директивы была допущена досадная ошибка [5], которая сделала возможным совершение более опасной атаки.
Суть проблемы в том, что при портировании кода с поддержкой директивы max_input_vars был пропущен блок "else" с освобождением памяти и выходом из функции. Без этого блока, при превышении заданного директивой max_input_vars лимита, который по умолчанию установлен в 1000, если превышающая лимит переменная является массивом (например, "a[]=1"), то эта переменная оказывается на месте указателя, который в дальнейшем получает управление.
Всем пользователям PHP 5.3.9 рекомендуется в экстренном порядке наложить патч [6] или вернуться на более ранний выпуск PHP. Официального уведомления и исправления пока не выпущено. Проблему усугубляет то, что поддержка директивы max_input_vars была портирована из PHP 5.3.9 многими дистрибутивами и включена в пакеты с более старыми версиями PHP. Например, в обновлении [7] пакета php5-5.3.3-7+squeeze6 [8] для debian Squeeze имеется [9] поддержка директивы max_input_vars. Та же самая ситуация наблюдается [10] в Red Hat Enterprise Linux 5 и 6 [11], а также в Fedora Linux [12] и Mandriva [13].
Уязвимость выявлена Стефаном Эссером (Stefan Esser), создателем проектов Hardened-PHP [14] и Suhosin [15]. Комментируя решение [16] проекта Debian отказаться от использования Suhosin, Стефан указал [17] на то, что уязвимость в PHP пришлась весьма кстати, так как она хорошо демонстрирует необходимость в использовании Suhosin, который значительно снижает возможность эксплуатации, даже в стандартной конфигурации.
Ссылки:
[1] http://htfl.ru/cat-news-uyazvimosti-po
[2] /out.php?link=http://thexploit.com/sec/critical-php-remote-vulnerability-introduced-in-fix-for-php-hashtable-collision-dos/
[3] http://htfl.ru/news/reliz-php-539
[4] http://htfl.ru/news/universalnyi-sposob-dos-ataki-zatragivayushchii-php-java-ruby-python-i-razlichnye-web-platformy
[5] /out.php?link=https://bugs.php.net/bug.php?id=60708
[6] /out.php?link=http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3/main/php_variables.c?r1=323007&r2=323006&pathrev=323007
[7] /out.php?link=http://www.debian.org/security/2012/dsa-2399
[8] /out.php?link=http://packages.debian.org/squeeze/php5
[9] /out.php?link=http://security.debian.org/debian-security/pool/updates/main/p/php5/php5_5.3.3-7+squeeze6.diff.gz
[10] /out.php?link=http://rhn.redhat.com/errata/RHSA-2012-0033.html
[11] /out.php?link=http://rhn.redhat.com/errata/RHSA-2012-0019.html
[12] /out.php?link=https://admin.fedoraproject.org/updates/FEDORA-2012-0504/php-5.3.9-1.fc16,maniadrive-1.2-32.fc16.1,php-eaccelerator-0.9.6.1-9.fc16.1?_csrf_token=7f83a894ca6c4b906c161213750053f6c70cafb6
[13] /out.php?link=http://www.mandriva.com/en/support/security/advisories/?dis=2011&name=MDVA-2012:004
[14] /out.php?link=http://www.hardened-php.net/
[15] /out.php?link=http://www.hardened-php.net/suhosin/
[16] /out.php?link=http://marc.info/?l=debian-devel&m=132818849522992&w=2
[17] /out.php?link=http://marc.info/?l=php-internals&m=132818975523472&w=2