Инструменты php2shell начали применяться через 20 минут после выхода исправлений PHP

Две критические уязвимости ядра PHP получили номера CVE-2026-109618 и CVE-2026-109619, обе оценены в 9,2 по шкале CVSS v4.0. Каждая позволяет выполнять произвольный код на сервере. Технические подробности оказались в открытом доступе до выхода исправлений, а сам патч появился 21 октября 2026 года около 14:00 UTC в версиях 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Первые попытки эксплуатации отметили примерно через 20 минут после публикации сборок, успешного применения к реальным сайтам по состоянию на 23:45 UTC того же дня не подтверждено.

Описание

Масштаб оценивали по суточному срезу HTTP-сканирования, в котором учитывались хосты, самостоятельно сообщающие версию PHP в заголовке ответа. По данным Hunt.io, за 20 октября 2026 года срез охватил 683 922 уникальных IP-адреса и 4 303 096 записей сканирования. Верхние позиции заняли сборки, которые разработчики PHP больше не поддерживают: 7.4.33 - около 80 тысяч адресов, 5.6.40 - около 30,8 тысячи, 8.0.30 - около 21 тысячи, 5.4.16 - примерно 20,5 тысячи. Поддерживаемые ветки тоже видны: на 8.3.35 пришлось около 21,7 тысячи адресов, на 8.3.33 - около 11,8 тысячи. Отдельные значения не складываются в общий итог, поскольку список продолжается длинным хвостом редких сборок.

Строка версии в заголовке говорит о том, чем сервер себя называет, а не о том, какие ошибки в нём остались. Дистрибутивы Linux переносят исправления, не меняя номер версии, поэтому хост со старым номером может быть уже защищён. Из-за этого подсчёт по строке версии завышает число уязвимых систем. Обратная поправка тоже есть: серверы, скрывающие версию, в выборку не попадают вовсе, поэтому по охвату полученное число остаётся нижней границей.

Причину назвали в рекомендации по первой ошибке: повреждение памяти при исчерпании её лимита. Когда выделение обрывается посреди запроса, прежний механизм аварийного выхода покидал контекст, не учитывая частично инициализированные области, а завершение запроса читало это состояние. Исправление убирает такой путь выхода. Входная точка - разбор составных запросов загрузки файлов (multipart/form-data), а частый приём опирается на встроенный отчёт о прогрессе загрузки в сессии, включённый по умолчанию с PHP 5.4. Аутентификация не требуется: PHP разбирает данные запроса раньше, чем начинает работу код приложения.

Хронология уложилась в сутки. 20 октября команда безопасности PHP выпустила предварительное уведомление о внеплановом релизе без технических деталей. В тот же день номера обеих ошибок и название php2shell начали расходиться по открытым каналам, подлинность утечки подтвердили несколько исследовательских групп, включая watchTowr, которая воспроизвела обе ошибки, а предупреждение выпустила CERT-EU. Операторы сайтов отреагировали сами: сервис мониторинга доступности Oh Dear зафиксировал на пике 18,8% недоступных сайтов из числа наблюдаемых против 0,9% неделей ранее. Правила межсетевого экрана веб-приложений (WAF) Cloudflare для этой активности включили 21 октября в 03:02 UTC на всех тарифах.

К 23:45 UTC 21 октября наблюдались попытки и подготовленный инструментарий, но не успешное применение. Ловушки записали два запроса php2shell с одного адреса, который затем сменил строку пользовательского агента. Около десяти рабочих каталогов в захваченных открытых хранилищах содержат инструменты php2shell, поиск по названию дал 146 файлов, и ни в одном каталоге нет списка жертв, оболочки или похищенных данных. Единственный оператор массовой эксплуатации сделал десять прогонов против 123 серверов через сеть из примерно 97 прокси и не получил ни одной оболочки. Трафик шёл от устойчивой сети устройств интернета вещей в стиле Mirai, известной с мая 2026 года: она добавила php2shell в набор распространения, а реальные компрометации в этих каталогах оказались посторонними - учётные данные забрали через внедрение SQL-кода в установку AVideo.

Целями выбирали торговлю, биллинг и веб-хостинг. Один оператор сузил список с 13,3 тысячи кандидатов до 3,3 тысячи живых сайтов: около 3 тысяч на WooCommerce, 251 на WHMCS, 131 на Magento, причём 56 приоритетных целей работали на PHP от 5-й до 8.1-й ветки. Публичного эксплойта, пригодного для x86-64, не нашлось: разбор 30 репозиториев на GitHub не дал рабочего образца, а для выполнения кода нужна вторая ошибка или сервер без рандомизации адресного пространства (ASLR). Всплеск ошибок исчерпания памяти в журналах PHP-FPM отмечает попытку, а не компрометацию, и правила WAF отсекали лишь часть запросов. Часть успешных применений могла остаться вне наблюдения, поэтому отсутствие подтверждённых случаев описывает предел собранных данных, а не доказанное отсутствие атак.

Индикаторы компрометации

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