Критические уязвимости PHP: CVE-2026-109618 и CVE-2026-109619 | ESTT

21 октября 2026 года в PHP обнаружены две критические уязвимости (CVSS 9.2), позволяющие неаутентифицированному злоумышленнику выполнить произвольный код (RCE). Риск особенно высок для Apache с mod_php, где атака возможна до запуска кода приложения.

Обновление — единственное полное решение. Все временные меры лишь снижают риск и не делают сервер безопасным.

1. Поддерживаемые версии (обновление)

Обновите PHP до одной из исправленных версий:

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

Через пакетный менеджер (рекомендуется)

# Debian / Ubuntu
sudo apt update && sudo apt install --only-upgrade php8.5 php8.4 php8.3 php8.2

# RHEL / AlmaLinux / Rocky Linux
sudo dnf upgrade --refresh 'php*'

Дистрибутивы и LTS-вендоры получили патчи заранее — проверьте changelog на упоминание CVE-2026-109618 / CVE-2026-109619. Для репозитория rpms.remirepo.net официальный бюллетень рекомендует перейти на пакеты дистрибутива или сборку из исходного кода.

После обновления обязательно перезапустите все службы PHP (FPM, Apache/LiteSpeed), чтобы новый бинарный файл загрузился в память. Уязвимость CVE-2026-109619 связана с сохранением состояния между запросами в рамках worker-процесса.


2. Неподдерживаемые версии (PHP 7.4, 8.0, 8.1)

Эти ветки не получают официальных обновлений безопасности. Однако, учитывая тяжесть уязвимостей, команда безопасности PHP опубликовала минимальные обратные порты (source-backports) для сборки из исходного кода.

Официальные патчи доступны в соответствующих ветках репозитория php-src:

Ссылки на ветки — в официальном бюллетене PHP.

Порядок действий:

# 1. Клонируйте нужную ветку (пример для 8.1)
git clone --branch PHP-8.1-CVE-2026-109618-109619 https://github.com/php/php-src.git php-src-8.1-patched
cd php-src-8.1-patched

# 2. Соберите и установите PHP по стандартной процедуре
./buildconf --force
./configure --prefix=/opt/php-8.1-patched [ваши обычные опции]
make -j$(nproc)
sudo make install

Важно: минимальный патч отключает session.upload_progress (индикатор прогресса загрузки файлов перестаёт работать), но обычные multipart/form-data загрузки продолжают функционировать.

Это временное решение. Версии 7.4/8.0/8.1 остаются EOL, и другие известные проблемы после последнего официального релиза остаются неисправленными.

3. Временные меры (если обновление или патч невозможны немедленно)

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

Для CVE-2026-109618 (RCE через повреждение памяти при OOM):

  1. Снимите ограничение памяти: memory_limit = -1. Установите способом, который приложение не сможет переопределить (например, php_admin_value в пуле FPM или конфигурации Apache). Убедитесь, что ни один пул, каталог или настройка приложения не возвращает конечный лимит.
  2. Ограничьте размер POST: post_max_size = 8M (если загрузка файлов не нужна) или 32M (если нужна). upload_max_filesize должен быть меньше post_max_size.
  3. Рассмотрите ограничение размера декодированного запроса и глубины вложенности на уровне веб-сервера или прокси.

Для CVE-2026-109619 (RCE через устаревшее глобальное состояние):

  1. Отключите прогресс загрузки: session.upload_progress.enabled = 0. Настройка должна применяться до разбора запроса — через php.ini или php_admin_value, но не через ini_set() или .user.ini.
  2. Для PHP 8.5: fatal_error_backtraces = 0.
  3. После изменения перезапустите все worker-процессы.

4. Проверка после обновления/патча

# 1. Проверьте версию
php -v

# 2. Если используется OPcache — очистите его
sudo kill -USR2 $(pgrep -f 'php-fpm.*master')
# или просто перезапустите PHP-FPM / Apache

Для проверки через веб-сервер временно создайте файл с <?php phpinfo(); и убедитесь, что отображается корректная версия.


Итоговый чек-лист

  • Определены все системы, использующие PHP (FPM, mod_php, php-cgi, FrankenPHP, LiteSpeed).
  • Поддерживаемые версии обновлены до 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35.
  • Для неподдерживаемых версий (7.4 / 8.0 / 8.1) применён один из вариантов: сборка из исходного кода с официальным обратным портом.
  • Все службы PHP перезапущены.
  • Если обновление/патч отложены — применены временные меры для обеих уязвимостей.
  • OPcache очищен (если используется).
  • Версия PHP проверена через php -v и/или phpinfo().