PHP2Shell: критическая уязвимость PHP. Что случилось и что делать владельцу сайта
21 октября 2026 года команда PHP выпустила внеплановые обновления сразу для всех поддерживаемых веток. Причина — две уязвимости в самом ядре языка, получившие общее имя PHP2Shell: CVE-2026-109618 и CVE-2026-109619. Обе оценены в 9,2 балла из 10 по шкале CVSS v4. В тот же день исследователи зафиксировали первые попытки атак, а часть компаний на время отключила сайты на PHP, пока администраторы ставят обновления.
Ниже — без паники и без технических деталей эксплуатации: что именно нашли, кого это касается, до какой версии обновиться, что сделать после обновления и как понять, не успели ли сайт атаковать.
Что именно нашли
Уязвимости нашли исследователи из Wiz, Calif и OpenAI. Обе ошибки связаны с тем, как PHP управляет памятью между запросами. Один дефект оставляет данные запроса недоинициализированными, если памяти не хватило в неудачный момент. Второй — это глобальное состояние, которое переживает освобождение памяти и может быть подхвачено следующим запросом на том же рабочем процессе. Для владельца сайта важны последствия, а не механика.
- Выполнение кода без авторизации. Злоумышленнику не нужен пароль от админки или уязвимый плагин: атакуется сам интерпретатор, на котором работает сайт.
- Утечка памяти рабочего процесса. Исследователи показали чтение памяти PHP-воркера, а там бывают пароли от базы данных, токены сессий, API-ключи платёжных систем и CRM. По характеру это похоже на Heartbleed 2014 года.
- Не зависит от CMS. WordPress, 1С-Битрикс, Laravel, OpenCart, самописный код — ошибка ниже уровня приложения, поэтому обновление CMS или плагинов её не закрывает.
Хронология: почему всё так срочно
| Когда | Что произошло |
|---|---|
| 20 октября | Команда PHP анонсирует экстренный выпуск. Детали утекают раньше запланированной даты раскрытия 22 октября |
| 21 октября, ~16:30 МСК | Выходят PHP 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Ubuntu публикует USN-8948-1 с исправленными пакетами |
| 21 октября, 17:19 МСК | watchTowr сообщает об активных попытках эксплуатации обеих уязвимостей в своих ловушках |
| 21–22 октября | Cloudflare фиксирует атакующий трафик, в том числе попытки обойти его защиту |
| Первые 12 часов | По оценке Qualys, обновлено около 199 тысяч установок — малая доля от всех серверов с PHP |
Обычно между публикацией патча и массовыми атаками проходят дни или недели. Здесь из-за утечки этого запаса не было: рабочие наработки появились почти одновременно с исправлениями. Именно поэтому крупные компании выбрали отключить сайт на несколько часов, а не рисковать данными клиентов.
Кого это касается
| Как работает сайт | Риск | Что делать |
|---|---|---|
| Apache с модулем mod_php (часто на виртуальном хостинге, в старых окружениях Битрикса) | Максимальный: показана атака, не зависящая от кода сайта | Обновить сегодня, затем полный перезапуск Apache, а не reload |
| nginx + PHP-FPM (типичный VPS) | Высокий: часть сценариев работает и здесь | Обновить, перезапустить php-fpm |
| php-cgi, LiteSpeed (lsphp), FrankenPHP | Высокий | Обновить сборку PHP или само приложение-сервер |
| Виртуальный хостинг с панелью | Зависит от хостера | Проверить новости хостера, выбрать исправленную версию PHP в панели |
| Docker-контейнеры с PHP | Как у образа | Пересобрать образ на исправленной версии и пересоздать контейнеры |
| Конструкторы (Tilda, Wix) и сайты без PHP (Next.js, Node.js) | Сайт не затронут | Проверить поддомены: вебпочту, phpMyAdmin, старый блог, тестовые копии |
Последний пункт недооценивают чаще всего. Основной сайт может быть написан на чём угодно, но на соседнем поддомене годами работает вебпочта на Roundcube, phpMyAdmin для бухгалтера или старая копия сайта, о которой все забыли. Все они на PHP и все уязвимы. Мы сами нашли такую вебпочту на собственной инфраструктуре и обновили её в первый же день.
До какой версии обновляться
| Ветка или система | Исправленная версия |
|---|---|
| PHP 8.5 | 8.5.12 |
| PHP 8.4 | 8.4.27 |
| PHP 8.3 | 8.3.36 |
| PHP 8.2 | 8.2.35 |
| PHP 8.1, 8.0, 7.4 | Официальных релизов нет, только исправления исходников для сборщиков дистрибутивов |
| Ubuntu 26.04 (php8.5) | 8.5.4-0ubuntu1.5 |
| Ubuntu 24.04 (php8.3) | 8.3.6-0ubuntu0.24.04.13 |
| Ubuntu 22.04 (php8.1) | 8.1.2-1ubuntu2.28 |
| Debian 12 и 13 | Пакеты из security-репозитория с версиями из апстрима (например, 8.4.27) |
| RHEL, Rocky, AlmaLinux, cPanel | Свежие errata и пакеты ea-php; у части старых веток — бэкпорты |
Что сделать прямо сейчас
- Составьте список всего, где есть PHP. Основной сайт, поддомены, вебпочта, phpMyAdmin, тестовые копии, внутренние сервисы. На одном сервере часто стоит несколько версий PHP сразу.
- Обновите PHP. На своём сервере — через менеджер пакетов или панель управления. На виртуальном хостинге — выберите в панели исправленную сборку или напишите хостеру и попросите подтвердить, что патч установлен.
- Перезапустите службы. Обновлённые файлы не подхватываются работающими процессами. Нужен перезапуск php-fpm, а для mod_php — полный рестарт Apache.
- Проверьте, что исправление действительно работает. Версия или журнал изменений пакета должны содержать оба CVE, а в памяти не должно остаться процессов со старыми библиотеками.
- Пересоберите контейнеры. Запущенный контейнер не обновляется сам: нужна сборка с
--pullи пересоздание. - Смените секреты, если сайт был доступен до обновления. Пароль базы данных, ключи API, токены платёжных систем, ключи сессий и солей CMS. Из-за утечки памяти исходите из того, что их могли прочитать.
- Посмотрите на признаки взлома — список ниже. Особенно если обновление случилось позже вечера 21 октября.
Если обновиться сегодня нельзя
Бывает, что сайт держится на старом коде, который не запускается на свежем PHP, или сервер достался без доступов от прошлого подрядчика. Тогда временно снижают риск, понимая, что каждая мера закрывает лишь часть сценариев:
- Отключить
session.upload_progress.enabled, а на PHP 8.5 —fatal_error_backtraces, и перезапустить все рабочие процессы. - Для PHP-FPM —
pm.max_requests = 1: каждый запрос получает свежий процесс. Это заметно нагружает сервер. - Ужесточить на nginx или прокси лимиты размера запроса и загрузки файлов, закрыть multipart-запросы там, где загрузки не нужны.
- Закрыть от интернета то, что не должно быть публичным: phpMyAdmin, тестовые копии, админки — доступ только с офисных адресов или через VPN.
- Включить защиту на уровне CDN, если сайт уже работает через Cloudflare или аналог.
Как понять, что сайт уже атаковали
- Появились новые PHP-файлы в папках загрузок, кэша или тем — особенно с бессмысленными именами.
- В админке есть пользователи, которых никто не создавал, или у кого-то повысились права.
- Изменились
.htaccess,index.php, файлы конфигурации, хотя никто ничего не выкладывал. - Посетителей с телефонов или из поиска перенаправляет на чужие сайты, а с компьютера администратора всё выглядит нормально.
- Сервер внезапно грузит процессор на 100% или отправляет тысячи писем.
- Поисковик пишет «Этот сайт может быть взломан», хостинг присылает предупреждение о вредоносном коде.
Подробный список с объяснениями — в статье 12 признаков, что сайт взломали. Быстро проверить сайт снаружи можно нашим бесплатным сканером взлома: он не заменяет аудит сервера, но покажет очевидные следы — чужие скрипты, редиректы, пометки поисковиков.
Чем мы можем помочь
Мы прошли этот путь на своей инфраструктуре в первый же день: нашли все места, где работает PHP, обновили пакеты, перезапустили службы и проверили, что исправление действительно применилось. Если у вас нет своего администратора или прошлый подрядчик пропал, сделаем то же самое для вашего проекта.
- Срочно, сегодня. Скорая помощь сайту: старт в течение часа, круглосуточно, от 4 900 ₽. Обновим PHP, перезапустим службы, проверим поддомены и оставим отчёт, что именно сделано.
- Старый код не работает на новом PHP. Обновление PHP с проверкой форм, оплат, обменов и зависимостей — от 24 000 ₽. Если переход нельзя сделать за день, сначала поставим временные меры защиты.
- Есть подозрение на взлом. Восстановление после взлома: ищем закладки, закрываем вход, меняем секреты, восстанавливаем чистую версию — срочный старт за 2 часа.
- WordPress или Битрикс. Отдельно проверим плагины, права пользователей и конфигурацию — аудит WordPress и аудит 1С-Битрикс. Что важно именно для этих CMS, мы разобрали в отдельной статье.
- Чтобы следующая уязвимость не застала врасплох. Мониторинг безопасности и сопровождение: обновления в день выхода, резервные копии, контроль изменений файлов.
Если не знаете, с чего начать, напишите нам через контакты — адрес сайта и, если известно, где он размещён. В течение рабочего часа скажем, затронут ли проект и что нужно сделать в первую очередь.
Источники
Вопросы и ответы
Мой сайт на WordPress обновлён до последней версии. Я в безопасности?
Нет. PHP2Shell — уязвимость самого PHP, а не WordPress или плагинов. Обновлять нужно PHP на сервере или у хостинга, а после этого перезапустить службы.
Как узнать, какая у меня версия PHP?
В панели хостинга обычно есть раздел «Версия PHP». На своём сервере помогут команды php -v и php-fpm -v, но на Ubuntu и AlmaLinux версия после исправления не меняется — проверяйте журнал изменений пакета на упоминание CVE-2026-109618.
Сайт на PHP-FPM, а самая опасная атака показана для mod_php. Можно подождать?
Нет. PHP подтвердил выполнение кода и на FPM при подходящих условиях приложения, а утечка памяти касается всех вариантов. Обновлять нужно независимо от способа запуска.
Нужно ли менять пароли после обновления?
Если сайт был доступен из интернета до обновления — да. Из-за утечки памяти безопаснее считать скомпрометированными пароль базы данных, ключи API и платёжных систем, ключи сессий.
У меня виртуальный хостинг. Что я могу сделать сам?
Проверить новости хостера, выбрать в панели самую свежую сборку вашей ветки PHP и написать в поддержку с просьбой подтвердить, что патч установлен. Сменить пароли в CMS и базе данных можно самостоятельно.
Мой сайт на Tilda. Это меня касается?
Сам сайт — нет, его обслуживает платформа. Но проверьте, нет ли у вас на поддоменах вебпочты, старого блога или CRM на PHP: они могут быть уязвимы.
Сколько стоит срочное обновление?
Срочная помощь начинается от 4 900 ₽ и стартует в течение часа. Если код не совместим с новой версией PHP и нужна адаптация, обновление с проверкой стоит от 24 000 ₽.