Уязвимость php2shell в PHP: что случилось и что сделать владельцу сайта
Две критические уязвимости в PHP позволяют выполнить код на сервере без входа в админку, исправления вышли 21 октября 2026. Разбираем, кого это касается, как проверить версию и что сделать, если обновиться сразу нельзя.
21 октября 2026 года команда PHP выпустила экстренные обновления: 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Они закрывают две критические уязвимости — CVE-2026-109618 и CVE-2026-109619, которые в отрасли уже называют php2shell. Обе оценены в 9.2 балла по CVSS v4.0: при неудачном стечении обстоятельств злоумышленник может выполнить свой код на сервере, не входя ни в какую админку. Детали утекли в сеть 20 октября, ещё до выхода исправлений, а первые попытки атак Amazon зафиксировал 17 октября. Сейчас идёт массовое сканирование сайтов.
Ниже — что произошло простыми словами, кого это касается и что сделать по шагам.
Наши клиенты могут не беспокоиться: у всех клиентов студии мы закрыли уязвимость сразу после выхода исправлений. Сайт internet10k.com тоже работает на исправленной версии PHP.
Что случилось
Обе ошибки сидят в самом PHP, а не в WordPress, Битриксе или коде вашего сайта.
- CVE-2026-109618. Когда PHP разбирает данные формы, особый запрос может исчерпать лимит памяти в неудачный момент. Внутренняя структура остаётся заполненной наполовину, а при очистке PHP обращается с ней как с нормальной. Важно, что это происходит при разборе запроса — до того, как запустится код сайта. Значит, ни авторизация, ни проверки в самом приложении не помогают.
- CVE-2026-109619. Данные одного запроса могут пережить его конец, и следующий запрос, попавший в тот же рабочий процесс PHP, использует уже освобождённую память. Один из путей связан с механизмом session upload progress, который в PHP включён по умолчанию — даже если сайт вообще не использует сессии.
Эксплуатировать уязвимости непросто: нужно точно подобрать запрос и обойти защиту памяти. Но после утечки деталей и начала сканирования рассчитывать на то, что «до нас не доберутся», не стоит.
Кого это касается
По данным команды PHP, под угрозой любая установка, которая обслуживает веб-запросы: PHP-FPM, Apache с mod_php, php-cgi, FrankenPHP и LiteSpeed. Выше всего риск у mod_php. Консольный PHP (CLI) в списке не указан.
- Уязвимы все версии ниже 8.2.35, 8.3.36, 8.4.27 и 8.5.12.
- PHP 7.4, 8.0 и 8.1 тоже уязвимы, но официальных релизов для них нет — только исходные патчи для тех, кто собирает PHP сам, и исправления от дистрибутивов и LTS-поставщиков.
- PHP 5.4–7.3 уязвимы и исправлений от команды PHP не получат вовсе.
Если сайт на Tilda, Wix или другом конструкторе, сервер обновляет сама платформа — от вас ничего не требуется. Если сайт на своём хостинге или VPS — WordPress, 1С-Битрикс, самописный, — это ваша зона ответственности или вашего подрядчика.
Что сделать: по шагам
- Узнайте версию PHP сайта. Её показывает панель хостинга (FastPanel, ISPmanager, cPanel), в разделе настроек сайта. Иногда версия видна в заголовках ответа — проверить можно нашим инструментом «На чём сделан сайт». Если он её показал, это само по себе мелкий недочёт: версию лучше скрывать.
- Обновите PHP до исправленной версии своей ветки. На своём сервере — пакетами дистрибутива или из панели. На виртуальном хостинге проверьте, что провайдер уже обновил PHP: многие сделали это 21–23 октября, но не все. Если в панели можно выбрать ветку, переключитесь на поддерживаемую.
- Перезапустите PHP-процессы. Без перезапуска PHP-FPM или Apache работают старые воркеры со старым кодом.
- Если сайт на PHP 8.1 и ниже, планируйте переезд на актуальную ветку. Старые плагины и самописный код могут потребовать доработки — это проверяют на копии сайта, а не в бою.
- Проверьте логи с 17 октября. Поводы насторожиться: ошибки
Allowed memory size ... exhausted ... in Unknown on line 0(место «Unknown» значит, что сбой случился при разборе запроса), падения процессов сSegmentation fault, POST-запросы с полемPHP_SESSION_UPLOAD_PROGRESSи очень длинными именами полей, а главное — веб-процесс, запускающий командную оболочку. Сам по себе сбой памяти атаку не доказывает, но серия таких ошибок — повод разобраться.
Если обновиться прямо сейчас нельзя
Команда PHP предлагает временные меры. Они снижают риск, но не делают сервер безопасным — обновление остаётся единственным полным решением.
- Против CVE-2026-109618:
memory_limit = -1на уровне администратора (так, чтобы сайт не мог это переопределить) вместе с лимитом размера запроса на веб-сервере и ограничением памяти контейнера. Не используйте вместо этогоRLIMIT_ASиRLIMIT_DATA— они как раз провоцируют нужный атакующему сбой. - Против CVE-2026-109619:
session.upload_progress.enabled = 0в основной конфигурации PHP, а на PHP 8.5 ещё иfatal_error_backtraces = 0. Черезini_set()или.user.iniэто не работает — настройки должны применяться до разбора запроса. - После изменений перезапустите все воркеры PHP.
Отдельно: 23 октября PHP опубликовал предупреждение о ещё одной уязвимости, CVE-2026-115560. Она касается только сайтов, которые на лету меняют обработчик сериализации сессий, и исправится в плановом релизе. Если вы не уверены, как устроен ваш код, то же отключение session upload progress закрывает и её.
Что важно после обновления
Проверьте, что сайт открывается, формы отправляются, оплаты проходят, а обмен с 1С и CRM работает. При переходе между ветками PHP иногда ломаются старые плагины. Дальше — регулярные обновления по графику, а не только в дни громких новостей: эта история не последняя, а исправление закрыло конкретные пути, но не весь класс ошибок.
Если не хочется следить за этим самим, возьмём сайт на техническую поддержку: обновления, мониторинг и реакция на инциденты входят в каждый тариф. Отдельно — поддержка сайтов на WordPress и 1С-Битрикс, а если признаки взлома уже есть — лечение сайта.
Источники: анонсы php.net, разборы Datadog Security Labs и Tenable.
Нужна проверка версии PHP или помощь с обновлением — напишите в Telegram или MAX.