Эксплуатация двух уязвимостей PHP2Shell началась раньше официального раскрытия технических сведений и не остановилась после выхода патчей. Попытку использования зафиксировали ещё до публикации деталей 20 октября 2026 года, а сканирование и ранние атаки отмечали несколько поставщиков защиты до и сразу после 21 октября, когда проект PHP выпустил исправления. Массового успешного поражения, которое удалось бы связать с конкретным оператором, не подтверждено. Обе уязвимости получили оценку 9.2 по шкале CVSS версии 4.0.
Описание
Уточнённые данные об эксплойте появились 22 октября 2026 года. По обновлённой оценке VulnCheck от 22 октября 2026 года опубликованный код добивается выполнения команд на процессорах x86-64 при включённой рандомизации адресного пространства в версиях PHP с 8.4.10 по 8.4.26. Утечка памяти тем же кодом работает на ARM64, однако выполнения команд на этой архитектуре пока не получено. Как минимум один публичный эксплойт обошёл рандомизацию на x86-64 для отдельной версии, 8.4.26. Прежняя позиция, согласно которой ни один публичный эксплойт не обходил эту защиту на x86-64, тем самым опровергнута.
У двух уязвимостей общая причина. Механизм аварийного прерывания запроса, построенный на longjmp, останавливает обработку на середине операции и оставляет внутреннее состояние недостроенным либо указывающим на освобождённую память. В конфигурациях с рабочими процессами следующий запрос, попавший на тот же процесс, наследует это состояние. Первая уязвимость, CVE-2026-109618, срабатывает при исчерпании лимита памяти: обработчик выходит из распределителя памяти, часть контекста остаётся частично инициализированной, и завершение запроса читает эти данные. Момент исчерпания памяти задаёт сам атакующий через разбор составного тела запроса.
Вторая уязвимость, CVE-2026-109619, описывает использование освобождённой памяти. Запрос, прерванный в неудачный момент - из-за критической ошибки, тайм-аута или нехватки памяти, - оставляет глобальное состояние, принадлежавшее этому запросу, указывающим на освобождённую область. Последующий запрос на том же рабочем процессе читает её до инициализации. Подтверждёнными путями названы механизм прогресса загрузки сессии и трассировки при критических ошибках в PHP 8.5.
Полное выполнение команд без аутентификации подтверждено для Apache mod_php с настройками по умолчанию и схемой prefork. Для PHP-FPM заявлена уязвимость по результатам анализа исходного кода, однако полный эксплойт не показан; проверенным остаётся путь через прогресс загрузки сессии. FrankenPHP отнесён к вероятно уязвимым, LiteSpeed - к условно уязвимым, php-cgi - к находящимся в зоне риска; ни для одной из этих трёх платформ успешное срабатывание не подтверждено. Отдельно отмечена путаница в ранних публикациях: поле прогресса загрузки сессии связывали с первой уязвимостью, тогда как оно относится только ко второй, и его отключение на первую не влияет.
Запустить сбой несложно, надёжное выполнение кода - нет. Атакующему нужно попасть повторным запросом в тот же рабочий процесс и разместить свои данные в освобождённой области памяти; иначе процесс падает либо отвечает штатно. Уже показаны исходы без выполнения кода: падение рабочего процесса с отказом в обслуживании, чтение произвольных файлов через кэш скомпилированного кода и раскрытие около 67 КБ памяти процесса. Ни один из этих исходов не равен удалённому выполнению команд.
Наблюдаемая активность включает сканирование с характерными подписями клиента в заголовке запроса и проверку blind-сценария, при которой признаком срабатывания служит заранее заданная строка в ответе сервера. Предположительно готовится кампания оператора, которого связывают с КНДР: обсуждались списки целей по странам и отраслям, обслуживание инфраструктуры для размещения эксплойтов и предварительная проверка кода в лабораторных условиях. Уверенность в связи с этим оператором оценивается как умеренная, а не высокая.
Ограничения касаются прежде всего качества данных. Часть адресов, использованных для размещения эксплойтов и списков целей, совпадает с анонимизирующей инфраструктурой, поэтому совпадения требуют проверки перед выводами. Сведения о втором этапе вредоносной программы поступили от одного источника и независимо не подтверждены; для другого образца доступно лишь описание поведения. Сам факт запроса с подозрительными признаками не доказывает состоявшееся выполнение кода - сбой рабочего процесса и раскрытие памяти возможны и без него.
Отдельно ограничена видимость на уровне приложения. Срабатывание происходит до того, как начинает исполняться код сайта, поэтому в журналах веб-приложений следов остаётся мало, а основная информация сосредоточена в телеметрии процессов и сети. Признаки, описанные как поведенческие, могут давать ложные срабатывания на легитимных загрузках больших форм и на аварийных завершениях процессов по иным причинам. Исправленные сборки выпущены для поддерживаемых ветвей, включая 8.5.12, 8.4.27, 8.3.36 и 8.2.35; для ветвей, снятых с поддержки, исправлений нет либо они доступны только в сборках поставщиков. Каких-либо данных о том, что исправление ядра PHP устраняет уже оставленное в памяти состояние рабочего процесса, в материалах не приводится.