
Инструмент для сканирования и проверки уязвимости переполнения кучи в NGINX CVE-2026-42945
NGINX Rift — это открытый инструмент сканирования и проверки для CVE-2026-42945 и CVE-2026-9256 (уязвимость переполнения кучи в NGINX ngx_http_rewrite_module). Поддерживает удалённое сканирование по сетевым отпечаткам и локальный углублённый аудит конфигурации, помогая командам безопасности быстро выявлять потенциальные риски в средах NGINX.
| Свойство | Описание |
|---|---|
| Идентификатор CVE | CVE-2026-9256 |
| Тип уязвимости | Переполнение буфера в куче (Heap-based Buffer Overflow, CWE-122) |
| Поражённый компонент | NGINX ngx_http_rewrite_module |
| Затронутые версии | NGINX с открытым исходным кодом 0.1.17 ~ 1.31.0 (mainline) / 0.1.17 ~ 1.30.1 (stable) |
| Исправленные версии | NGINX 1.31.1 (mainline) / 1.30.2 (stable), выпущены 22.05.2026 |
| Уровень опасности | Высокий — может привести к отказу в обслуживании (DoS), при отключённом ASLR возможен удалённый запуск кода (RCE) |
Условия срабатывания: директива rewrite использует PCRE-регулярное выражение с перекрывающимися захватами, а в строке замены ссылается на несколько безымянных групп захвата.
| Свойство | Описание |
|---|---|
| Идентификатор CVE | CVE-2026-42945 |
| Тип уязвимости | Переполнение кучи (Heap Overflow) |
| Поражённый компонент | NGINX ngx_http_rewrite_module |
| Затронутые версии | NGINX с открытым исходным кодом 0.6.27 ~ 1.30.0 / NGINX Plus R32 ~ R36 |
| Исправленные версии | NGINX 1.30.1 (stable) / 1.31.0 (mainline) / NGINX Plus R32 P6+ |
| Уровень опасности | Высокий — может привести к отказу в обслуживании (DoS) и удалённому запуску кода (RCE) |
Условия срабатывания: в URL замены директивы rewrite одновременно присутствуют ? и ссылка на безымянную группу захвата (например, $1).
# Конфигурация, вызывающая CVE-2026-42945: ? + $1
rewrite ^/api/(.*)$ /internal?id=$1 last;
# Конфигурация, вызывающая CVE-2026-9256: несколько ссылок на $N
rewrite ^/(\w+)/(\d+)$ /$2/$1 last;
# Безопасная конфигурация (с использованием именованных групп захвата)
rewrite ^/api/(?<myid>.*)$ /internal?id=$myid last;
dpkg/rpm для определения, устранена ли уязвимость в дистрибутиве через Backportrewrite-target в ресурсах Kubernetes IngressСкачайте бинарный файл для вашей платформы со страницы Releases.
git clone https://github.com/nu0l/NGINX-Rift.git
cd NGINX-Rift
# Сборка для одной платформы
go build -o nginx_rift_scanner nginx_rift_scanner.go
# Кросс-компиляция для всех платформ
chmod +x build.sh && ./build.sh
./nginx_rift_scanner -h
# Сканирование одной цели
./nginx_rift_scanner scan -u http://example.com
# Пакетное сканирование (чтение списка URL из файла)
./nginx_rift_scanner scan -f url.txt
url.txt — по одному URL на строку, например:
http://target1.com
https://target2.com
target3.com
# Автоматический поиск путей конфигурации NGINX по умолчанию
./nginx_rift_scanner verify
# Указание пути к конфигурационному файлу
./nginx_rift_scanner verify -p /etc/nginx/nginx.conf
Режим Verify выполняет трёхступенчатый аудит:
nginx -v для получения версии и проверка бэкпорт-патчей в пакетном менеджере ОСinclude), выявление опасных правил rewritekubectl автоматическое сканирование всех ресурсов Ingress в кластере| Приоритет | Решение | Описание |
|---|---|---|
| P0 | Обновить NGINX | Обновиться до 1.30.2+ (stable) / 1.31.1+ (mainline) / последней безопасной версии NGINX Plus |
| P0 | Обновление через пакетный менеджер ОС | apt-get upgrade nginx или yum update nginx |
| P1 | Экстренное смягчение в конфигурации | Заменить $1, $2 и т.п. в rewrite на именованные группы захвата $name без остановки сервиса |
| P2 | Исправление K8s Ingress | Обновить Ingress Controller и изменить аннотацию rewrite-target |
| P3 | Эшелонированная защита | Настроить server_tokens off; для скрытия отпечатка версии |
NGINX-Rift/
├── nginx_rift_scanner.go # Исходный код основной программы
├── build.sh # Скрипт кросс-компиляции для всех платформ
├── go.mod # Описание Go-модуля
└── README.md
net/http, парсится заголовок ответа Servernginx/X.Y.Z) и коммерческой (NGINX Plus RXX)include; карта visited предотвращает циклические ссылки? + $N (CVE-2026-42945) и несколько ссылок $N (CVE-2026-9256)kubectl get ingress --all-namespaces -o yamldpkg-query/rpm --changelog для обнаружения бэкпорт-патчей на уровне ОС (поиск по обоим идентификаторам CVE)CGO_ENABLED=0) — создаётся автономный бинарный файл без зависимостей от CMIT License
Разработано силами сообщества безопасности.