PHP2Shell на HestiaCP: как мы закрыли 50 версий PHP за ночь

24 октября 2026
Поделиться:

21 октября 2026 года вышли исправления для PHP2Shell — двух критических уязвимостей в ядре PHP, которые позволяют выполнить чужой код на сервере без логина и пароля. Мы обслуживаем серверы с панелью HestiaCP, на которых одновременно стоят от двух до двенадцати версий PHP. За одну ночь мы пропатчили 50 установок PHP на шести серверах, и почти на каждом шаге «успешное» обновление могло оставить сервер уязвимым. Рассказываем, где подвох, и делимся скриптом, который всё это учитывает.

Что случилось

PHP2Shell — это CVE-2026-109618 и CVE-2026-109619. Одна ошибка связана с обработкой нехватки памяти, вторая — с состоянием, которое «зависает» между запросами одного рабочего процесса. Команда PHP оценила обе в 9.2 балла из 10 по CVSS 4.0 (ранние сообщения про 10.0 оказались ошибочными).

  • Исправленные версии: 8.5.12, 8.4.27, 8.3.36 и 8.2.35.
  • Ветки 7.4–8.1: официальных релизов нет, только исправления от поставщиков пакетов.
  • Атаки: по данным watchTowr и Tenable, попытки эксплуатации идут, первые — ещё до публичного раскрытия. По оценке Palo Alto Networks, открытых установок PHP — более 22,6 млн.

Кого касается

Практически всех, у кого сайт работает на PHP: 1С-Битрикс, WordPress, MODX, самописные проекты. Источники расходятся в точных границах уязвимых версий, поэтому безопасно исходить из простого правила: уязвимы все версии до исправленных.

Особенно внимательными стоит быть владельцам VPS с панелями вроде HestiaCP. Панель позволяет держать на сервере несколько версий PHP, и за годы их накапливается много: под старый сайт поставили 5.6, под новый — 8.3, под тест — 8.4. Забытая версия с одним-единственным сайтом открывает весь сервер.

Что получилось у нас

Итоги закрытия PHP2Shell на шести серверах HestiaCP: 50 из 50 установок PHP пропатчены, около 140 сайтов проверены, простой 1–2 секунды
ПоказательЗначение
Серверы6 с HestiaCP 1.10 (Ubuntu 22.04 и 24.04, amd64)
Версий PHP на сервереот 2 до 12, ветки от 5.6 до 8.5
Пропатчено50 установок PHP из 50, включая 5.6–7.3
Сайтов проверено до и послеоколо 140, изменений в ответах нет
Время на сервер3–30 минут, зависит от числа версий PHP и ядер
Простой сайтов1–2 секунды на перезапуск php-fpm
Панель (hestia-php)уже была обновлена до 8.5.12 разработчиками HestiaCP
Следы атакне найдены

Приятная неожиданность: в репозитории Ondřej Surý, откуда HestiaCP ставит PHP на Ubuntu, исправленные сборки пришли не только для свежих веток, но и для старых — вплоть до 5.6. Мы проверили это на своих серверах.

Подводные камни: «обновилось», а сервер уязвим

Подводные камни обновления PHP на HestiaCP: переименование PPA, неизменный номер версии, забытые версии PHP, нет перезапуска php-fpm, отдельный PHP панели, молчащие ошибки apt

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

КаменьЧто происходитКак решается
Переименование PPA ondrejНа старых серверах apt с 2022 года молча не обновляет индекс PHP из-за смены поля Label. apt upgrade пишет «уже новейшая версия», хотя пакетам три годаapt-get update --allow-releaseinfo-change-label
Номер версии ничего не доказываетУ старых веток (5.6–8.1) версия PHP не меняется, меняется только ревизия пакета (7.4.33-30 → 7.4.33-31)Искать CVE в changelog пакета phpX.Y-common
Десяток версий PHP на одном сервереHestiaCP ставит несколько версий, и забытая 5.6 с одним сайтом открывает сервер целикомОбновлять все установленные php* разом
Без перезапуска патч не работаетУже запущенные php-fpm продолжают работать со старым кодом в памятиПерезапустить каждый phpX.Y-fpm
Панель — отдельный PHPУ HestiaCP свой пакет hestia-phpПроверять его версию отдельно
ОС без поддержкиДля CentOS 7 исправленной сборки PHP нет ни у когоПереезд на Rocky/Alma 9, своя сборка PHP или коммерческая поддержка (ELS)
Ошибки репозитория не останавливают aptПри ошибке подписи apt берёт старый индекс и «успешно» ничего не делаетПроверять вывод apt-get update на E: и Err:

Как проверить и закрыть: порядок работы

Пять шагов закрытия PHP2Shell: учёт версий PHP, проверка без изменений, патч сначала на одном сервере, поиск следов атаки, план для серверов без патча
  1. Инвентаризация. Какие версии PHP стоят на сервере и сколько сайтов на каждой.
  2. Проверка без изменений. Смотрим, какие версии уязвимы, — по changelog, а не по номеру версии.
  3. Патч сначала на одном сервере. Проверяем сайты, и только потом обновляем остальные.
  4. Поиск следов атаки за период до патча, начиная с 17 октября: падения воркеров PHP, веб-шеллы, новые задания cron и SSH-ключи.
  5. Отдельный план для серверов без исправления: переезд или собственная сборка PHP.

Чтобы не делать всё это руками на каждом сервере, мы написали скрипт php2shell.sh и выложили его на GitHub. Он для Debian/Ubuntu с PHP от Surý — именно так PHP ставит HestiaCP, но панель не обязательна. Скрипт:

  • проверяет исправление CVE для каждой версии PHP по changelog пакета;
  • обновляет только уже установленные пакеты php* и hestia-php, не перезаписывая конфиги;
  • останавливается, если репозиторий PHP не обновился, — вместо «успешного» обновления, которого не было;
  • перезапускает php-fpm, Apache и панель;
  • снимает ответы всех сайтов до и после и показывает, если что-то изменилось;
  • пишет подробный лог в /var/log/php2shell/.

Пошаговая инструкция с командами и ответами на частые вопросы — в разделе советов: «Как закрыть PHP2Shell на HestiaCP».

Что делать, если патча нет

Если сервер работает на ОС без поддержки — например, CentOS 7, — исправленной сборки PHP для него нет ни у кого. Варианты:

  • переезд на актуальную ОС (Rocky Linux или AlmaLinux 9, Debian, Ubuntu) — самый надёжный путь;
  • собственная сборка PHP из исходников с патчем — требует квалификации и дальнейшей поддержки;
  • коммерческая расширенная поддержка (ELS) для старой ОС.

Пока решения нет, стоит закрыть сайты на таком сервере фильтрацией трафика (WAF) и усилить наблюдение за логами. Это снижает риск, но не устраняет его.

И попутное наблюдение. Аудит после патча выявил типичные проблемы, которые мы видим на многих серверах: SSH и панель управления открыты для всего интернета, дампы баз данных лежат в веб-корне, а резервные копии молча перестают создаваться из-за нехватки места на диске. Если вы давно не заглядывали на свой сервер, стоит проверить и это.

Поможем закрыть уязвимость

Если не хотите разбираться сами, мы проверим ваш сервер, обновим все версии PHP, найдём следы атаки, если они есть, и подготовим план для серверов, которые обновить нельзя. А серверы на техподдержке мы закрываем сами, без участия клиента. Оставьте заявку — начнём с проверки сервера.

Поделиться: VK MAX

Оставить комментарий