Обзор

Исследователи Wiz обнаружили, как frontier AI помогла найти и исправить уязвимости, которые скрывались в исходном коде PHP более десяти лет. Проблемы вытекают из ключевых архитектурных решений, некоторые из которых принимались более десяти лет назад, и охватываются двумя CVE с серьёзностью до CVSS 9.2. Работа превратилась в кросс-индустриальное усилие по защите клиентов, поиску вариантов, развёртыванию обнаружений и смягчения последствий, а также проверке патча для согласованного раскрытия информации.

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

PHP — язык программирования, который лежит в основе большей части веб-сети, работая на WordPress, Drupal и MediaWiki, ПО, которое запускает Википедию. Дефект в его ядре может повлиять на веб-сайты по всей этой экосистеме, даже если собственный код приложения безопасен.

Некоторые уязвимости становятся переломными моментами, потому что они ставят под сомнение фундаментальные предположения о безопасности. В 2014 году Heartbleed продемонстрировала хрупкость общей инфраструктуры, защищающей интернет. В 2021 году Log4Shell показала, как глубоко встроенные зависимости программного обеспечения могли создать широкомасштабное воздействие, которое организации изо всех сил пытались идентифицировать. PHP2Shell может обозначить аналогичный переломный момент для эры AI, показав, как AI может изменить практическую эксплуатируемость давних уязвимостей. Создание эксплойта потребовало объединения нескольких дефектов и адаптации к раскладке памяти каждой цели посредством повторного тестирования и отладки. Frontier-модели были критичны для того, чтобы сделать этот процесс практическим, позволяя разработать и адаптировать работающие эксплойты для нескольких приложений за несколько часов. По мере снижения времени и опыта, необходимых для этой работы, сложность может больше не предоставить значимый барьер, изменяя то, как мы определяем то, что уязвимо на практике.

Wiz Research хотела бы поблагодарить команду PHP, Calif и OpenAI за работу над обнаружением, координацией и проверкой патча. OpenAI и Calif также опубликовали блоги с подробностями об уязвимости — её историей, техническими деталями и пониманием процесса раскрытия информации. PHP также разместил пост.

Также хотим выразить нашу искреннюю благодарность Automattic, Akamai, AWS, Cloudflare, Fastly, Google, Imperva, Microsoft, Vercel и многим другим за помощь в подготовке указаний и встроенных смягчений для клиентов, которые не могут немедленно применить патч.

Уязвимости

Все раскрытые уязвимости — это проблемы безопасности памяти, которые вытекают из ошибок в том, как PHP обрабатывает фатальные ошибки при обработке запросов, особенно ошибки нехватки памяти. Эти ошибки могут оставить после себя повреждённое внутреннее состояние PHP после неожиданного завершения запроса. Более поздний запрос или рабочий процесс может повторно использовать это устаревшее состояние, приводя к утечке памяти или её повреждению.

Ниже находится таблица, которая демонстрирует, какой тип воздействия был продемонстрирован каждой из ошибок, о которых сообщили в PHP. Приложения, указанные ниже, — это цели, которые были выбраны для демонстраций RCE. Они являются репрезентативными целями — эксплуатация не требует одной из этих CMS, так как уязвимый код находится в самом PHP.

ID отслеживания Ошибка Что может достичь злоумышленник Что мы продемонстрировали
CVE-2026-109618

Use-after-free десериализатора загрузки прогресса

Утечка удалённой памяти процесса

Повредить память процесса и выполнить код

Неаутентифицированное раскрытие памяти рабочего процесса PHP

Pre-authentication RCE на WordPress, Drupal и Joomla

Раскрытие удалённой памяти, независимое от приложения

CVE-2026-109619

Use-after-free трассировки фатальной ошибки

Спутанность типов OPcache

Повредить память процесса и выполнить код

Повредить общее состояние PHP и выполнить код

Pre-authentication RCE на Drupal

Pre-authentication RCE на WordPress

Хотя этот блог охватывает только четыре экземпляра эксплуатируемых ошибок (сгруппированные под двумя CVE), следующие этот проблемный паттерн, существуют другие отслеживаемые и, вероятно, не отслеживаемые варианты этой проблемы в исходном коде PHP. Эти варианты имеют различные требования для эксплуатации и могут привести к различным типам воздействия. В любом случае, патч, предоставленный командой PHP, исправляет проблему в её основе и устраняет все варианты в поправленном релизе.

Воздействие

Объединили эти уязвимости в один эксплойт-скрипт, php2shell, и продемонстрировали, что он может удалённо выполнять код без аутентификации на развёртываниях WordPress (wordpress:latest), Drupal (drupal:latest) и Joomla (joomla:latest), используя их последние образы контейнеров на момент тестирования.

Эти платформы иллюстрируют воздействие, но уязвимости находятся в самом PHP. Эксплуатация не зависит от дефекта в коде приложения: даже простое приложение «Hello World», работающее на уязвимой версии PHP, может быть уязвимо.

Отдельно продемонстрировали, что злоумышленники могли читать чувствительные данные из памяти процесса PHP, включая пароли, токены и ключи API, без необходимости достичь удалённого выполнения кода.

