Мир ИИ
PHP2Shell: дыру в PHP нашли с помощью GPT-5.6 Sol
21 октября 2026 года PHP выпустил 8.5.12, 8.4.27, 8.3.36 и 8.2.35 с исправлением двух уязвимостей, CVE-2026-109618 и CVE-2026-109619. У обеих оценка 9,2 по CVSS 4.0, обе позволяют выполнить код без авторизации. Одну из них, по сообщению OpenAI, нашли исследователи Calif с помощью GPT-5.6 Sol. 26 октября CISA внесла обе в каталог эксплуатируемых уязвимостей.
Ниже — что именно сломано, кого это касается, что ставить и что делать, если обновиться прямо сейчас нельзя. В конце — о том, где в этой истории место моделям через API и где его нет.
Что случилось
Семейство уязвимостей получило имя PHP2Shell. 20 октября команда безопасности PHP заранее предупредила о выпуске на следующий день, 14:00 по UTC. 21 октября вышли исправления для всех поддерживаемых веток, рекомендации на php.net сформулированы жёстко: обновляться немедленно.
| CVE | Что сломано | Оценка CVSS 4.0 |
|---|---|---|
| CVE-2026-109618 | Порча памяти при обработке нехватки памяти (OOM) | 9,2 |
| CVE-2026-109619 | Устаревшее глобальное состояние переживает запрос | 9,2 |
Ошибка не в WordPress, Laravel или вашем коде, а в самом интерпретаторе. Авторы сайта php2shell.com пишут, что уязвимы могут быть даже приложения уровня «Hello World», а затронутые версии тянутся до PHP 5.4.
Какие версии ставить
Ответ из рекомендации PHP: 8.5.12, 8.4.27, 8.3.36 или 8.2.35, по своей ветке.
| Ветка | Уязвимы | Первая исправленная |
|---|---|---|
| 8.5 | ниже 8.5.12 | 8.5.12 |
| 8.4 | ниже 8.4.27 | 8.4.27 |
| 8.3 | ниже 8.3.36 | 8.3.36 |
| 8.2 | ниже 8.2.35 | 8.2.35 |
PHP 8.1 и старше проект больше не обновляет. Из-за тяжести уязвимостей команда выложила минимальные патчи в исходниках для 7.4, 8.0 и 8.1, но готовых сборок нет: нужен дистрибутив, LTS-поставщик или переход на поддерживаемую ветку. У 8.2 поддержка заканчивается 31 декабря 2026 года.
Дистрибутивы Linux получили патчи заранее. Это значит, что пакет из репозитория может быть исправлен при старом номере версии — проверяйте журнал изменений пакета, а не только php -v.
Как устроены обе уязвимости
CVE-2026-109618, порча памяти при OOM. Когда PHP упирается в лимит памяти, он прерывает работу через longjmp(). Если это случилось в момент, когда данные запроса инициализированы наполовину, процедура завершения запроса принимает мусор за корректные данные. Довести запрос до нехватки памяти можно, не выходя за post_max_size: составной запрос без нормального Content-Length, тысячи заголовков в одной части, пустые поля загрузки файлов с вложенными именами. На Apache с mod_php всё это происходит до того, как начнёт работать код приложения.
CVE-2026-109619, устаревшее состояние. Воркер PHP хранит глобальное состояние — ошибки, сессии, расширения, — которое указывает на память конкретного запроса. Если запрос прервался фатальной ошибкой до сброса этого состояния, следующий запрос в том же воркере может прочитать уже освобождённую память. Подтверждены два пути: обратная трассировка фатальных ошибок в PHP 8.5 и отслеживание прогресса загрузки в сессиях, которое включено по умолчанию.
Исправление первой убирает longjmp() при нехватке памяти и вводит мягкий и жёсткий лимиты. Исправление второй сбрасывает широкий набор состояния между запросами, а не только найденные пути.
Кого это касается
Короткий ответ: любого, кто отдаёт веб-страницы через PHP.
В рекомендации перечислены PHP-FPM, Apache с mod_php, php-cgi, FrankenPHP и LiteSpeed. Самый высокий риск — у mod_php: для него продемонстрирована атака, где запрос без авторизации срабатывает до запуска кода приложения. Для FPM удалённое выполнение кода подтверждено через пути на уровне приложения.
По данным php2shell.com, исследователи показали выполнение кода без авторизации на WordPress, Drupal и Joomla, а также утечку памяти процесса без привязки к приложению. В такой памяти лежат пароли, токены, ключи API и сертификаты других запросов. Утечка не требует выполнения кода и поэтому хуже видна инструментам, которые ловят именно вредоносный код.
Кто нашёл и при чём здесь OpenAI
В рекомендациях на GitHub указаны четыре автора находок. Публично роли распределяются так.
Calif нашла критическую ошибку с помощью GPT-5.6 Sol в рамках программы OpenAI Patch the Planet — так это описано в посте OpenAI от 21 октября. Wiz независимо нашла и сообщила об обеих уязвимостях. Среди авторов на сайте php2shell.com есть и исследователь команды Codex Security из OpenAI.
OpenAI называет историю одной из самых значимых проблем безопасности за последнее время и пишет, что, насколько компании известно, модели нашли уязвимости раньше атакующих. В том же посте прямо сказано, что те же возможности помогают и атакующим, и что компания ждёт резкого роста подобных находок в ближайшие месяцы.
Patch the Planet — инициатива OpenAI в связке с Trail of Bits, Calif и HackerOne: проверять находки, готовить патчи и координировать раскрытие с мейнтейнерами. По словам организаторов, каждую находку смотрит человек, а решения о коде и релизах остаются за мейнтейнерами. Следующей в списке раскрытий на patchtheplanet.org стоит уязвимость в Brotli, CVE-2026-111497: 26 октября PHP пересобрал сборки для Windows с исправленной библиотекой.
Эксплуатируют ли уже
Да, по данным CISA. 26 октября агентство внесло обе уязвимости в каталог известных эксплуатируемых уязвимостей и дало федеральным ведомствам США срок до 29 октября. В каталог попадают уязвимости, по которым у агентства есть данные об эксплуатации.
Для всех остальных практический вывод тот же: считать, что атаки идут, и обновляться в первую очередь там, где PHP смотрит в интернет.
Что делать прямо сейчас
Порядок из рекомендаций PHP и php2shell.com.
- Найти все среды выполнения PHP. Не только основной сайт: админки, внутренние сервисы, старые лендинги, контейнеры с забытым образом.
- Поставить исправленную версию или пакет дистрибутива с исправлением.
- Перезапустить всё: Apache, PHP-FPM и любые долгоживущие воркеры. Без перезапуска в памяти остаётся старый код.
- Проверить результат. OpenAI выложила открытую утилиту php2shell-checker, её можно поставить как навык Codex или запустить напрямую через Node.js. Она читает версию из заголовков
X-Powered-ByиServerили с сервера. Если заголовки скрыты, ответ будет «неизвестно». Если дистрибутив исправил уязвимость без смены номера, утилита покажет ложную тревогу.
Обновление приложения не обновляет PHP под ним. Свежий WordPress на старом интерпретаторе остаётся уязвимым.
Если обновиться нельзя
Временные меры снижают риск по известным путям, но не закрывают уязвимости. Команда PHP пишет об этом прямо.
Против CVE-2026-109618. Выставить memory_limit=-1 административно, например через php_admin_value, и ограничить память на уровне контейнера или cgroup. Держать post_max_size низким: 8M, если загрузки не нужны, 32M — если нужны. Ограничить размер запроса, число полей и частей на прокси. Не использовать RLIMIT_AS и RLIMIT_DATA: они вызывают как раз уязвимый путь.
Против CVE-2026-109619. Выставить session.upload_progress.enabled=0 в php.ini или конфигурации пула и перезапустить все воркеры. На PHP 8.5 — ещё fatal_error_backtraces=0. Через ini_set() и .user.ini это не работает: настройка должна действовать до разбора запроса. 23 октября PHP отдельно посоветовал оставить отключённым прогресс загрузки до следующего планового релиза из-за ещё одного редкого пути.
Скрыть ошибки через display_errors или @ не помогает: уязвимое состояние читается до того, как PHP решает, показывать ли предупреждение.
Где здесь место моделям через API
История PHP2Shell — не про то, что модель сама нашла и починила уязвимость. Модель помогла исследователям найти кандидата, дальше люди проверяли, писали патч, тестировали его на обход и координировали раскрытие около двух месяцев.
Если вы хотите встроить такую же первую линию в свой процесс — прогон модулей через модель перед ревью, поиск опасных паттернов в старом коде, — KeyDealer даёт GPT-5.6 Sol и GPT-6.1 Sol по одному ключу с оплатой российской картой в рублях. Качество находок на вашем коде мы не обещаем: проверяйте на своей выборке.
Сравнение с прайсом OpenAI по стандартному тарифу, пересчёт по курсу ЦБ на 28 октября 2026 года, 80,5307 ₽ за доллар. У нас одна ставка на вход, выход и кэш.
| За 1 млн токенов | GPT-5.6 Sol, OpenAI | gpt-5-6-sol, KeyDealer | GPT-6.1 Sol, OpenAI | gpt-6-1-sol, KeyDealer |
|---|---|---|---|---|
| Вход | $4 ≈ 322 ₽ | 35 ₽ | $2 ≈ 161 ₽ | 28 ₽ |
| Кэшированный вход | $0,40 ≈ 32 ₽ | 35 ₽ | $0,10 ≈ 8 ₽ | 28 ₽ |
| Выход | $20 ≈ 1611 ₽ | 35 ₽ | $10 ≈ 805 ₽ | 28 ₽ |
Цена GPT-5.6 Sol у OpenAI помечена как промо, действующее как минимум до 21 ноября 2026 года; подробно — в материале GPT-5.6 Sol подешевела, но цена помечена как промо. К каждому запросу у нас добавляется служебный контекст маршрута: около 2700 токенов у 5.6 Sol и около 5000 у 6.1 Sol, оплачиваются как вход.
Прогон модуля: 100 тысяч токенов кода на вход и 5 тысяч токенов отчёта. На GPT-5.6 Sol у OpenAI это около 40 ₽, у нас около 3,8 ₽ вместе со служебным контекстом. На GPT-6.1 Sol — около 20 ₽ против 3,1 ₽. Кэш у нас по полной ставке входа, поэтому при многократных прогонах одного и того же кода с попаданием в кэш у OpenAI разница сократится.
Две оговорки. Модели общего доступа могут отказываться от задач, похожих на разработку эксплойта; специализированные версии для защитников OpenAI выдаёт отдельно, их в каталоге нет — об этом в материалах OpenAI открыла модели без фильтров — но не всем и первая модель с высоким уровнем киберспособностей. И не отправляйте в модель конфигурации с живыми ключами и паролями: как их хранить, разобрано в материале как хранить API-ключи.
Чего мы не утверждаем
Мы не утверждаем, что модель через API найдёт такие уязвимости в вашем коде. Находку PHP2Shell сделали опытные исследователи с моделью, а не модель в одиночку. Мы не проверяли, как модели каталога справляются с аудитом C-кода интерпретатора.
Мы не даём полный список путей атаки. Рекомендации PHP подробнее этой статьи и обновляются. Решение о мерах принимайте по первоисточнику, а не по пересказу.
Мы не гарантируем, что временные меры вас защитят. Команда PHP прямо пишет, что полной защиты они не дают. Единственное полное решение — обновление.
Что держать в голове
Первое. Если у вас есть PHP, смотрящий в интернет, обновление до 8.5.12, 8.4.27, 8.3.36 или 8.2.35 с перезапуском воркеров — задача на сегодня, а не на следующий спринт.
Второе. Модели уже находят критические уязвимости в коде, на котором держится заметная доля веба. Это работает в обе стороны, и окно между находкой и атакой сокращается. Чек-лист для своих ИИ-функций — в материале безопасность ИИ-функции.
Третье. Модель в аудите — первая линия, а не последняя. Она находит кандидатов, решение о том, что это уязвимость и как её чинить, остаётся за человеком. Что мы за проект — на странице о проекте, ключ заводится на keydealer.ru/login.
Частые вопросы
Какие версии PHP закрывают PHP2Shell?
PHP 8.5.12, 8.4.27, 8.3.36 и 8.2.35, все вышли 21 октября 2026 года. Всё, что ниже этих номеров в своей ветке, уязвимо. Для 7.4, 8.0 и 8.1 команда PHP выложила минимальные патчи в исходниках, пакеты для них ищите у дистрибутива или LTS-поставщика.
Кого касаются уязвимости?
Любой установки PHP, которая обслуживает веб-запросы: PHP-FPM, Apache с mod_php, php-cgi, FrankenPHP и LiteSpeed. Самый высокий риск команда PHP называет у mod_php. Код вашего приложения роли не играет: уязвим сам интерпретатор.
Правда ли, что уязвимость нашла нейросеть?
По сообщению OpenAI, исследователи Calif нашли одну из критических ошибок с помощью GPT-5.6 Sol в рамках программы Patch the Planet. Wiz независимо нашла и сообщила об обеих. Находку проверяли и исправляли люди — команда PHP.
Уязвимости уже эксплуатируют?
26 октября агентство CISA внесло обе в каталог известных эксплуатируемых уязвимостей. Это значит, что у агентства есть данные об эксплуатации. Для федеральных ведомств США срок устранения — 29 октября.
Что делать, если обновиться прямо сейчас нельзя?
Временные меры есть, но полной защиты они не дают. Среди них memory_limit=-1 с ограничением памяти на уровне контейнера, session.upload_progress.enabled=0, а на PHP 8.5 ещё fatal_error_backtraces=0, во всех случаях с перезапуском всех воркеров. Единственная полная защита — обновление.
Можно ли проверять свой код моделями через API?
Можно, но это помощник, а не замена аудиту. Модель находит кандидатов в уязвимости, человек проверяет и исправляет. Модели общего доступа могут отказываться от части задач, связанных с эксплуатацией, а качество находок на вашем коде нужно проверять на своей выборке.
Источники
- https://www.php.net/
- https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w
- https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp
- https://openai.com/index/coordinated-disclosure-of-critical-vulnerabilities
- https://www.php2shell.com/
- https://patchtheplanet.org/
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- https://github.com/openai/php2shell-checker
- https://developers.openai.com/api/docs/pricing
- https://api.keydealer.ru/v1/models