NGINX Rift (CVE-2026-42945): 18-летний heap overflow в модуле rewrite
NGINX Rift (CVE-2026-42945, CVSS 9.2): критический heap buffer overflow в модуле rewrite NGINX, автономно обнаруженный AI-системой depthfirst. Представлен в 2008, затрагивает 18 лет релизов NGINX, позволяет неаутентифицированному атакующему выполнить код одним HTTP-запросом.
Уязвимость, скрывавшаяся на виду
13 мая 2026 года F5 и depthfirst совместно раскрыли CVE-2026-42945 — критический heap buffer overflow в ngx_http_rewrite_module. Уязвимость сидела в кодовой базе с 2008 года (NGINX 0.6.27), затрагивая все последующие версии до 1.30.0.
Примечательно, как она была найдена: не человеком, а автономной системой анализа уязвимостей depthfirst. AI просканировал исходный код NGINX и за шесть часов отметил heap overflow, ускользавший от людей 18 лет.
| Метрика | Значение |
|---|---|
| CVE | CVE-2026-42945 |
| CVSS v4.0 | 9.2 (Critical) |
| Кем найдено | depthfirst (автономный AI) |
| Представлена | 2008 (NGINX 0.6.27) |
| Скрывалась | 18 лет |
| Тип | Heap buffer overflow (двухпроходное несоответствие длины) |
| Аутентификация | Не требуется |
| Влияние | RCE или DoS (падение worker) |
| Исправление | NGINX 1.31.0 / 1.30.1 |
Затронутые версии
| Продукт | Затронутые версии |
|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 |
| NGINX Plus | R32 – R36 |
| NGINX Ingress Controller | 3.5.0–3.7.2, 4.0.0–4.0.1, 5.0.0–5.4.1 |
NGINX обслуживает примерно треть всех сайтов в мире — радиус взрыва огромен.
Технический разбор
Двухпроходный дизайн
NGINX оценивает директивы rewrite и set в два прохода:
- Length pass: вычисляет размер буфера для вывода
- Copy pass: выделяет буфер и пишет данные
Контракт: проход 1 говорит, сколько байт выделить, проход 2 пишет ровно столько. Если они не совпадают — heap overflow.
Корневая причина: флаг is_args
Когда строка замены rewrite содержит вопросительный знак (?), функция ngx_http_script_start_args_code устанавливает флаг e->is_args = 1. Проблема: флаг никогда не сбрасывается. Он остается на главном движке скриптов до конца обработки запроса.
Несоответствие
При последующей set директиве, ссылающейся на группу захвата (например, $1):
- Length pass использует свежий обнуленный под-движок — возвращает сырую длину без экранирования
- Copy pass работает на главном движке с
is_args = 1— применяет URI-экранирование, расширяя+,%,&с 1 до 3 байт каждый
Буфер выделен на сырую длину — запись выходит за пределы выделения.
Эксплуатация
| Свойство | Деталь |
|---|---|
| Размер переполнения | Полностью контролируется атакующим |
| Данные переполнения | Контролируются (экранированное содержимое URI) |
| Воспроизводимость | Детерминированная |
| Попытки | Бесконечные — упавшие worker перезапускаются с той же heap-разметкой |
Проверьте вашу конфигурацию
grep -rn 'rewrite.*\?.*\$[0-9]' /etc/nginx/Если есть совпадения — конфигурация уязвима.
Смягчение
Немедленно: обновитесь до 1.31.0 или 1.30.1.
Workaround: замените безымянные группы захвата на именованные:
# Уязвимо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;Таймлайн
| Дата | Событие |
|---|---|
| 2008 | Уязвимость введена (NGINX 0.6.27) |
| 2026-04 | depthfirst сканирует NGINX, отметил heap overflow за 6 часов |
| 2026-04-24 | F5 подтверждает и согласует раскрытие |
| 2026-05-13 | F5 выпускает NGINX 1.31.0 с исправлением |
| 2026-05-14 | Настоящая статья |
AI-обнаруженные уязвимости: более широкая картина
CVE-2026-42945 примечателен не только серьезностью, но и методом обнаружения. Автономная AI-система нашла баг в кодовой базе, аудированной тысячами инженеров за 18 лет — за шесть часов.
| Уязвимость | Кем найдена | Время |
|---|---|---|
| Copy Fail (Linux kernel) | Xint Code (AI) | ~1 час |
| Dirty Frag (Linux kernel) | Человек | Ручной аудит |
| CVE-2026-42945 (NGINX) | depthfirst (AI) | 6 часов |
Разрыв между тем, что может найти решительная AI-система, и тем, что исторически находили люди, быстро растет. Если у вас есть NGINX — считайте, что вы затронуты, пока не проверили конфигурацию.