Обсудить проект
Безопасность и инфраструктура

Срочное закрытие уязвимостей PHP на серверах

21 октября 2026 года вышли исправления двух критических уязвимостей PHP с удалённым выполнением кода. На следующее утро мы проверили серверы, на которых работает PHP, и закрыли дыры по одному, с проверкой после каждого шага.

КлиентПроекты агентства
ОтрасльБезопасность и инфраструктура
Срок проекта21–22 октября 2026
УслугиАудит серверов · Обновление PHP · Безопасность · Инфраструктура
Срочное закрытие уязвимостей PHP на серверах
О проекте
01

Задача

21 октября 2026 года разработчики PHP выпустили исправления для двух критических уязвимостей (CVE-2026-109618 и CVE-2026-109619), через которые на сервере можно удалённо выполнить код. Детали обсуждались публично, поэтому в ближайшие часы ожидались массовые попытки взлома. На наших серверах работали разные версии PHP: от 7.4 до 8.5, на разных версиях Ubuntu, из разных репозиториев и даже внутри Docker. Нужно было быстро понять, где реальная угроза, и закрыть её без остановки боевых проектов.

02

Решение

Мы по SSH в режиме чтения проверили серверы с PHP: ОС, версию PHP-FPM, которая реально обрабатывает запросы, список модулей и источник пакетов. Для дистрибутивных пакетов сверяли не номер версии, а changelog, потому что Ubuntu переносит исправления в старые номера. После согласования плана мы обновили серверы с PHP из репозитория sury по одному, с проверкой конфигурации, версий, кодов ответов сайтов и журналов FPM после каждого. Образ с PHP в Docker пересобрали с нуля и заменили контейнер с сохранением старого образа для отката, а для устаревшей ветки PHP 7.4, у которой официального исправления нет, применили временную меру из рекомендаций.

03

Итог

Через 31 минуту после начала работ все серверы, где требовались действия, были обработаны: четыре закрыты обновлением, а пятый, на снятой с поддержки ветке PHP 7.4, защищён временной настройкой, потому что исправления для неё не существует. Боевые проекты не пострадали: коды ответов сайтов до и после совпали. Серверы, которые получили исправления вместе с обновлениями Ubuntu, мы только проверили, а следующий шаг для PHP 7.4, переход на актуальную ветку, подготовили и обсудили с владельцем.

Подробно

Что мы сделали: подробно о работе

01

Разбор уязвимостей и срочность

Исправления выпущены для веток 8.5.12, 8.4.27, 8.3.36 и 8.2.35. Для PHP 8.1 и старше официальных заплаток нет, а если PHP установлен из репозитория дистрибутива, номер версии может отличаться, поэтому ориентироваться нужно на пакет безопасности ОС. Источник советовал временные меры: отключить `session.upload_progress`, ограничить размер запросов и на PHP 8.5 отключить `fatal_error_backtraces`.

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

02

Инвентаризация: что на самом деле работает

На каждом сервере с PHP мы выяснили, какой PHP-FPM обслуживает сайты (на ряде серверов установлено несколько версий, но запущена одна), откуда пришёл пакет (Ubuntu или sury), включён ли модуль SOAP и есть ли обновления в индексе пакетов. Ни один пакет на этом этапе не менялся.

Главный вывод: `php -v` у дистрибутивных пакетов мало что говорит. Есть ли заплатка от конкретной CVE, видно только по changelog пакета, поэтому мы проверяли его, а не номер.

  • Разные версии Ubuntu и PHP, от 7.4 до 8.5
  • Пакеты из Ubuntu и из репозитория sury, а также PHP внутри Docker-контейнера
  • Список установленных и запущенных версий, пулов FPM и модулей
03

Классификация и план

Итог разбора: часть серверов уже закрыта обновлениями Ubuntu (оба CVE есть в changelog пакета), им нужна была только проверка. Три сервера с пакетами sury требовали обновления, один сервер работает в Docker, и один остаётся на устаревшем PHP 7.4.

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

04

Обновление боевых по одному, с проверкой

Сначала мы обновили индекс пакетов, потому что его кэш на части серверов был устаревшим и предлагал ещё уязвимые версии. Затем ставились только установленные пакеты `php8.*`, остальное в системе не менялось. Скрипт заранее сверял кандидатов с исправленными версиями из бюллетеня и остановился бы, если версия оказалась ниже.

После установки проверялись конфигурация (`php-fpm -t`), версии, перезапуск FPM и коды ответов главных страниц всех виртуальных хостов до и после. Журналы FPM просматривались ещё пять минут. Серверы шли строго по очереди: сначала тестовый, затем боевые.

  • Пакеты ставились с сохранением текущих конфигураций
  • Версии после обновления: 8.3.36, 8.4.27 и 8.5.12
  • Списки версий до обновления сохранены для отката
05

Пересборка Docker-образа

