В открытом доступе появились 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 сокращает поверхность атаки, хотя и не заменяет патч. Помимо обновления, вендорских обходных мер источник не приводит.
Значимость истории в том, что рабочий код появился раньше патчей. Окно между утечкой деталей и исправлением измерялось часами, и в нём уже фиксировали попытки эксплуатации. Для администратора это означает, что проверять журналы и закрывать составные загрузки нужно раньше, чем выйдет обновление.
Ссылки
- https://github.com/0x4148/CVE-2026-109618-php2shell-lab
- https://github.com/Ademking/php2shell-nuclei-templates
- https://github.com/al4n4n/php2shell
- https://github.com/ikow/php2shell-poc
- https://github.com/JoasASantos/php2shell-scanner
- https://github.com/pentestershell/php2shellbt
- https://github.com/scallydima/php2shell-poc
- https://jackalsyn.com/posts/php-up-2026.html
- https://www.qurium.org/forensics/the-cost-of-staying-online/