
Script di rilevamento comportamentale per CVE-2026-42945 (NGINX Rift) — heap overflow in ngx_http_rewrite_module. Nessuna RCE, rilevamento solo tramite crash.
Script di rilevamento comportamentale per CVE-2026-42945 (NGINX Rift) — un heap buffer overflow in ngx_http_rewrite_module presente in nginx dal 2008.
Questo strumento è destinato esclusivamente a test di sicurezza autorizzati e attività di ricerca. Eseguilo solo su sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta. L'uso non autorizzato può violare le leggi sui crimini informatici nella tua giurisdizione. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo strumento.
CVE-2026-42945 è un heap buffer overflow nel motore di script rewrite di nginx (ngx_http_rewrite_module), introdotto nella versione 0.6.27 (2008) e presente per circa 18 anni.
Il bug deriva da una discrepanza tra due passaggi del motore rewrite:
is_args = 0 → alloca un buffer piccolois_args = 1 → chiama ngx_escape_uri, espandendo ogni byte escapabile (come +) a 3 volte la sua dimensione → supera il buffer heapCiò consente l'esecuzione remota di codice non autenticata.
Versioni interessate:
| Prodotto | Vulnerabile | Corretta |
|---|---|---|
| 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 |
Riferimenti:
Questo script non tenta RCE. Imita il flusso del PoC utilizzando socket raw:
GET /api/<349×A><969×+> come richiesta HTTP parzialeIl rilevamento si basa sul crash di un processo worker. Il master nginx lo riavvierà immediatamente, ma ci sarà una breve interruzione. Usare con cautela su sistemi di produzione.
# Singolo target (HTTP)
python3 detect-CVE-2026-42945.py --host 127.0.0.1 --port 80
# Singolo target (HTTPS)
python3 detect-CVE-2026-42945.py --host example.com --port 443 --tls
# Lista di target
python3 detect-CVE-2026-42945.py -l targets.txt
# Con threading e file di output
python3 detect-CVE-2026-42945.py -l targets.txt --threads 10 -o vulnerable.txt
# Più tentativi per target inaffidabili
python3 detect-CVE-2026-42945.py --host 10.0.0.1 --port 8080 --tries 5
Formato di targets.txt — uno per riga:
http://example.com
https://example.com:8443
192.168.1.1
192.168.1.1:8080
Opzioni:
--host Host singolo target
--port Porta (default: 80, o 443 con --tls)
--tls Usa TLS/HTTPS per singolo target
-l, --list File con lista di target
--tries Tentativi di rilevamento per target (default: 3)
--threads Thread concorrenti per scansione lista (default: 5)
-o, --output Salva target vulnerabili in file CSV
[*] CVE-2026-42945 NGINX Rift Detection | targets=2 threads=5 tries=3
[*] http://192.168.1.1:80 - nginx/1.28.0
[*] http://192.168.1.2:8080 - nginx/1.31.0
[!!!] VULNERABLE | http://192.168.1.1:80 | nginx/1.28.0 | worker crash (trigger connection closed — worker respawned)
[+] http://192.168.1.2:8080 - not vulnerable (or timing miss, try --tries 5)
==================================================
[*] Scan complete. 2 targets scanned.
[!!!] 1 VULNERABLE target(s):
http://192.168.1.1:80 (nginx/1.28.0)
==================================================
Il repository originale include un ambiente di laboratorio 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 — consulta LICENSE
Ricerca originale sulla vulnerabilità e PoC: DepthFirstDisclosures