📢New announcementLearn more

PHP2Shell: что нужно обновить сегодня

2026-10-22
Aziz
PHP2Shell: что нужно обновить сегодня

Если на вашем сервере работает PHP, обновите его сегодня. 21 октября в PHP исправили две критические ошибки, которые вместе называют PHP2Shell. Через них атакующий из интернета может захватить веб-сервер. Ни пароль, ни ошибка в вашем собственном коде для этого не нужны: уязвимой может оказаться даже обычная страница «Hello World», а исследователи показали атаки на свежие установки WordPress, Drupal и Joomla.

Атакующие не стали ждать. Honeypot-серверы Amazon зафиксировали попытку эксплуатации 17 октября, за четыре дня до публикации информации об ошибках. К дню релиза Amazon уже видел попытки от нескольких групп, а Cloudflare сообщает о миллионах попыток атак.

Коротко:

  1. Проверьте, какая версия PHP на самом деле обслуживает ваш сайт, а не только та, что в командной строке.
  2. Обновитесь до PHP 8.5.12, 8.4.27, 8.3.36 или 8.2.35, либо до исправленного пакета вашего Linux-дистрибутива.
  3. Не можете обновиться сегодня? Включите правила PHP2Shell в вашем WAF и ужесточите защиту сервера, либо отключите его от интернета, пока не обновите.

Дальше в статье разобран каждый шаг.

Меня это касается?

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

От того, как запущен PHP, зависит срочность:

Как запущен PHPРискПочему
Apache с mod_phpНаивысший. Обновляйте первымОдин запрос может запустить атаку ещё до выполнения вашего кода
PHP-FPM (Nginx и большинство современных конфигураций)ВысокийОдин путь атаки закрыт, но захват сервера удалённо всё же показали при определённых условиях
php-cgi, FrankenPHP, LiteSpeedВысокийPHP назвал их затронутыми
PHP 5.x или 7.4–8.1 без поддержки вендораНаивысшийОфициального исправленного релиза нет. Нужен бэкпорт от вендора или обновление версии

Проверка за 10 секунд. Не доверяйте одному лишь php -v: он показывает PHP командной строки, который может отличаться от того, что обслуживает сайт. Проверьте тот, который использует ваш веб-сервер:

  • Любой сайт: положите во временный файл в корне сайта код <?php echo PHP_VERSION;, откройте его в браузере и сразу удалите.
  • Debian/Ubuntu: dpkg -l | grep php покажет установленные пакеты PHP.
  • RHEL/Rocky/Alma: rpm -qa | grep php.
  • Docker: docker exec <container> php -v, и посмотрите, от какого тега базового образа вы собираетесь.
  • Виртуальный хостинг или WordPress: загляните в настройки PHP в панели хостинга или в WordPress: Инструменты → Здоровье сайта → Информация → Сервер.

Дистрибутивы часто сохраняют старый номер версии и переносят исправление в пакет, поэтому в Linux сравнивайте пакет с бюллетенем безопасности вашего дистрибутива, а не только номер.

Терминал с командой php -v и исправленной версией PHP 8.3.36: проверяйте PHP, на котором работает ваш сайт, а не только терминал

Обновление: какие версии нужны

Обновление — единственное полное решение. Обходные меры снижают риск, но не устраняют его.

Ваша ветка PHPОбновиться доПримечания
8.58.5.12
8.48.4.27
8.38.3.36
8.28.2.35Поддержка 8.2 заканчивается 31 декабря 2026 года, поэтому планируйте переход
8.1, 8.0, 7.4Официального релиза нетИспользуйте исправленную сборку вендора или бэкпорты в php-src (ветки PHP-<version>-CVE-2026-109618-109619)
5.xИсправления нетОбновите версию или уберите сервер из интернета

Как обновиться, в зависимости от конфигурации:

  • Debian/Ubuntu: sudo apt update && sudo apt upgrade (бюллетень Ubuntu: USN-8948-1/-2).
  • RHEL/Rocky/Alma/Fedora: sudo dnf upgrade 'php*' (Red Hat: RHSA-2026:87080).
  • Alpine, Arch, Gentoo: исправленные пакеты уже вышли, обновляйтесь как обычно.
  • Docker: пересоберите образ из последнего официального тега php и выкатите заново. Перезапуск старого контейнера его не исправляет.
  • Виртуальный хостинг: многие хостинги, в том числе SiteGround, включили защиту до релиза. Проверьте версию PHP в панели; если она старая, создайте тикет.
  • Пользователи репозитория Remi: PHP предупреждал, что обновлений в день релиза там не будет, и мы пока не смогли подтвердить, что финальный релиз вышел. Перейдите на пакеты дистрибутива или соберите из исходников.

После обновления перезапустите PHP (PHP-FPM или Apache для mod_php), чтобы старые процессы завершились, а затем снова проверьте версию, которую реально отдаёт ваш сайт.

Не можете обновиться сегодня?

