
Script de detecção comportamental para CVE-2026-42945 (NGINX Rift) — estouro de heap no ngx_http_rewrite_module. Sem RCE, detecção baseada apenas em crash.
Script de detecção comportamental para CVE-2026-42945 (NGINX Rift) — um estouro de buffer no heap em ngx_http_rewrite_module presente no nginx desde 2008.
Esta ferramenta destina-se exclusivamente a testes de segurança autorizados e pesquisa. Execute-a apenas contra sistemas que você possui ou para os quais tem permissão explícita por escrito para testar. O uso não autorizado pode violar as leis de crimes de informática em sua jurisdição. O autor não se responsabiliza por qualquer uso indevido ou danos causados por esta ferramenta.
CVE-2026-42945 é um estouro de buffer no heap no mecanismo de script de rewrite do nginx (ngx_http_rewrite_module), introduzido na versão 0.6.27 (2008) e presente por ~18 anos.
O bug vem de uma incompatibilidade entre duas passagens do mecanismo de rewrite:
is_args = 0 → aloca um buffer pequenois_args = 1 → chama ngx_escape_uri, expandindo cada byte escapável (como +) para 3× seu tamanho → estoura o buffer do heapIsso permite execução remota de código não autenticada.
Versões afetadas:
| Produto | Vulnerável | Corrigido |
|---|---|---|
| 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 |
Referências:
Este script não tenta RCE. Ele imita o fluxo do PoC usando sockets brutos:
GET /api/<349×A><969×+> como uma requisição HTTP parcialA detecção depende de crashar um processo worker. O master do nginx irá reiniciá-lo imediatamente, mas haverá uma breve interrupção. Use com cautela em sistemas de produção.
# Single target (HTTP)
python3 detect-CVE-2026-42945.py --host 127.0.0.1 --port 80
# Single target (HTTPS)
python3 detect-CVE-2026-42945.py --host example.com --port 443 --tls
# List of targets
python3 detect-CVE-2026-42945.py -l targets.txt
# With threading and output file
python3 detect-CVE-2026-42945.py -l targets.txt --threads 10 -o vulnerable.txt
# More attempts for unreliable targets
python3 detect-CVE-2026-42945.py --host 10.0.0.1 --port 8080 --tries 5
Formato do targets.txt — um por linha:
http://example.com
https://example.com:8443
192.168.1.1
192.168.1.1:8080
Opções:
--host Alvo único (host)
--port Porta (padrão: 80, ou 443 com --tls)
--tls Usar TLS/HTTPS para alvo único
-l, --list Arquivo com lista de alvos
--tries Tentativas de detecção por alvo (padrão: 3)
--threads Threads concorrentes para varredura de lista (padrão: 5)
-o, --output Salvar alvos vulneráveis em arquivo CSV
[*] CVE-2026-42945 Detecção de NGINX Rift | alvos=2 threads=5 tentativas=3
[*] http://192.168.1.1:80 - nginx/1.28.0
[*] http://192.168.1.2:8080 - nginx/1.31.0
[!!!] VULNERÁVEL | http://192.168.1.1:80 | nginx/1.28.0 | crash do worker (conexão de gatilho fechada — worker reiniciado)
[+] http://192.168.1.2:8080 - não vulnerável (ou erro de tempo, tente --tries 5)
==================================================
[*] Varredura completa. 2 alvos escaneados.
[!!!] 1 alvo VULNERÁVEL:
http://192.168.1.1:80 (nginx/1.28.0)
==================================================
O repositório original inclui um ambiente de laboratório Docker:
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 — veja LICENSE
Pesquisa original de vulnerabilidade e PoC: DepthFirstDisclosures