CVE-2024-4577: уязвимость в PHP позволяет обойти защиту и исполнить код

CVE-2024-4577: уязвимость в PHP позволяет обойти защиту и исполнить код

CVE-2024-4577 поражает Windows-серверы с CGI-интерфейсом и пробивает фильтры командной строки.

image

Иногда кажется, что прошедшие ошибки навсегда остаются в прошлом, особенно если они известны более десяти лет. Но уязвимость 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.
  • Возможность удалённого исполнения произвольного кода.
  • Эксплуатация возможна без необходимости авторизации.
  • Затрагивает все версии PHP для Windows до 8.1.8 (включительно).

Кто под ударом

Наибольшей угрозе подвергаются пользователи, у которых PHP работает в режиме CGI под Windows — особенно в конфигурации с веб-серверами, такими как IIS, Apache с mod_cgi и другими системами, где CGI-интерфейс не заменён на более безопасные подходы.

Особую опасность уязвимость представляет для хостингов, локальных серверов на Windows и старых корпоративных систем, где PHP не обновляется своевременно, а защита основана на предположении о «надёжной» конфигурации.

Реакция сообщества и устранение

Разработчики PHP выпустили экстренное обновление для всех поддерживаемых версий:

  • PHP 8.1.29
  • PHP 8.2.20
  • PHP 8.3.8

При этом исследователи из DEVCORE не только опубликовали подробности уязвимости, но и продемонстрировали PoC (proof of concept), что усилило давление на администраторов, оттягивающих обновление. Им также принадлежит заслуга за обнаружение аналогичной уязвимости CVE-2012-1823, к которой, собственно, и восходит CVE-2024-4577.

Как защититься

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

  1. Отключите CGI-режим PHP, если он используется. Переход на FastCGI или модульную интеграцию в сервере (например, mod_php) — более безопасный подход.
  2. Настройте web-сервер на фильтрацию аргументов командной строки в URL (например, через mod_rewrite или аналогичные инструменты).
  3. Убедитесь, что локаль системы не использует CP932 или Windows-1252.
  4. Изолируйте PHP от внешнего доступа через .htaccess или ограничения на уровне сервера.

Потенциальные последствия эксплуатации

Если злоумышленник получит возможность выполнить произвольный код, последствия могут включать:

  • Полнейший контроль над сервером.
  • Утечку конфиденциальных данных и учетных записей.
  • Инъекцию вредоносного кода (включая веб-оболочки).
  • Включение сервера в ботнет или распространение вредоносного ПО.

С учётом распространённости PHP даже в небольших организациях и на домашних серверах, реальная опасность CVE-2024-4577 гораздо выше, чем кажется на первый взгляд.

Выводы

CVE-2024-4577 — классический пример того, как взаимодействие старых архитектурных решений (вроде CGI и специфических кодировок) с современной реальностью может породить неожиданно опасную дыру в безопасности. Эта уязвимость — не просто ошибка в реализации, а следствие непродуманной архитектуры, живущей десятилетиями.

Для системных администраторов и разработчиков это отличный повод пересмотреть не только версию PHP, но и подход к его запуску. CGI уже давно не считается безопасным методом — и сегодняшний день снова это подтверждает. Единственный разумный путь — обновление до последних версий и отказ от устаревших практик.

Следите за обновлениями безопасности, не откладывайте патчи и не уповайте на "защиту по умолчанию". Иногда даже такие базовые вещи, как кодировка, могут превратиться в троянского коня внутри вашей инфраструктуры.


Твой код — безопасный?

Расскажи, что знаешь о DevSecOps.
Пройди опрос и получи свежий отчет State of DevOps Russia 2025.