Точка перелома AI

Уязвимый код присутствовал более десяти лет. Превращение этих дефектов в работающие эксплойты потребовало объединения нескольких ошибок и учёта того, как PHP выделяет и повторно использует память по запросам. Ошибки памяти печально известны своей сложностью; различия в версиях PHP, конфигурациях и поведении приложения могут нарушить предположения, от которых зависит эксплойт. Атака, которая работает против одного развёртывания, может потребовать существенных корректировок для работы против другого, каждая требуя дополнительного анализа, тестирования и отладки. До AI эта ручная работа была бы сложной для реализации и ещё более сложной для масштабирования.

С AI это больше не препятствие. LLM могут помочь адаптировать эксплойт к различным версиям PHP, конфигурациям и раскладкам памяти. Инструменты тестирования и отладки позволяют моделям анализировать сбои и итеративно адаптироваться, снижая необходимые специальные усилия для каждой цели. Это значительно снижает барьер для масштабирования атак по различным развёртываниям.

Это меняет экономику как обнаружения, так и эксплуатации. По мере того как AI снижает усилия, необходимые для разработки и адаптации сложных эксплойтов, уязвимости, которые когда-то казались непрактичными для эксплуатации, становятся жизнеспособными целями.

Использовали Wiz Atlas, Gemini 4 Argon и GPT-5.6 Sol на протяжении всего исследования. Заметно, что Gemini 4 Argon внёс неоценимый вклад в обнаружение уязвимости, разработку эксплойта, обнаружение атак и валидацию патча.

Используя Gemini 4 Argon, команда Wiz продемонстрировала, почему frontier AI — игровая фишка для киберзащиты. Более десяти лет эти критические уязвимости оставались нерешёнными, потому что обнаружение уязвимостей и эксплуатация были невероятно сложными. Мы рады видеть, как Gemini 4 Argon помогает защитникам заполнить этот пробел, находя уязвимости и помогая их патчировать.

Raluca Ada Popa, Head of Gemini Security, Google DeepMind

Сотрудничество на уровне индустрии

До публичного раскрытия информации, Wiz Research работала с командой PHP, Calif и OpenAI над обнаружением, координацией и проверкой патча. Также партнёрствовали с Google Cloud, Cloudflare, AWS, Microsoft, Automattic, Fastly, Akamai, Imperva, Vercel и многими другими для подготовки указаний для клиентов, обнаружений и встроенных смягчений для организаций, которые не могут немедленно обновиться.

Уязвимость в ядре PHP выходит далеко за пределы одного приложения. PHP работает в облаках, хостинг-провайдерах, сетях доставки контента и миллионах независимо управляемых серверов. Снижение воздействия до того, как технические детали стали публичными, потребовало согласованную работу по всей этой экосистеме.

Техническое погружение

Ошибка: Use-after-free десериализатора загрузки прогресса

Модуль Session в PHP может декодировать данные сеанса во время обработки прогресса загрузки в том же окне предварительной инициализации. Декодер хранит буккипинг, принадлежащий запросу, в BG(unserialize). Фатальный отказ выделения может прервать этот путь, уничтожить кучу запроса и оставить глобальное состояние десериализатора опубликованным.

На более позднем запросе, обработанном тем же рабочим процессом, PHP может потребить повторно заявленную злоумышленником память как живую буккипинг десериализатора. Устаревшее состояние становится мощным примитивом повреждения памяти. Объединили его с утечкой памяти, чтобы устранить неопределённость адреса и достичь неаутентифицированного удалённого выполнения кода на WordPress, Drupal и Joomla.

Цепочки WordPress, Drupal и Joomla — это репрезентативные демонстрации. Основные примитивы существуют на уровне движка PHP и могут повлиять на любое приложение PHP, работающее на уязвимой версии.

Эти проблемы выполняются ниже уровня приложения, поэтому журналы приложений могут содержать мало контекста. До того как системы будут исправлены, защитники должны уделять особое внимание необычным multipart-запросам, сопровождаемым ошибками лимита памяти или повторяющимися ответами HTTP 500, неожиданно большим или неправильно сформированным cookies PHPSESSID и необъяснённой смене рабочих процессов PHP. Эти сигналы могут направить расследование. Применение обновления безопасности PHP остаётся единственной полной защитой.

Ошибка: Утечка удалённой памяти процесса

PHP анализирует multipart-запросы RFC1867 во время запуска запроса, до завершения обычной инициализации модулей. Обработка прогресса загрузки сеанса может инициализировать состояние Session на этой ранней стадии и опубликовать идентификатор сеанса в PS(id). Ошибка нехватки памяти может прервать запрос до завершения очистки. PHP затем уничтожает кучу запроса и может оставить PS(id) указывающим на освобождённое выделение.