Выиграйте время, действуя в таком порядке. Ничто из этого не заменяет обновление, поэтому назначьте для каждого необновлённого сервера ответственного и срок.

  1. Поставьте перед сервером WAF. Cloudflare выпустил правила для известных схем атак для всех тарифов, включая бесплатный. Защита есть и у Fastly, Google Cloud и Vercel. Правила WAF защищают только тот трафик, который через них проходит, поэтому убедитесь, что атакующие не смогут обратиться к серверу напрямую.
  2. Отключите отслеживание прогресса загрузки в сессии. Задайте session.upload_progress.enabled=0 в php.ini или в конфигурации пула FPM и перезапустите PHP. Задать это из приложения через ini_set() или .user.ini недостаточно.
  3. На PHP 8.5 дополнительно задайте fatal_error_backtraces=0 и перезапустите.
  4. Ограничьте размеры запросов на веб-сервере или прокси: меньше размер тела, меньше частей multipart, ниже лимиты загрузки.
  5. На PHP-FPM значение pm.max_requests=1 даёт каждому запросу новый процесс. Это снижает производительность, поэтому используйте его только как временную защиту.
  6. Ограничьте доступ. Спрячьте админ-панели и внутренние приложения за VPN или список разрешённых IP-адресов.
  7. Отключите от интернета. Британский Национальный центр кибербезопасности советует отключать от интернета системы, которые нельзя сразу исправить, а американское АНБ и CERT-EU дали похожие рекомендации. Для забытого тестового сервера или старого маркетингового сайта это нередко верное решение и без всякой атаки.

Используете PHP внутри продуктов, которые не создавали сами? Palo Alto Networks сообщает, что затронуты все версии PAN-OS и Panorama, а исправленные версии на 22 октября ещё не вышли. Следите за бюллетенями ваших вендоров.

Признаки того, что вас уже взломали

Попытки атак видели ещё до выхода исправления, поэтому обновление — это ещё не конец. Логи вашего приложения покажут немного: атака происходит внутри самого PHP. Смотрите логи веб-сервера и PHP, начиная с середины октября:

  • Странные запросы на загрузку файлов, за которыми следуют ошибки лимита памяти (Allowed memory size ... exhausted)
  • Всплески ошибок HTTP 500 без связанного релиза или бага
  • Необычно большие или некорректные cookie PHPSESSID
  • Падения или перезапуски процессов PHP гораздо чаще обычного

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

Чтобы проверить свои публичные хосты, Searchlight Cyber выпустила open-source сканер php2shell-scanner. Используйте его осторожно: он намеренно вызывает ошибки памяти в PHP на целевой системе, поэтому запускайте его только на своих системах и вне часов пиковой нагрузки. Qualys, Rapid7 и Tenable тоже добавили детектирование, а тихие логи не доказывают, что вы в безопасности.

Мы тоже помогаем. Наша команда Cerberus проводит бесплатные проверки на PHP2Shell для любой компании: заполните короткую форму, подтвердите домен, и мы скажем, уязвимы ли вы. Наши проверки остаются в рамках согласованного вами скоупа и не роняют ваши серверы. → c7-security.com/cerberus-php2shell

Главное: ИИ нашёл уязвимость, а атакующие успели первыми

Эти ошибки находились в ядре PHP больше десяти лет. Исследователи из Calif, OpenAI и Wiz нашли их в августе с помощью ИИ-моделей, а на выпуск исправления ушло два месяца.

Хронология PHP2Shell: найдено с помощью ИИ 19 августа, сообщено в PHP 24 августа, первая атака замечена 17 октября, исправление выпущено 21 октября

Дата (2026)Что произошло
21 окт.PHP выпускает исправления; информация об ошибках становится публичной
17 окт.Первая попытка эксплуатации замечена в реальных условиях, за 4 дня до раскрытия
21 сен.PHP подтверждает проблему и начинает работать над исправлением
24 авг.Wiz сообщает об ошибках в PHP
20–21 авг.Удалённый захват подтверждён на Drupal и WordPress
19 авг.Wiz находит первую ошибку с помощью ИИ

Так сегодня выглядит безопасность. ИИ может за недели найти то, что люди не замечали десять лет, а у атакующих тот же ИИ. Никто не знает, как атакующий получил подробности раньше срока. Важно другое: промежуток между «ошибка существует» и «кто-то ею пользуется» теперь исчисляется днями, а не месяцами. К 22 октября правительство Великобритании отключило 32 сервиса, в основном из предосторожности, пока устанавливало исправления.

Ежегодные пентесты не рассчитаны на такое. Тест, который вы проводили в марте, ничего не говорит об ошибке, ставшей публичной во вторник.

Почему мы бесплатно проверяем на PHP2Shell

То, что мы наблюдаем на этой неделе, — хаос. Атаки начались до выхода исправления. Команды устанавливают исправления вслепую и не знают, на каких серверах какой PHP. Забытые тестовые серверы и старые маркетинговые сайты остаются открытыми, а у некоторых продуктов вендоров исправлений до сих пор нет.

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

Любая компания может получить бесплатную проверку на PHP2Shell. Заполните форму, подтвердите домен, и мы проверим его и пришлём вам результаты. Мы тестируем только те домены, которые вы подтвердили как свои.

→ Получить бесплатную проверку: c7-security.com/cerberus-php2shell

Если это руководство помогло, перешлите его тому, кто отвечает за ваши серверы. Вашей команде оно нужно сегодня.

Источники