Критическая уязвимость в PHP. Обновления PHP 5.3.12 и PHP 5.4.2 не устраняют проблему

Компьютерная группа реагирования на чрезвычайные ситуации (CERT) опубликовала уведомление об утечке информации о критической уязвимости в PHP, которая позволяет запустить произвольный код на сервере или просмотреть исходный код любого PHP-скрипта, выполняемого в CGI-режиме (используется некоторыми хостинг-провайдерами). Cкрипты, выполняемые с использованием mod_php и FastCGI (например, связки nginx с php-fpm), не подвержены проблеме.

Опасность уязвимости усугубляет тот факт, что несмотря на то, что разработчики PHP были уведомлены о проблеме ещё 17 января, а 23 февраля был отправлен дополнительный запрос от имени CERT, уязвимость остаётся неисправленной. Проблема вызвана ошибкой, допущенной в 2004 году. Интересно также то, что утечка информации возникла из-за оплошности разработчиков PHP, поместивших информацию о проблеме в публичный трекер ошибок, до момента выхода исправления с устранением уязвимости.

Эксплуатация проблемы тривиальна — достаточно передать опцию командной строки, поддерживаемую интерпретатором, в качестве аргумента при выполнении запроса. Например, для показа исходного кода текущего скрипта достаточно указать «http://localhost/index.php?-s». Также можно поступить и с другими опциями и, проявив немного эрудиции, организовать выполнение кода на сервере. Всем пользователям PHP, использующим скрипты в режиме CGI, следует незамедлительно установить патч.

Дополнение 1: В экстренном порядке подготовлены корректирующие выпуски PHP 5.3.12 и PHP 5.4.2, в которых предпринята попытка устранения указанной узявимости. В качестве дополнительного пути блокирования проблемы, в Apache предлагается использовать правила mod_rewrite:

   RewriteCond %{QUERY_STRING} ^(%2d|-)[^=]+$ [NC] 
   RewriteRule ^(.*) $1? [L]

Ещё один способ защиты — во враппере добавить «—«. Например:

   exec /usr/bin/php-cgi -- "$@"

Дополнение 2: Изучение выпущенных обновлений PHP 5.3.12 и PHP 5.4.2 показало, что они устраняют лишь частный случай эксплуатации и не исключают применения обходных путей совершения атаки. Дополнительные обновления PHP, полностью устраняющие уязвимость, будут выпущены в ближайшее время.

Дополнение 3: В публичном доступе появился эксплоит, позволяющий выполнить на сервере произвольный PHP-код, манипулируя директивами php.ini через опцию «-d» (примерно так: «http://localhost/index.php?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://адрес»).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.