В ходе исследований команда DEVCORE обнаружила удаленное выполнение кода в PHP. Из-за широкого использования языка программирования в веб-экосистеме и легкости эксплуатации, DEVCORE классифицировала её серьёзность как критическую и незамедлительно уведомила официальную команду PHP. Официальная команда выпустила патч 06.06.2024. Смотрите детали раскрытия в хронологии.
Описание
Во время внедрения PHP команда не учла функцию Best-Fit преобразования кодировки в операционной системе Windows. Этот недосмотр позволяет неаутентифицированным злоумышленникам обходить предыдущую защиту CVE-2012-1823 с помощью специфических последовательностей символов. Благодаря атаке инъекции аргументов можно выполнять произвольный код на удалённых серверах PHP.
Влияние
Эта уязвимость затрагивает все версии PHP, установленные на операционной системе Windows. Смотрите таблицу ниже для деталей:
- PHP 8.3 < 8.3.8
- PHP 8.2 < 8.2.20
- PHP 8.1 < 8.1.29
Поскольку ветки PHP 8.0, PHP 7 и PHP 5 устарели и более не поддерживаются, администраторам серверов рекомендуется обратиться к следующему разделу для временных рекомендаций по патчам в разделе “Меры по смягчению”.
Как понять, является ли клиент уязвимым?
Для стандартного случая комбинаций Apache HTTP Server и PHP администраторы серверов могут использовать два метода, перечисленных в этой статье, чтобы определить, являются ли их серверы уязвимыми. Стоит отметить, что Сценарий 2 также является стандартной конфигурацией для XAMPP для Windows, поэтому все версии установок XAMPP на Windows по умолчанию являются уязвимыми.
На момент написания этого сообщения было подтверждено, что при работе Windows в следующих локалях (региональных настройках) неавторизованный злоумышленник может непосредственно выполнить произвольный код на удалённом сервере:
- Традиционный китайский (Code Page 950)
- Упрощённый китайский (Code Page 936)
- Японский (Code Page 932)
Для Windows, работающей в других локалях, таких как английский, корейский и западноевропейские языки, из-за широкого спектра сценариев использования PHP в настоящее время невозможно полностью перечислить и устранить все потенциальные сценарии эксплуатации. Поэтому пользователям рекомендуется провести комплексную оценку активов, проверить свои сценарии использования и обновить PHP до последней версии для обеспечения безопасности.
Сценарий 1: Выполнение PHP в режиме CGI
При настройках директивы Action для отображения соответствующих HTTP-запросов к исполняемому файлу PHP-CGI в Apache HTTP Server эта уязвимость может быть непосредственно эксплуатирована. Обычные настройки, которые пострадали, включают, но не ограничиваются:
AddHandler cgi-script .php
Action cgi-script "/cgi-bin/php-cgi.exe"
Или
<FilesMatch "\.php$">
SetHandler application/x-httpd-php-cgi
</FilesMatch>
Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"
Сценарий 2: Открытие бинарного файла PHP
Даже если PHP не настроено в режиме CGI, простое открытие исполняемого файла PHP в каталоге CGI также подпадает под влияние этой уязвимости. Обычные сценарии включают, но не ограничиваются:
- Копирование php.exe или php-cgi.exe в каталог /cgi-bin/.
- Открытие каталога PHP через директиву ScriptAlias, например:
ScriptAlias /php-cgi/ "C:/xampp/php/"
Меры по смягчению
Всем пользователям настоятельно рекомендуется обновить PHP до последних версий 8.3.8, 8.2.20 и 8.1.29. Для систем, которые не могут быть обновлены, можно использовать следующие инструкции для временного смягчения уязвимости. Однако, поскольку PHP CGI является устаревшей и проблемной архитектурой, всё же рекомендуется оценить возможность перехода на более безопасную архитектуру, такую как Mod-PHP, FastCGI или PHP-FPM.
Инструкции
1. Для пользователей, которые не могут обновить PHP:
Следующие правила перезаписи могут быть использованы для блокирования атак. Однако следует обратить внимание, что эти правила являются лишь временной мерой для традиционных китайской, упрощённой китайской и японской локалей. Все же рекомендуется обновиться до версии с исправлением или изменить архитектуру на практике.
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]
2. Для пользователей, которые используют XAMPP для Windows:
XAMPP ещё не выпустил соответствующие обновления для этой уязвимости на момент написания этой статьи. Если пользователь уверен, что функция PHP CGI ему не нужна, влияния уязвимости можно избежать, изменив следующую конфигурацию Apache HTTP Server:
- C:/xampp/apache/conf/extra/httpd-xampp.conf
Найдите соответствующие строки:
ScriptAlias /php-cgi/ "C:/xampp/php/"
И закомментируйте их:
# ScriptAlias /php-cgi/ "C:/xampp/php/"
Хронология
- 2024/05/07 – DEVCORE сообщила о проблеме через официальную страницу раскрытия уязвимостей PHP.
- 2024/05/07 – Разработчики PHP подтвердили уязвимость и подчеркнули необходимость немедленного исправления.
- 2024/05/16 – Разработчики PHP выпустили первую версию исправления и попросили предоставить отзывы.
- 2024/05/18 – Разработчики PHP выпустили вторую версию исправления и попросили предоставить отзывы.
- 2024/05/20 – PHP перешёл в фазу подготовки к выпуску новой версии.
- 2024/06/06 – PHP выпустил новые версии 8.3.8, 8.2.20 и 8.1.29.
Источник: Devco.re







