PHP2Shell: что случилось с PHP и как защитить свой сайт

Представьте: сайт работает, пользователи оформляют заказы, разработчики следят за безопасностью кода. Но уязвимость обнаруживается глубже — в самом PHP, который выполняет приложение на сервере.

Именно такая ситуация возникла в октябре 2026 года. Команда PHP выпустила обновления для двух критических уязвимостей, известных как PHP2Shell: CVE-2026-109618 и CVE-2026-109619. При определённых условиях они позволяют постороннему человеку выполнить код на сервере без входа в аккаунт.

Что именно сломалось

Обе ошибки связаны с тем, как PHP управляет памятью.

Первая возникает при нехватке памяти. Во время обработки запроса PHP мог остановить операцию раньше, чем успевал подготовить внутренние данные. Затем при завершении запроса он обращался к этим незавершённым структурам. Специально подготовленный запрос мог превратить такую ошибку в возможность выполнить чужой код.

Вторая связана с «остатками» предыдущего запроса. Один рабочий процесс PHP обычно обслуживает много запросов по очереди. После завершения одного из них в процессе могла остаться ссылка на уже освобождённую память. Следующий запрос при определённых условиях использовал эту ссылку — и возникала уязвимость.

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

Может ли это затронуть мой сайт

Проверить окружение стоит всем, у кого PHP обрабатывает веб-запросы. Это касается и PHP-FPM, и Apache с mod_php, и других способов запуска PHP.

При этом риск зависит от конфигурации. Для Apache с mod_php команда PHP подтвердила особенно опасный сценарий: атака могла сработать ещё до запуска кода сайта. Поэтому рассчитывать только на защиту внутри приложения недостаточно.

Как проблему исправили

Разработчики изменили обработку нехватки памяти, чтобы PHP не продолжал работу с некорректным внутренним состоянием. Для второй уязвимости исправили очистку данных между запросами.

Исправления двух основных уязвимостей впервые появились в следующих версиях:

Ветка PHPПервая версия с исправлениями
8.28.2.35
8.38.3.36
8.48.4.27
8.58.5.12

Эти номера — ориентир для проверки. Устанавливать следует актуальное обновление своей поддерживаемой ветки с учётом последующих исправлений безопасности.

Что делать владельцу сайта

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

Проверьте, пожалуйста, устранены ли в PHP, который обслуживает наш сайт, уязвимости CVE-2026-109618 и CVE-2026-109619. Подтвердите версию или наличие исправлений в пакете и перезапуск рабочих процессов после обновления.

Если сервер находится под вашим управлением, проверьте именно окружение сайта. Команда php -v полезна, но может показать версию консольного PHP, тогда как сайт работает через другую версию PHP-FPM.

После обновления проверьте основные функции: вход в аккаунт, оформление заказа, загрузку файлов и фоновые задачи. Для контейнерного приложения убедитесь, что обновлённый образ действительно запущен.

Как снизить риск, пока обновление готовится

Временные настройки могут закрыть отдельные пути атаки. Полностью заменить обновление они не могут.

Одна из официальных мер — отключить встроенное отслеживание прогресса загрузки файлов:

session.upload_progress.enabled = 0

Настройку нужно применить в конфигурации, которая действует до обработки запроса, например в php.ini, и перезапустить рабочие процессы. Добавлять её через ini_set() в коде сайта слишком поздно.

Для PHP 8.5 предусмотрена дополнительная мера:

fatal_error_backtraces = 0

Она ограничивает подтверждённый сценарий через трассировки фатальных ошибок. Обе настройки защищают только от определённых вариантов атаки. Отключение показа ошибок на странице проблему не устраняет.

С настройками памяти требуется больше осторожности. Официальные рекомендации включают временное отключение PHP-лимита через memory_limit=-1, но только вместе с продуманными ограничениями ресурсов и запросов. Без них можно повысить риск отказа сервиса. Такую меру должен применять администратор, понимающий устройство конкретного сервера.

Почему стоит следить за следующими обновлениями

После основных исправлений команда PHP опубликовала отдельное предупреждение — CVE-2026-115560. Оно касается редкого сочетания настроек сессий и отслеживания загрузки файлов. В уведомлении рекомендовано сохранять session.upload_progress.enabled=0 до соответствующего исправления.

История PHP2Shell показывает, почему техническая поддержка сайта продолжается после запуска. Регулярное обновление серверного окружения помогает закрывать проблемы, которые невозможно исправить изменением одной страницы или формы.