Аналитики Devcore обнаружили опасную уязвимость удаленного выполнения кода (RCE) в PHP для Windows, затрагивающую все релизы, начиная с версии 5.x. Эта проблема представляет угрозу для огромного количества серверов по всему миру.
Уязвимость получила идентификатор CVE-2024-4577 и была замечена аналитиками Devcore 7 мая 2024 года, которые немедленно проинформировали о баге разработчиков PHP.
Вчера сопровождающие выпустили патч, устраняющий уязвимость, но применение патчей в проекте такого масштаба будет сложной задачей, и многие системы могут оставаться уязвимыми для атак в течение длительного времени.
К тому же, когда речь заходит о критических уязвимостях, затрагивающих большое количество устройств, злоумышленники обычно не теряют времени даром и немедленно начинают поиск уязвимых систем. К сожалению, CVE-2024-4577 не стала исключением, так как специалисты The Shadowserver Foundation уже обнаружили несколько IP-адресов, сканирующих сеть в поисках уязвимых серверов.
Ошибка CVE-2024-4577 возникает при обработке преобразований кодировок символов, в частности, в функции Best-Fit в Windows, если PHP используется в режиме CGI.
«При имплементации PHP разработчики не обратили внимания на функцию Best-Fit для преобразования кодировок в Windows, — поясняется в сообщении DevCore. — Баг позволяет неаутентифицированным злоумышленникам обойти предыдущую защиту от [старой проблемы] CVE-2012-1823 с помощью определенных последовательностей символов. Произвольный код может быть выполнен на удаленных PHP-серверах с помощью инъекции аргументов».
Специалисты предупреждают, что даже если PHP не работает в режиме CGI, CVE-2024-4577 все равно можно эксплуатировать, если исполняемые файлы PHP (например, php.exe или php-cgi.exe) находятся в каталогах, доступных веб-серверу.
Поскольку такая конфигурация используется по умолчанию в XAMPP для Windows, исследователи пишут, что все установки XAMPP в Windows, скорее всего, уязвимы.
Более того, уязвимость усугубляется при использовании некоторых локализаций, которые более восприимчивы к этому багу, включая традиционный китайский, упрощенный китайский и японский.
По словам экспертов Devcore, уязвимость затрагивает все версии PHP для Windows, поэтому в случае использования PHP 8.0 (поддержка прекращена), PHP 7.x (поддержка прекращена) или PHP 5.x (поддержка прекращена), необходимо либо срочно обновиться до более свежей версии, либо воспользоваться защитными мерами.
Так, пользователям поддерживаемых версий PHP следует обновиться до версий, содержащих патчи: PHP 8.3.8, PHP 8.2.20 и PHP 8.1.29.
Для систем, которые не получится обновить прямо сейчас, а также пользователям старых версий рекомендуется применить правило mod_rewrite для блокирования атак:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? – [F,L]
При использовании XAMPP и отсутствии необходимости в PHP CGI следует найти в конфигурационном файле Apache директиву ScriptAlias (обычно в C:/xampp/apache/conf/extra/httpd-xampp.conf) и закомментировать ее.
Кроме того, исследователи предлагают администраторам рассмотреть возможность перехода с CGI на более безопасные альтернативы, например, FastCGI, PHP-FPM и Mod-PHP.