Вскоре после раскрытия 21 октября 2026 года уязвимостей PHP, получивших общее обозначение PHP2Shell, в сети зафиксировали массовые автоматические запросы к механизму обработки загрузки файлов. Часть запросов ограничивалась проверкой отклика на специально сформированные данные. Другие проверяли, выполняются ли команды операционной системы. Отдельные запросы сочетали такую проверку с загрузкой файлов второй стадии с внешнего сервера.
Описание
По данным Arctic Wolf Labs, набор запросов указывает на работу нескольких сканеров и нескольких вариантов демонстрационного кода. Различия проявлялись в структуре запросов, в уникальных метках, которые сканеры вставляли в поля формы, и в идентификаторах сессий. Один из сканеров представлялся в запросе собственным именем, включавшим номер одной из уязвимостей.
Наименее агрессивные запросы несли блок PHP, состоящий из одного комментария. Такой блок не выполняет команд и не возвращает данных; предположительно он служил проверкой того, попадает ли сторонний PHP-код в данные о ходе загрузки. Другие сканеры вставляли метки в имя загружаемого файла и в значение поля, рассчитывая увидеть их в ответе сервера. Третьи проверяли цепочку с записью PHP-кода в данные о ходе загрузки и последующим подключением файла сессии через параметр страницы. При успехе ответ содержал бы версию PHP, имя хоста и результат проверки наличия файла, связанного с WordPress. Совпадение запрошенного файла сессии с конфигурацией цели и сам факт подключения этого файла приложением не установлены.
Наиболее агрессивные запросы проверяли выполнение за пределами интерпретатора PHP. Код декодировал и запускал команду определения учётной записи процесса, а вывод обкладывался уникальными метками, чтобы сканер мог найти его в ответе. Повторное использование одной и той же метки в нескольких запросах может означать повторные попытки, вставку в разные поля или проверку одной цели несколько раз. Наличие такого кода в запросе само по себе не доказывает, что PHP его вычислил, а команда выполнилась.
Предположительно боевые запросы сочетали проверку команд с доставкой второй стадии. Они собирали сведения о хосте и учётной записи процесса, печатали метку подтверждения, меняли рабочий каталог на временный и загружали файл с внешнего адреса утилитой wget. Последовательность команд повторялась в дополняющих полях формы, что могло влиять на раскладку памяти и повышать надёжность эксплуатации.
На сервере, откуда запрашивались файлы, размещались две сборки семейства Potassium - ботнета на основе Mirai, впервые описанного в марте 2026 года. Вариант для ARM занимает 215 КБ, вариант для x86-64 - 175 КБ; в обеих сборках перечислены 24 режима сетевых атак, включая насыщение канала по UDP и TCP и обращение к игровым протоколам. В сборке для x86-64 отмечена возможность удалённой оболочки, в ARM-варианте её не нашли. Одинаковые 32-байтный ключ и 12-байтный nonce указывают на общий сборщик. В обеих сборках есть настройки получения адресов управляющей инфраструктуры через службу имён Ethereum: два имени в зоне .eth, семь публичных узлов RPC и 32 текстовых ключа с именами от ip до ip32. Эта возможность в обоих образцах отключена, поэтому сведения о ней описывают заложенный механизм, а не работу сети управления.
Записи о запросах не показывают, были ли целевые системы уязвимы и удалось ли выполнить команды. Не установлено и то, что наблюдавшиеся запросы загрузили или запустили образцы Potassium. Отдельные строки в запросах могут давать ложные срабатывания при поиске похожей активности.
Уязвимости затрагивают PHP-FPM, Apache с mod_php, php-cgi, FrankenPHP и LiteSpeed; исправления вышли в версиях 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Публичный демонстрационный код доступен, и несколько организаций независимо воспроизвели как минимум один путь эксплуатации. Масштаб успешных срабатываний пока не установлен, а раскрытие состоялось 21 октября 2026 года, поэтому картина активности может меняться.