
Script de détection comportementale pour CVE-2026-42945 (NGINX Rift) — débordement de tas dans ngx_http_rewrite_module. Pas de RCE, détection basée uniquement sur les crashs.
Script de détection comportementale pour CVE-2026-42945 (NGINX Rift) — un dépassement de tampon dans le tas dans ngx_http_rewrite_module présent dans nginx depuis 2008.
Cet outil est destiné uniquement aux tests de sécurité autorisés et à la recherche. Exécutez-le uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de tester. Une utilisation non autorisée peut violer les lois sur la criminalité informatique de votre juridiction. L'auteur n'est pas responsable de toute utilisation abusive ou des dommages causés par cet outil.
CVE-2026-42945 est un dépassement de tampon dans le tas du moteur de script de réécriture de nginx (ngx_http_rewrite_module), introduit dans la version 0.6.27 (2008) et présent depuis environ 18 ans.
Le bug provient d'une inadéquation entre deux passages du moteur de réécriture :
is_args = 0 → alloue un petit tamponis_args = 1 → appelle ngx_escape_uri, ce qui agrandit chaque octet pouvant être échappé (comme +) à 3× sa taille → déborde le tampon du tasCela permet une exécution de code à distance non authentifiée.
Versions affectées :
| Produit | Vulnérable | Corrigé |
|---|---|---|
| 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 |
Références :
Ce script n'essaie pas de réaliser une RCE. Il imite le flux du PoC en utilisant des sockets brutes :
GET /api/<349×A><969×+> comme une requête HTTP partielleLa détection repose sur le crash d'un processus worker. Le master nginx le redémarrera immédiatement, mais il y aura une brève interruption. À utiliser avec précaution sur les systèmes de production.
# 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
targets.txt format — one per line:
http://example.com
https://example.com:8443
192.168.1.1
192.168.1.1:8080
Options :
--host Hôte cible unique
--port Port (par défaut : 80, ou 443 avec --tls)
--tls Utiliser TLS/HTTPS pour une cible unique
-l, --list Fichier avec liste de cibles
--tries Tentatives de détection par cible (par défaut : 3)
--threads Threads concurrents pour le scan de liste (par défaut : 5)
-o, --output Enregistrer les cibles vulnérables dans un fichier 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)
==================================================
Le dépôt d'origine inclut un environnement de laboratoire 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 — voir LICENSE
Recherche originale sur la vulnérabilité et PoC : DepthFirstDisclosures