// Новости

Уязвимость PHP2Shell: дыра в движке, не в CMS

Уязвимость PHP2Shell: патч движка PHP 8.2–8.5 и миллионы попыток без подтверждённого RCE

Уязвимость PHP2Shell — две дыры в движке PHP, CVE-2026-109618 и CVE-2026-109619, обе с CVSS 9,2: HTTP-запрос без логина может выполнить код на сервере. Патчи уже в 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Через 45 минут после анонса Cloudflare насчитал десятки тысяч попыток, за два часа — сотни тысяч, а к утру 22 октября 2026 года — миллионы. Подтверждённого удалённого выполнения кода производители не показали.

Коротко

  • CVE-2026-109618 и CVE-2026-109619, обе CVSS 9,2, закрыты в PHP 8.5.12, 8.4.27, 8.3.36 и 8.2.35.
  • Дыра в движке с PHP 5.4 (2012): чистые WordPress, Drupal и Joomla уязвимы, пока не обновлён интерпретатор.
  • Cloudflare: десятки тысяч попыток за 45 минут и миллионы к утру 22 октября 2026 года; подтверждённого RCE производители не опубликовали.
  • Sophos: попытки завербовать хосты в Mirai-форк Potassium не удались.
  • Censys на 23 октября 2026 года всё ещё считал уязвимыми более 34,4 млн сервисов на PHP.

Что такое уязвимость PHP2Shell и какие версии её закрывают

Уязвимость PHP2Shell — два бага интерпретатора, CVE-2026-109618 и CVE-2026-109619, каждый с CVSS 9,2. Неаутентифицированный HTTP-запрос может выполнить код на сервере. Так назвали сразу обе уязвимости: ошибка не в файлах сайта, а в коде, который разбирает запрос до логики приложения.

Исправления вышли для всех веток, которые проект PHP ещё сопровождает.

ВеткаЧто ставитьКомментарий
PHP 8.58.5.12Сопровождаемая ветка
PHP 8.48.4.27Сопровождаемая ветка
PHP 8.38.3.36Сопровождаемая ветка
PHP 8.28.2.35Сопровождаемая ветка
PHP 8.1Штатного патча нетВетка уже не сопровождается
PHP 8.0Штатного патча нетВетка уже не сопровождается
PHP 7.4Штатного патча нетВетка уже не сопровождается

Номер из php -v не доказывает ни дыру, ни защиту. Дистрибутив может перенести исправление в старый пакет и не сменить основную версию в строке вывода. Консольный PHP и обработчик сайта часто разные сборки: обновили CLI, а PHP-FPM или Apache с mod_php продолжают крутить прежний бинарник.

Ошибочный код, по данным Sysdig Threat Research Team, восходит к PHP 5.4 2012 года и лежит в движке. Любой WordPress, Drupal или Joomla с чистым кодом приложения остаётся открытым, пока не обновлён сам PHP.

Почему чистый WordPress, Drupal и Joomla всё ещё уязвимы

Обновлённое ядро CMS уязвимость PHP2Shell не закрывает. WordPress, Drupal и Joomla исполняются тем PHP, который стоит на сервере. Свежие плагины и темы чинят свои ошибки. Код 2012 года в интерпретаторе от них не зависит.

При успехе код выполняется с правами пользователя веб-приложения. Процесс читает свой конфиг, переменные окружения, ключи API, доступ к базе и внутренние адреса, которые ему уже разрешены. Для биллинга, платёжного шлюза или панели этого хватает, чтобы потери начались без захвата операционной системы.

Ветки 7.4, 8.0 и 8.1 проект PHP уже не сопровождает. Остаётся пакет дистрибутива с перенесённым исправлением или переход на 8.2 и новее. На виртуальном хостинге версию выбирает площадка. Если в панели всё ещё 7.4, обновление файлов WordPress риск не снимает: писать нужно хостеру.

Тот же зазор между публикацией и массовыми попытками за часы мы разбирали, когда на WordPress дыру эксплуатировали через несколько часов после раскрытия. Здесь бьют общий движок. Смотреть имеет смысл стек целиком: как раз это предмет проверки сайта на WordPress и Битрикс.

Миллионы попыток эксплуатации PHP — и ни одного подтверждённого RCE

Cloudflare насчитал десятки тысяч обращений через 45 минут после публичного анонса, сотни тысяч за два часа и миллионы к утру 22 октября 2026 года. Подтверждённого RCE в этой телеметрии нет.

Previdian зафиксировал первое событие по CVE-2026-109618 в 13:05 UTC 21 октября 2026 года, дальше — сотни попыток с десятков адресов. По CVE-2026-109619 поток слабее. Успешного выполнения кода и оставленных PHP-файлов в этой выборке не видно.

Cisco Talos характеризует активность как сканирование и нескоординированную доставку публичных заготовок. Прогнать чужой код по списку адресов дешевле, чем встроить дыру в собственный набор, и картина пока ближе к первому.

