CVE-2024-4577 поражает Windows-серверы с CGI-интерфейсом и пробивает фильтры командной строки.
Иногда кажется, что прошедшие ошибки навсегда остаются в прошлом, особенно если они известны более десяти лет. Но уязвимость CVE-2024-4577, обнаруженная исследователями из DEVCORE в мае 2024 года, напомнила, что старые баги имеют обыкновение возвращаться. Эта критическая дыра в безопасности касается PHP под Windows и позволяет злоумышленникам обходить механизм защиты аргументов командной строки — с потенциально катастрофическими последствиями.
CVE-2024-4577 затрагивает Windows-сборки PHP, работающие в режиме CGI (Common Gateway Interface), и использует несовершенство кодировки Windows-1252 (или CP932 в случае японской локали). Проблема связана с тем, как Windows обрабатывает аргументы командной строки при передаче параметров в интерпретатор PHP. Даже если активирована защита cgi.force_redirect=1
и cgi.fix_pathinfo=1
, это не останавливает атаку.
Исследователи выяснили, что определённые байтовые последовательности, закодированные в CP932, могут обходить фильтры и быть интерпретированы как управляющие символы. Это позволяет инъецировать параметры, такие как -d
для изменения конфигурации PHP на лету. Злоумышленник может, к примеру, включить allow_url_include
и выполнить внешний код через auto_prepend_file
.
В основе CVE-2024-4577 лежит неочевидная уязвимость, связанная с конфликтом между кодировкой CP932 и механизмом разбора аргументов в PHP. Злоумышленник может передать в URL особую последовательность байтов, например:
http://example.com/index.php?-dauto_prepend_file=php://input
В случае корректного применения обфускации через CP932, параметры передаются в CGI как допустимые аргументы, хотя веб-сервер может не считать их опасными. Это делает атаку невидимой для большинства стандартных фильтров.
Наибольшей угрозе подвергаются пользователи, у которых PHP работает в режиме CGI под Windows — особенно в конфигурации с веб-серверами, такими как IIS, Apache с mod_cgi и другими системами, где CGI-интерфейс не заменён на более безопасные подходы.
Особую опасность уязвимость представляет для хостингов, локальных серверов на Windows и старых корпоративных систем, где PHP не обновляется своевременно, а защита основана на предположении о «надёжной» конфигурации.
Разработчики PHP выпустили экстренное обновление для всех поддерживаемых версий:
При этом исследователи из DEVCORE не только опубликовали подробности уязвимости, но и продемонстрировали PoC (proof of concept), что усилило давление на администраторов, оттягивающих обновление. Им также принадлежит заслуга за обнаружение аналогичной уязвимости CVE-2012-1823, к которой, собственно, и восходит CVE-2024-4577.
Пока обновление не установлено, примените следующие меры немедленно:
mod_rewrite
или аналогичные инструменты).Если злоумышленник получит возможность выполнить произвольный код, последствия могут включать:
С учётом распространённости PHP даже в небольших организациях и на домашних серверах, реальная опасность CVE-2024-4577 гораздо выше, чем кажется на первый взгляд.
CVE-2024-4577 — классический пример того, как взаимодействие старых архитектурных решений (вроде CGI и специфических кодировок) с современной реальностью может породить неожиданно опасную дыру в безопасности. Эта уязвимость — не просто ошибка в реализации, а следствие непродуманной архитектуры, живущей десятилетиями.
Для системных администраторов и разработчиков это отличный повод пересмотреть не только версию PHP, но и подход к его запуску. CGI уже давно не считается безопасным методом — и сегодняшний день снова это подтверждает. Единственный разумный путь — обновление до последних версий и отказ от устаревших практик.
Следите за обновлениями безопасности, не откладывайте патчи и не уповайте на "защиту по умолчанию". Иногда даже такие базовые вещи, как кодировка, могут превратиться в троянского коня внутри вашей инфраструктуры.