
CVE-2026-42945
Критическое переполнение буфера в куче в NGINX
CVE-2026-42945 (также известная как NGINX Rift) — это критическая уязвимость безопасности в модуле ngx_http_rewrite_module NGINX.
Уязвимость возникает из-за несогласованности вычисления размера буфера между фазой проверки длины и фактической фазой копирования/экранирования при обработке правил перезаписи URI.
| Статус | Версии |
|---|---|
| Уязвимые | 0.6.27 → 1.30.0 |
| Исправлено | 1.30.1 и 1.31.0+ |
| Статус | Релизы |
|---|---|
| Уязвимые | R32 → R36 |
| Исправлено | R36 P4, R32 P6, 37.0.0+ |
Примечание: Многие продукты F5 NGINX (Ingress Controller, App Protect, Gateway Fabric и т.д.) подвержены уязвимости, если работают на уязвимых базовых версиях.
Ошибка вызывается определённой комбинацией директив:
rewrite, строка замены которой содержит ? (активирует флаг is_args).rewrite, if или set, использующая безымянные захваты PCRE ($1, $2 и т.д.).is_args = false) → недооценивает требуемый размер буфера.is_args = true) → вызывает ngx_escape_uri() с NGX_ESCAPE_ARGS.+, &, % и т.д.) в URI вызывает переполнение кучи.| Воздействие | Серьёзность | Описание |
|---|---|---|
| Отказ в обслуживании |
Оценка CVSS v4.0: 9.2 (Критическая)
Оценка CVSS v3.1: 8.1 (Высокая)
Замените безымянные захваты на именованные захваты:
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section last;
Ключевая рекомендация: Проверьте все правила перезаписи, которые комбинируют строки замены, содержащие ?, и последующее использование $1, $2 и т.д.
CVE-2026-42945 — одна из самых значительных уязвимостей NGINX за последние годы из-за её долгого существования, простоты эксплуатации и потенциала для RCE.
Действуйте сейчас — установите исправления на свои экземпляры и обновите конфигурации.
Сделано с ❤️ для сообщества по безопасности
| Высокая |
| Надёжный сбой рабочего процесса |
| Удалённое выполнение кода | Критическая (условно) | Возможно при отключённом или обойдённом ASLR |
| Сложность атаки | Низкая | Один HTTP-запрос, без аутентификации |