Для сервера, где PHP работает в контейнере, одного обновления пакетов мало: уязвимая версия зашита в образ. Мы пересобрали образ из Dockerfile проекта с принудительной загрузкой свежей базы и получили PHP 8.4.27 вместо 8.4.25.

До замены мы проверили конфигурацию FPM нового образа и убедились, что набор модулей совпал со старым. Контейнер заменили с теми же параметрами запуска, а предыдущий образ сохранили под отдельным тегом для быстрого отката. Сайт отвечал 200 до и после.

06

Устаревший PHP 7.4: честная временная мера

Для PHP 7.4 на Ubuntu 20.04 исправления не существует: ни в основных репозиториях, ни в changelog последнего кандидата. Поэтому мы применили временную меру из бюллетеня: отдельным файлом в `conf.d` отключили `session.upload_progress.enabled`, не трогая основной `php.ini`, перезапустили FPM и проверили значение командой `php-fpm -i`.

Мы прямо сказали владельцу, что мера снижает риск, но не заменяет обновление, и предложили три пути: подписка Ubuntu Pro (ESM), сторонний репозиторий или переход на PHP 8.3 после проверки совместимости сайтов на этом сервере. Первую же попытку мы автоматически откатили: проверка в скрипте ошибочно приняла успешный вывод за ошибку, сервер при этом не пострадал.

07

Как мы проверяли и чего не делали

Мы проверяли версии пакетов, состояние сервисов, коды ответов и журналы, а не саму уязвимость: эксплойты на серверах не запускались. Это сознательный выбор: проверка эксплойтом на боевых проектах создаёт собственный риск.

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

Результат

Что изменилось для бизнеса

5
серверов потребовали действий: у них работал уязвимый PHP
4 из 5
закрыты обновлением, пятый на PHP 7.4 защищён временной мерой
31 мин
от начала работ до последнего обновления, в боевых проектах простоев не было
0
изменённых конфигов при обновлении: пакеты ставились с сохранением текущих настроек
Хронология

Как шла работа

  1. 21 октября, 14:30 Публикация о выходе исправлений для двух критических уязвимостей PHP
  2. 22 октября, 09:52 Начало работ: чтение бюллетеня, инвентаризация серверов с PHP
  3. 22 октября, 10:01–10:07 Обновление трёх серверов с пакетами sury, по одному с проверкой
  4. 22 октября, 10:15–10:23 Пересборка Docker-образа и временная мера на сервере с PHP 7.4
Технологии

На чём построено

Серверы
Ubuntu 20.04–26.04 nginx PHP-FPM Docker
Пакеты и версии
apt sury Ubuntu security PHP 7.4–8.5
Проверка
php-fpm -t Журналы FPM HTTP-коды changelog пакетов
Вопросы и ответы

Вопросы о проекте: Срочное закрытие уязвимостей PHP на серверах

Часто задаваемые вопросы

Общее обновление затрагивает всю систему и может сломать проект. Мы обновляли только установленные пакеты PHP, заранее сверяли версии с исправленными, проверяли конфигурацию и перезапускали FPM по одному серверу, чтобы при проблеме можно было откатиться.

Ubuntu и другие дистрибутивы переносят исправления в старые номера версий. Нужную заплатку видно только в changelog пакета, поэтому для таких серверов мы проверяли записи об обоих CVE, а не номер версии.

Применить временные меры из бюллетеня: отключить session.upload_progress, ограничить размер запросов и на PHP 8.5 отключить fatal_error_backtraces. Они снижают риск, но не защищают полностью, поэтому обновление всё равно нужно.

По версиям пакетов, состоянию сервисов, кодам ответов сайтов и журналам FPM. Эксплойты на серверах мы не запускали, потому что такая проверка сама создаёт риск для боевых проектов.

Официального исправления для 7.4 нет. Мы закрыли вектор атаки временной настройкой и предложили варианты: Ubuntu Pro (ESM), сторонний репозиторий или переход на PHP 8.3 после проверки совместимости сайтов.

Обсудить похожий проект

Давайте поговорим

Расскажите о задаче — ответим в течение дня и предложим дорожную карту, сроки и бюджет.

Заявка
Источник: Кейс «Срочное закрытие уязвимостей PHP на серверах»
Заявка принята
Спасибо,

Ответим в течение рабочего дня: уточним детали и предложим дорожную карту.

Файлы cookie

Мы используем cookie, чтобы сайт работал корректно. Яндекс Метрика ведёт базовую статистику посещений, а с вашего согласия включается расширенная аналитика: Вебвизор и карта кликов. Выбор можно изменить в любой момент. Подробнее — в политике конфиденциальности.

Настройки cookie
Необходимые
Работа сайта, форм и базовая статистика посещений. Всегда включены.
Аналитика
Расширенная аналитика Яндекс Метрики: Вебвизор, карта кликов, аналитика форм.
Маркетинг
Сейчас не используется.