После раскрытия 21 октября 2026 года двух уязвимостей PHP, известных как PHP2Shell, в телеметрии появились попытки их эксплуатации. Точная дата первого перехваченного запроса не названа. Число таких попыток ограниченно, и ни одна не завершилась полной цепочкой с выполнением кода на произвольной цели. Публично доступного доказательства концепции (PoC), которое показывало бы полную общую эксплуатацию, не найдено. Несколько партнеров приватно передали эксплойты, работающие против разных целей, но эти данные не опубликованы.
Описание
Речь идет об уязвимостях CVE-2026-109618 и CVE-2026-109619. PHP используется у 65% организаций в наборе данных, что задает масштаб потенциальной экспозиции. За несколько дней ежедневное число различных доступных из интернета уязвимых машин сократилось примерно на 67%. При этом Wiz Research сообщает о падении доли машин с PHP 7.3 или более ранней версией. Среди уязвимых доступных машин эта доля снизилась с 8.3% до 5.7% за пять дней.
Число существенно затронутых организаций, то есть имеющих хотя бы один доступный и уязвимый экземпляр, снизилось примерно на 47.9%. Через неделю после раскрытия менее 53% изначально затронутых организаций оставались уязвимыми. Такая динамика согласуется с сокращением экспозиции через установку исправлений, обновление, вывод машин из эксплуатации и ограничение доступа из интернета. Приведенные числа отражают общий тренд, но не показывают вклад каждой меры; охват сканирования и размер наблюдаемой группы также влияют на итоговые значения.
В перехваченных попытках использовались два варианта открытого набора эксплойтов для PHP-приложений. Ни один не завершил цепочку. Более старый вариант встречал ограничения размера запроса или не создавал нужное исчерпание памяти. Новый вариант стабильно вызывал исчерпание памяти PHP, но не получал адреса памяти, необходимые для продолжения.
В одном из случаев старый этап отправил тело запроса из 1005 частей, включая поле примерно на 12 МБ заполнения. Запрос превысил настроенный лимит в 8 МБ, поэтому PHP пропустил обработку тела. Другой источник отправил более длинную последовательность с зависшими соединениями, чтобы занять рабочие процессы Apache. Когда оставался один рабочий процесс, попытка формировала распределение памяти запросами с 1001 полем по 3000 байт, но нужное исчерпание памяти не наступило. Один из источников был выходным узлом VPN, что ограничивает выводы о происхождении.
Новый вариант продвинулся дальше: подтверждено, что его первый этап вызывал исчерпание памяти PHP на ловушке. Не установлено, сохранялось ли состояние сессии, нужное следующему этапу. Этот этап пытался раскрыть память процесса, но не сработал ни в одном перехваченном запуске. В большинстве случаев соединение закрывалось без ответа, в остальных возвращался обычный идентификатор сессии. Ни один источник не отправил финальный этап эксплуатации.
Неудача с раскрытием памяти показывает, насколько трудно построить общий эксплойт, который надежно работает на разных версиях PHP и конфигурациях развертывания. Набор был рассчитан на конкретную сборку PHP с лимитом памяти 128 МБ. Другая ловушка использовала ту же версию PHP в иной сборке с дополнительными расширениями и лимитом 64 МБ. Такие различия влияют на распределение памяти и повторное использование памяти. Кроме того, последовательные запросы должны попадать в один и тот же дочерний процесс Apache, пока сохраняется состояние сессии. Таймауты, задержки сети и доступность рабочих процессов нарушают эту последовательность.
В собственных тестах таймауты запросов вместе с сетевой задержкой не дали цепочке завершиться через интернет-соединение. Публичного общего решения для закрепления запросов за рабочим процессом и для раскрытия информации на разных развертываниях не найдено. Копирование публичных PoC и запуск их в масштабе не решает задачу превращения эксплойта для конкретной конфигурации в надежный рабочий инструмент. Предположительно, эти барьеры со временем сократятся, поскольку часть атакующих обладает нужной экспертизой.
Отдельно наблюдались инструменты с маркировкой PHP2Shell, которые не пытались эксплуатировать ни одну из двух уязвимостей. Они использовали давнюю технику отравления сессии, пытаясь записать код PHP в файл сессии через механизм прогресса загрузки. Затем инструмент пытался выполнить этот код через отдельную уязвимость локального включения файлов (LFI) в приложении. Ключевой элемент - уязвимая конечная точка из лабораторной среды PoC; без нее или аналогичной уязвимости цепочка не выполняет код. Один вариант с дополнительным заполнением вызвал срабатывание проверки на исчерпание памяти, но выполнение кода не наблюдалось.
Данные, собранные на ловушках Adel Karimi, дают свидетельство успешной эксплуатации: там зафиксированы поток эксплуатации, раскрытие памяти и последующее выполнение кода. Однако эти цели работали в благоприятной конфигурации Apache mod_php с одним рабочим процессом, поэтому результат не подтверждает надежность на других развертываниях. Часть сканеров не завершила эксплуатацию на наблюдаемой ловушке, но успешно сработала против ловушки Adel Karimi. Это, вероятно, повлияло на включение PHP2Shell в перечень CISA KEV.
Наблюдения не показывают, сколько попыток осталось вне телеметрии и насколько приватные эксплойты партнеров применимы к другим конфигурациям. Они также не подтверждают, что публичные PoC способны надежно работать на произвольной цели. Запросы с маркировкой PHP2Shell и срабатывания на исчерпание памяти могут давать ложные срабатывания: часть такого трафика не доказывает эксплуатацию. За пределами анализа остаются цели, не попавшие в сканирование, и инструменты, которые не были опубликованы.