Публичные PoC для уязвимостей PHP2Shell появились раньше официальных патчей

PHP2shell

В открытом доступе появились PoC (демонстрационный код, использующий уязвимость) для PHP2Shell - двух уязвимостей в интерпретаторе PHP. Часть опубликованных образцов воспроизводит повреждение памяти и доводит обработку запроса до выполнения команд на сервере. Другие, как отмечает Qurium, только проверяют доступность функций работы с сессиями и произвольные команды не выполняют. Код выложили на GitHub в течение часов после утечки демонстрационного видео и до выхода исправлений; конкретные номера уязвимых версий PHP источник не называет.

Механика двух уязвимостей и состав публичного кода

PHP2Shell объединяет две уязвимости - CVE-2026-109618 и CVE-2026-109619. Обе связаны с управлением памятью и обработкой ошибок. При аварийном завершении запроса, например при нехватке памяти, интерпретатор сохраняет ссылки на уже освобождённые области. Следующий запрос обращается к устаревшим данным, а это даёт раскрытие содержимого памяти, её повреждение или выполнение команд при более сложной цепочке. Такой класс ошибок называют использованием памяти после освобождения (use-after-free). Числовой оценки CVSS в исходных данных нет, источник называет обе уязвимости критическими.

Атака идёт по сети: злоумышленник отправляет на сервер специально сформированные HTTP-запросы, а затем обращения к испорченному внутреннему состоянию. Точные условия зависят от версии PHP, настроек сервера и поведения памяти, поэтому единого сценария источник не приводит. Требуется ли аутентификация и участие пользователя, в исходных данных не уточняется; детали приведены в официальном уведомлении команды безопасности PHP. Публичный код повторяет несколько подходов: обработку прогресса загрузки файла в сессии, десериализацию данных сессии (преобразование сохранённых данных обратно в объекты), обработку фатальных ошибок и кеш скомпилированного кода OPcache.

Возможности опубликованных наборов различаются. Одни содержат составные HTTP-запросы (multipart - формат, которым браузер передаёт файлы и данные форм) с двоичными структурами и проверочными командами; такие образцы претендуют на выполнение команд на сервере. Другие ограничиваются проверкой доступности механизма сессий и не доказывают ни повреждения памяти, ни выполнения команд. Часть образцов совпадает по строению с публичным сканером, который автоматически обходит список адресов. Поэтому публикация PoC не означает, что любой сервер с PHP уже уязвим к готовому коду.

Цепочка событий началась с утечки. За два дня до запланированного раскрытия, 20 октября 2026 года, пользователь Hacker News опубликовал идентификаторы будущих уязвимостей и заявленную дату релиза, но без технических инструкций. Команда безопасности PHP отреагировала и перенесла выпуск патчей на день раньше. Позже, по данным PHP Foundation, исследовательская фирма Calif по ошибке выложила видео с демонстрацией успешной эксплуатации. Видео быстро удалили, однако копии разошлись по социальным сетям, и содержащихся в них подсказок хватило другим исследователям для сборки рабочих цепочек.

Первые обращения, похожие на эксплуатацию, Qurium зафиксировала утром 21 октября 2026 года, за несколько часов до выхода исправлений. До релиза патчей в журналах оказалось 20 запросов с 17 адресов, и все они адресовались одному сайту - изданию Arab Reporters for Investigative Journalism. После выхода обновлений активность выросла: 216 подозрительных запросов к 37 сайтам. Удалась ли хотя бы одна попытка, Qurium не сообщает. Записи в журналах показывают попытки эксплуатации, а не подтверждённый захват сервера.

Официальные исправления вышли 21 октября 2026 года примерно через 18 часов после первой публичной утечки. Источник не называет номера исправленных версий; их публикует проект PHP в своём уведомлении. Пока патчей не было, Qurium закрывала риск своими силами: ночью развернула временные настройки PHP, а утром добавила правила на межсетевом экране для веб-приложений (WAF, фильтр HTTP-трафика). Правила ограничивали составные загрузки, через которые шли попытки эксплуатации. После релиза все установки PHP в инфраструктуре обновили за 30 минут.

Администраторам нужно обновить PHP до версии из официального уведомления проекта. До установки обновления полезно проверить журналы веб-сервера на составные запросы с параметрами прогресса загрузки в сессии и на повторяющиеся обращения с одного адреса. Ограничение таких загрузок на WAF сокращает поверхность атаки, хотя и не заменяет патч. Помимо обновления, вендорских обходных мер источник не приводит.

Значимость истории в том, что рабочий код появился раньше патчей. Окно между утечкой деталей и исправлением измерялось часами, и в нём уже фиксировали попытки эксплуатации. Для администратора это означает, что проверять журналы и закрывать составные загрузки нужно раньше, чем выйдет обновление.

Ссылки

Комментарии: 0