Более поздний multipart-запрос, обработанный тем же рабочим процессом, может достичь пути очистки прогресса загрузки до обычной инициализации Session сброса этого указателя. PHP доверяет устаревшему указателю и длине как живой zend_string и URL-кодирует содержимое повторно заявленной кучи в cookie ответа PHPSESSID. Атака работает даже когда приложение никогда не вызывает session_start(), делая проблему независимой от приложения. Продемонстрировали неаутентифицированное раскрытие регионом памяти рабочего процесса размером, выбранным злоумышленником, содержащей данные вне запроса злоумышленника.

Ошибка: Use-after-free трассировки фатальной ошибки

В уязвимых версиях PHP сохраняет трассировку самой последней фатальной ошибки в EG(last_fatal_error_backtrace). Фатальная ошибка нехватки памяти может уничтожить кучу запроса без отмены определения этого значения executor-global. Рабочий процесс выживает с глобалом, который всё ещё указывает на память из предыдущего запроса.

Если тот же рабочий процесс выдаёт диагностику в начале следующего запроса, он может получить доступ к указателю до переинициализации executor этого состояния. PHP затем уничтожает или обновляет висящую трассировку и следует повторно заявленной злоумышленником памяти. Получающийся use-after-free между запросами может быть превращен в контролируемое повреждение памяти. Продемонстрировали неаутентифицированное удалённое выполнение кода против Drupal, используя этот примитив.

Ошибка: Спутанность типов OPcache

OPcache сохраняет скомпилированные структуры PHP в общей памяти и назначает индексы в карты указателей времени выполнения для каждого рабочего процесса. Рабочие процессы координируют эти индексы через общий фронтир. Во время zend_accel_script_persist() PHP продвигает фронтир CG(map_ptr_last), локальный для процесса. Публикует соответствующий общий фронтир только после завершения персистентности. Отказ выделения между этими двумя событиями оставляет продвижение процесса-локали на месте и частично персистентные объекты, ссылающиеся на слоты, которые общее состояние всё ещё считает доступными.

Когда другой рабочий процесс позже повторно использует один из этих слотов для другого объекта времени выполнения, устаревшие общие метаданные разрешаются в указатель неправильного типа. Несовпадение создаёт спутанность типов между рабочими процессами и повреждает общее состояние OPcache. Использовали этот примитив для построения цепочки неаутентифицированного RCE против WordPress.

Как Wiz может помочь?

Клиенты Wiz должны обратиться к консультативному центру Wiz Threat Intel по PHP2Shell, который включает встроенное охватывание для обнаружения уязвимостей без агента и времени выполнения, обнаружения эксплуатации через Wiz Defend и Sensor, а также автоматические политики ответа, наряду с указаниями по исправлению и охоте за угрозами.

Клиенты Sensor, использующие новейшую версию (1.0.12768), также могут включить встроенную политику ответа для автоматического завершения процессов, демонстрирующих поведение, типичное для эксплуатации PHP2Shell:

Заключение

При 70% интернета, затронутого, воздействие PHP2Shell невозможно переоценить. Это обозначает точку перелома AI. Уязвимый код присутствовал более десяти лет — то, что изменилось благодаря AI, — это способность понять слабости и превратить их в работающий эксплойт. С frontier AI-моделями и правильными инструментами один исследователь завершил за неделю то, что ранее потребовало бы месяцев работы мировой команды.

Это меняет экономику как обнаружения, так и эксплуатации. Уязвимости, которые когда-то казались непрактичными для эксплуатации, становятся жизнеспособными целями. Эти же возможности также дают защитникам шанс обнаружить и исправить дефекты, которые пережили годы внимания.

Wiz использовала Wiz Atlas, Gemini 4 Argon и GPT-5.6 Sol на протяжении всего исследования, при этом Argon внесла особенно значительный вклад в обнаружение и помощь в смягчении уязвимости.

Возможность — сделать эту работу рутиной: систематически находить дефекты в существующем ПО и ловить новые до их попадания в production. Наши согласованные усилия с PHP, OpenAI и Calif продвигают эту цель, применяя AI к усилению основ ПО, которые мы все разделяем.

Временная шкала ответственного раскрытия информации

  • 19 августа 2026: Wiz Research обнаруживает первую уязвимость PHP, используя Wiz Atlas, Gemini 4 Argon и GPT-5.6 Sol.

  • 20 августа 2026: Неаутентифицированный RCE подтверждён против Drupal.

  • 21 августа 2026: Неаутентифицированный RCE подтверждён против WordPress.

  • 24 августа 2026: Wiz Research сообщает об уязвимостях команде безопасности PHP.

  • 21 сентября 2026: PHP подтверждает отчёты и начинает разработку согласованной поправки.

  • 21 октября 2026: Поправленные релизы PHP становятся доступными.

  • 21 октября 2026: Публичное раскрытие информации.

Оставайтесь на связи

Это Sagi Tzadik, Shir Tamari, Nir Ohfeld и Tomer Schwartz из команды Wiz Research (@wiz_io). Группа опытных белошапочных хакеров с одной целью: сделать облако более безопасным местом для всех. Сосредоточены на поиске новых векторов атак в облачном ПО и раскрытии проблем изоляции в системах, на которые организации полагаются. Будем рады услышать от вас в X или по адресу research@wiz.io.