Beelzebub, Dataminr и Wordfence успешных компрометаций тоже не подтвердили. В попытках искали признак выполнения команды, читали секреты из переменных окружения, пробовали закрепиться и подтянуть второй этап. Адрес с геолокацией в Китае пытался оставить веб-шелл через серверный файл сессии. Геолокация адреса заказчика не называет.

Публичная выборка без успехов описывает сенсоры, а не каждый сервер в интернете. Сетевой датчик видит запрос и знакомую сигнатуру. Команду внутри процесса, чтение локального конфига и следующий шаг по сети он видит не всегда. Цифры Cloudflare, Previdian и Sophos — то, что попало в их датчики.

В Великобритании 32 цифровых сервиса отключили полностью и четыре — частично, как предосторожность. Национальный центр кибербезопасности разослал около 50 000 уведомлений. Сайты органов власти, школ и больниц в Азии, Европе и Северной Америке тоже уходили в офлайн заранее.

Что за ботнет Potassium и при чём тут Mirai

В ботнет Potassium через уязвимость PHP2Shell хосты завербовать не удалось — так Sophos описывает наблюдаемые попытки. Potassium — форк Mirai. Synthient отметил семейство в марте 2026 года, дальше его разбирали исследователи Nokia Deepfield.

Образец у Sophos — обновлённая и заметно расширенная версия варианта начала 2026 года: в нём есть загрузчик и функции срыва работы сети.

Nokia Deepfield выделила несколько редких для Mirai приёмов. Таблица статической конфигурации зашифрована ChaCha20 — раньше в этом семействе так не делали. Всё, что идёт по сети, маркируется одним байтом 0xED.

Протокол обратного шелла с именами SHELL и SHOUT сидит на том же канале, что и команды атак. Перед подключением две 16-битные половины каждого IP-адреса из A-записи меняются местами.

Arctic Wolf насчитал 24 команды флуда: ICMP, TCP, UDP и OpenVPN. Сборки под ARM и x86 содержат конфиг поиска инфраструктуры управления через Ethereum Name Service, но в обоих разобранных образцах разрешение имён через ENS отключено.

В песочнице Sophos цепочка выглядит так: три исходных адреса, отдельный хост-загрузчик, DNS-запрос, ответ с адресом управления, HTTP с ожиданием кода 200, полезная нагрузка в формате ELF и канал на TCP-порту 50792. Конкретные адреса, домен и хост загрузчика Sophos публиковал как индикаторы. Здесь их нет: сверяйте с бюллетенем производителя.

Цель образца в разборе — объёмный флуд двух соседних узлов в украинской сети из диапазона 45.88.138.0. Это логика Mirai. Неудачная вербовка оставляет след в журнале доступа. Удачная превратит сервер в источник флуда.

Готовые инструменты и обход ASLR, о котором говорит VulnCheck

Готовые инструменты под PHP2Shell на открытых серверах уже были, компрометации на обследованных целях — нет. SOCRadar нашёл комплект под ещё не пропатченную PHP 8.4.26 и Apache mod_php. Центральный файл aslr_exploit.py сам оператор называет эксплойтом «в один клик».

Рядом три скрипта разведки. Один снимает версию PHP и раскладку примерно с 20 площадок, второй смотрит 11 из них на видимые ошибки, страницы phpinfo, включение файлов и признаки инъекции в сессию, третий перечисляет пользователей и плагины на пяти сайтах WordPress.

Сам набор SOCRadar описывает тремя широкими фазами на обычном HTTP: перезапуск worker-процессов цели, утечка адресов через cookie сессии против ASLR и запуск команды через обработку прогресса загрузки сессии. Это пересказ чужого набора по отчёту, а не инструкция: конкретные запросы и параметры — в бюллетене SOCRadar.

Площадки из Канады, Китая, Финляндии, Франции, Польши, Великобритании и США на 22 октября 2026 года были без шелла: предварительные условия эксплойта не сошлись.

Hunt.io связал тот же сервер со сканированием 123 машин в облаке, на виртуальном хостинге и в сетях провайдеров. Около 57 из них на PHP, многие на неподдерживаемых 5.x–7.x. Десять отвергли запрос сразу, включая три из пяти за Cloudflare. Ни одну не скомпрометировали.

Отдельно всплыли десять открытых каталогов со связанными файлами. Их адреса — индикаторы SOCRadar и Hunt.io, в текст их не переносим. SOCRadar относит набор к операции с уклоном в криптовалюты и Web3: это оценка по соседней активности, не вывод по каждому запросу к PHP.

Спенсер Макинтайр, директор по разработке эксплойтов VulnCheck, описал цепочку, где две уязвимости связаны вместе: утечка памяти обходит ASLR, код выполняется на x86-64 даже при рекомендованной для продакшена настройке вывода ошибок PHP. Другого публичного или коммерческого эксплойта с тем же результатом при тех же условиях команда не нашла.

