Уязвимость в PHP, позволяющая выполнить код при работе в режиме CGI

В PHP выявлена уязвимость (CVE-2024-4577), позволяющая добиться выполнения своего кода на сервере или просмотра исходного кода PHP-скрипта в случае использования PHP в режиме CGI на платформе Windows (конфигурации с mod_php, php-fpm и FastCGI уязвимости не подвержены). Проблема устранена в выпусках PHP 8.3.8, 8.2.20 и 8.1.29.

Уязвимость является частным случаем исправленной в 2012 году проблемы CVE-2012-1823, добавленной для которой защиты оказалось недостаточно для блокирования атаки на платформе Windows. Метод атаки сводится к возможности подстановки аргумента командной строки при запуске интерпретатора PHP через манипуляцию с параметрами запроса к PHP-скрипту.

В старой уязвимости CVE-2012-1823 для эксплуатации достаточно было указать опции командной строки вместо параметров запроса, например, “https://localhost/index.php?-s” для показа исходного кода скрипта. Новая уязвимость основывается на том, что платформа Windows обеспечивает автоматическое преобразование символов, что позволяет для обхода ранее добавленной защиты указывать символы, присутствующие в некоторых кодировках и заменяемые на символ “-” (например, https://localhost/index.php?%ads).

Уязвимость подтверждена в конфигурациях с локалями для традиционного китайского (cp950), упрощённого китайского ( cp936) и японского (cp932) языков, но не исключено её проявление и с другими локалями. Проблема проявляется в конфигурации по умолчанию в наборе XAMPP (Apache + MariaDB + PHP + Perl), а также в любых конфигурациях Apache, в которых php-cgi выставлен в качестве обработчика CGI-скриптов при помощи настройки
‘Action cgi-script “/cgi-bin/php-cgi.exe”‘ или ‘Action application/x-httpd-php-cgi “/php-cgi/php-cgi.exe”‘, а также при непосредственном размещении интерпретатора php в “/cgi-bin” и любых других каталогах, в которых разрешено выполнение CGI-скриптов через директиву ScriptAlias.

Кроме того в обновлениях PHP 8.3.8, 8.2.20 и 8.1.29 устранены ещё две уязвимости:

  • CVE-2024-5458 – возможность обхода фильтра FILTER_VALIDATE_URL в filter_var
  • CVE-2024-5585 – альтернативный вектор атаки на уязвимость CVE-2024-1874, позволяющий обойти ранее добавленную защиту и осуществить подстановку команд при вызове bat- и cmd-файлов через функцию proc_open на платформе Windows (уязвимость BatBadBut).
  • Подверженность функции openssl_private_decrypt атаке Marvin.

Release. Ссылка here.