Предупреждение о безопасности: критические уязвимости удалённого выполнения кода PHP, обновитесь немедленно
21 октября 2026 года выпущена экстренная серия обновлений PHP. PHP 8.5.12, 8.4.27, 8.3.36 и 8.2.35 устраняют две критические уязвимости, которые могут позволить неаутентифицированное удалённое выполнение кода (RCE). Всем пользователям PHP настоятельно рекомендуется немедленно выполнить обновление.
Кто находится в зоне риска
Подвержены риску все установки PHP, обслуживающие веб-запросы, включая:
- PHP-FPM
- Apache с mod_php
- php-cgi
- FrankenPHP
- LiteSpeed
Наибольший риск наблюдается при использовании mod_php. Уже продемонстрирован эксплойт, при котором неаутентифицированный запрос может инициировать атаку ещё до выполнения какого-либо кода приложения.
Уязвимости
RCE через повреждение данных при нехватке памяти (OOM), CVE-2026-109618 (GHSA-w8hw-w9fx-j79w). Обработка ситуации нехватки памяти (Out Of Memory) может прервать выполнение PHP в момент, когда внутренние данные запроса инициализированы лишь частично. При последующей очистке запроса PHP может ошибочно считать эти некорректные данные валидными.
RCE через устаревшее глобальное состояние, CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp). Внутреннее состояние, принадлежащее запросу, может сохраниться после освобождения памяти, на которой оно находилось. Следующий запрос, обрабатываемый тем же рабочим процессом, может использовать это устаревшее состояние до того, как оно будет корректно переинициализировано.
Как обновиться
- Обновитесь до PHP 8.5.12, 8.4.27, 8.3.36 или 8.2.35. Исходные коды доступны на официальной странице загрузок PHP: downloads page. Исходные коды и бинарные файлы для Windows — там же.
- Поставщики Linux-дистрибутивов и LTS-решений получили исправления заранее. Проверьте доступность обновлённых пакетов у своего поставщика.
- PHP 8.1 и более старые версии больше не получают обновлений от проекта PHP. Некоторые дистрибутивы и LTS-поставщики могут предоставлять обратно портированные исправления. Уточните информацию у своего поставщика или обновитесь до поддерживаемой версии.
- Если вы используете пакеты с rpms.remirepo.net, рекомендуется перейти на пакеты вашего дистрибутива или собирать PHP из исходников, чтобы оперативно получать обновления. В репозитории сегодня обновлений не будет.
- Из-за серьёзности проблемы команда безопасности PHP подготовила минимальные патчи для PHP 7.4, 8.0 и 8.1 для пользователей, собирающих PHP из исходников или не имеющих доступа к LTS-поставщикам: PHP 7.4, PHP 8.0 и PHP 8.1.
Если вы не можете обновиться немедленно
Обновление является единственным полноценным решением. Однако следующие меры позволяют снизить риск эксплуатации отдельных векторов атаки.
Для CVE-2026-109618 (RCE через OOM)
- Установите memory_limit=-1, желательно таким способом, который приложения не смогут переопределить (например, через php_admin_value в пуле FPM или в конфигурации Apache). Убедитесь, что ни пул, ни директория, ни приложение не возвращают конечное ограничение памяти.
- Установите небольшое значение post_max_size: если загрузка файлов не требуется — 8M, если загрузка файлов необходима — 32M. Значение upload_max_filesize должно быть меньше post_max_size.
; загрузка файлов не требуется post_max_size = 8M ; загрузка файлов необходима post_max_size = 32M upload_max_filesize < post_max_size
- Рассмотрите возможность ограничения размеров запросов на уровне веб-сервера или прокси, включая: общий размер запроса после декодирования; количество входных полей; количество частей multipart-запроса; количество заголовков; глубину вложенности данных.
- Используйте контейнеры или cgroups как границу доступности сервиса, желательно с политикой завершения только затронутого рабочего процесса.
- Не заменяйте это ограничениями RLIMIT_AS или RLIMIT_DATA, так как они сами могут привести к срабатыванию уязвимого пути выделения памяти.
Для CVE-2026-109619 (устаревшее глобальное состояние)
Установите:
session.upload_progress.enabled=0
и перезапустите все рабочие процессы. Настройка должна применяться через
php.ini, конфигурацию пула FPM или конфигурацию
веб-сервера. Не полагайтесь на ini_set() или
.user.ini.
В PHP 8.5 дополнительно установите:
fatal_error_backtraces=0
и перезапустите все рабочие процессы.
Удалите некорректные или устаревшие настройки, применяемые для каждого
запроса и вызывающие диагностические сообщения до завершения
инициализации PHP. Скрытие сообщений через error_reporting,
display_errors или оператор @
не помогает.
Исправьте все доступные атакующему фатальные ошибки и тайм-ауты
выполнения, включая ошибки в:
- callback-функциях;
- обработке загрузок файлов;
- процессах импорта;
- процедурах очистки данных.
Бюллетени безопасности
Для полного технического описания рекомендуется ознакомиться с соответствующими бюллетенями безопасности: GHSA-w8hw-w9fx-j79w и GHSA-6wmf-4rv5-p3rp. Полный текст предупреждения на английском языке опубликован на php.net: Security advisory: Critical remote code execution vulnerabilities, update now.
Автор статьи: Андрей Олегович
| Программирование на PHP | |
| Предупреждение о безопасности PHP | |
| Что нового в PHP 8.5 | |
| Разбор ошибок | |
| PHP_errors.log Beget | |
| PHP course: zero to hero in 50 lessons |