CVE-2024-4577
PHP Group PHP
2024-06-12
PHP, specifically Windows-based PHP used in CGI mode, contains an OS command injection vulnerability that allows for arbitrary code execution. This vulnerability is a patch bypass for CVE-2012-1823.
Технический анализ и план устранения
Суть уязвимости
CVE-2024-4577 — это критическая уязвимость типа RCE (Remote Code Execution), возникающая из-за небезопасной обработки символов при преобразовании кодировок в Windows (Best-Fit Mapping). Уязвимость затрагивает PHP, работающий в режиме CGI (или когда PHP-бинарники доступны через Apache Action/AddHandler).
Проблема заключается в том, что при использовании определенных локалей (например, китайской или японской) символ «мягкого переноса» (0xAD) при обработке интерпретатором преобразуется в дефис (0x2D). Это позволяет злоумышленнику передавать аргументы командной строки в интерпретатор PHP (например, -d), обходя защиту, внедренную для CVE-2012-1823, и выполнять произвольный PHP-код на сервере.
Как исправить
Основным способом устранения является обновление PHP до актуальных версий, в которых реализована логика фильтрации опасных символов.
- Определите текущую версию PHP:
php -v
- Если версия ниже указанных, необходимо обновиться:
- Для ветки 8.3: обновитесь до 8.3.8 или выше.
- Для ветки 8.2: обновитесь до 8.2.20 или выше.
-
Для ветки 8.1: обновитесь до 8.1.29 или выше.
-
Для пользователей XAMPP: Необходимо скачать актуальную сборку с официального сайта Apache Friends, включающую исправленные версии PHP, так как XAMPP по умолчанию настраивает PHP в режиме CGI.
Временные меры
Если немедленное обновление невозможно, примените следующие защитные меры:
- Блокировка через Rewrite Rules (для Apache)
Добавьте в конфигурацию Apache или файл
.htaccessправило для блокировки подозрительных запросов. Это правило предотвращает передачу аргументов через символ дефиса в кодировках, подверженных уязвимости:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]
-
Отказ от использования PHP-CGI Перейдите на более безопасные способы интеграции PHP, такие как FastCGI (через
mod_fcgidилиphp-fpm) или модуль Apache (mod_php). Убедитесь, что директории с исполняемыми файлами PHP (php.exe,php-cgi.exe) недоступны для прямого вызова через веб-сервер. -
Проверка локали системы Уязвимость наиболее опасна в системах с локалями:
- Chinese (Simplified/Traditional)
- Japanese
Для проверки текущей кодировки в PowerShell:
Get-WinSystemLocale
Смена локали на английскую (en-US) может снизить риск, но не является полной гарантией защиты, так как атака может быть возможна и в других сценариях.