Пока цепочка не разошлась, ASLR и конкретная сборка отсекают часть попыток. Если описание уйдёт в общий доступ, довод «вывод ошибок выключен» перестанет держать. WAF режет известные запросы и код движка не меняет. В выборке Hunt.io Cloudflare прикрыл часть целей. Новая связка проходит мимо вчерашнего правила.

Что проверить сегодня, если продакшн работает на PHP

Сегодняшнее действие одно: поставить исправление в тот PHP, который отвечает на HTTP, и перезапустить обработчик. Для живых веток это 8.5.12, 8.4.27, 8.3.36 или 8.2.35, либо пакет ОС с перенесённым патчем.

После установки нужен перезапуск PHP-FPM или Apache с mod_php. В контейнерах — новый образ и пересоздание работающих экземпляров. Файл на диске и старый worker в памяти расходятся часами.

Сверьте версию пакета, активный SAPI и время старта процессов. Консольный php -v ничего не скажет о пуле FPM, который не перезапускался неделями.

Гасить сайт стоит, если патч не встанет в ближайшие часы, а сервис открыт в интернет. Так поступили с частью британских сервисов. Если обновление ставится сегодня, полный офлайн — запасной вариант. Тянуть до планового окна на следующей неделе при неаутентифицированной дыре в движке — слабая ставка.

Если между анонсом и патчем окно уже было, смотрите шире, чем новые файлы .php в корне. Проверьте следующее:

  • дочерние процессы php-fpm и apache, запуски sh, curl и wget от пользователя сайта;
  • исходящие соединения этого пользователя и чтение конфигов приложения;
  • запросы вокруг прогресса загрузки сессии, необычные cookie сессии, ошибки и рестарты worker в ту же минуту;
  • код ответа 200 и пустое тело сами по себе ни успех, ни промах не доказывают.

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

Для субъектов КИИ в России подтверждённая эксплуатация тянет отдельную оценку обязанностей по уведомлению НКЦКИ. Установка обновления эту процедуру не заменяет.

Хвост будет длинным. VirusTotal оценивает около 272 000 хостов на ветках 8.2–8.5. Censys на 23 октября 2026 года насчитал свыше 3,08 млн хостов и 56,6 млн веб-свойств на PHP, и более 34,4 млн сервисов всё ещё считал уязвимыми.

Это ближе к долгому хвосту Log4Shell, чем к багу одного плагина: компонент встроен в стек и не обновляется вместе с сайтом. Dataminr отмечает, что часть приложений останется открытой, пока свои исправления не выпустят производители стека.

Имеет смысл гонять сканирование уязвимостей по загруженному SAPI и пакету ОС, а не по баннеру PHP/8.x. Баннер врёт в обе стороны: и на системах с перенесённым патчем, и там, где обновили только CLI.

Частые вопросы

Что такое PHP2Shell и чем опасны CVE-2026-109618 и CVE-2026-109619?

PHP2Shell — пара критических ошибок в движке PHP, обе с CVSS 9,2. Специально сформированный HTTP-запрос может выполнить код без логина, если обработчик веб-запросов ещё не обновлён.

Какие версии PHP закрывают PHP2Shell?

PHP 8.5.12, 8.4.27, 8.3.36 и 8.2.35. После установки пакета нужен перезапуск PHP-FPM или Apache с mod_php, в контейнерах — пересборка образа. Строка php -v без проверки SAPI ничего не доказывает: дистрибутив может перенести патч без смены основной версии.

Уязвим ли чистый WordPress, Drupal или Joomla, если ядро CMS обновлено?

Да, пока не обновлён сам PHP. Sysdig прямо пишет, что сайт с чистым кодом приложения остаётся открытым: ошибка в интерпретаторе, не в плагинах.

Есть ли подтверждённые успешные взломы через PHP2Shell?

На момент разборов Cloudflare, Previdian, Sophos, Cisco Talos, Beelzebub, Dataminr и Wordfence подтверждённого удалённого выполнения кода не было. Это выборка их сенсоров, а не гарантия по каждому серверу.

Что за ботнет Potassium и удалось ли его поставить через PHP2Shell?

Potassium — форк Mirai, который Synthient отметил в марте 2026 года. Sophos видел попытки завербовать хосты через PHP2Shell и описывает их как неуспешные. В образце есть загрузчик и команды объёмного флуда.

Сколько сервисов на PHP ещё не пропатчены?

Censys на 23 октября 2026 года оценивал как уязвимые более 34,4 млн сервисов на PHP. VirusTotal отдельно называет около 272 000 хостов на поддерживаемых ветках 8.2–8.5.

Если между анонсом и перезапуском PHP-FPM уже было окно, баннер версии ответ не даст: разберите процессы, журналы и исходящие соединения. В этом как раз помогает реагирование на инциденты — отдельно от установки патча.


← назад в блог