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 до актуальных версий, в которых реализована логика фильтрации опасных символов.

  1. Определите текущую версию PHP:
php -v

  1. Если версия ниже указанных, необходимо обновиться:
  2. Для ветки 8.3: обновитесь до 8.3.8 или выше.
  3. Для ветки 8.2: обновитесь до 8.2.20 или выше.
  4. Для ветки 8.1: обновитесь до 8.1.29 или выше.

  5. Для пользователей XAMPP: Необходимо скачать актуальную сборку с официального сайта Apache Friends, включающую исправленные версии PHP, так как XAMPP по умолчанию настраивает PHP в режиме CGI.

Временные меры

Если немедленное обновление невозможно, примените следующие защитные меры:

  1. Блокировка через Rewrite Rules (для Apache) Добавьте в конфигурацию Apache или файл .htaccess правило для блокировки подозрительных запросов. Это правило предотвращает передачу аргументов через символ дефиса в кодировках, подверженных уязвимости:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

  1. Отказ от использования PHP-CGI Перейдите на более безопасные способы интеграции PHP, такие как FastCGI (через mod_fcgid или php-fpm) или модуль Apache (mod_php). Убедитесь, что директории с исполняемыми файлами PHP (php.exe, php-cgi.exe) недоступны для прямого вызова через веб-сервер.

  2. Проверка локали системы Уязвимость наиболее опасна в системах с локалями:

  3. Chinese (Simplified/Traditional)
  4. Japanese

Для проверки текущей кодировки в PowerShell:

Get-WinSystemLocale

Смена локали на английскую (en-US) может снизить риск, но не является полной гарантией защиты, так как атака может быть возможна и в других сценариях.