
Escáner de vulnerabilidades no destructivo para NGINX HTTP/3 (ngx_http_v3_module). Solo realiza una sonda segura: abre una conexión HTTP/3 (QUIC), envía una única solicitud HEAD e inspecciona la cabecera de respuesta `Server`. Nunca intenta reabrir un flujo de codificación QPACK ni desencadenar el use-after-free.
Escáner masivo no destructivo para el use-after-free de NGINX HTTP/3 (QUIC)
Inventario de qué hosts están expuestos — sin desencadenar el fallo.
Esta herramienta es solo para pruebas de seguridad autorizadas — tu propia infraestructura o sistemas sobre los que tengas permiso explícito por escrito. Realiza una huella digital de solo lectura y no explota la vulnerabilidad. Eres responsable de mantenerte dentro del alcance y cumplir con la ley aplicable y los principios de divulgación responsable. Los autores no aceptan ninguna responsabilidad por uso indebido.
CVE-2026-42530 es un use-after-free (CWE-416) en el módulo ngx_http_v3_module de NGINX. Cuando NGINX está configurado para servir HTTP/3, un atacante remoto no autenticado puede reabrir un flujo QPACK encoder dentro de una sesión HTTP/3 manipulada, provocando que un proceso worker haga referencia a memoria liberada. El impacto inmediato es un fallo / reinicio del worker (denegación de servicio); en hosts donde ASLR está deshabilitado o puede ser eludido, puede escalar a ejecución remota de código.
Punto clave: la falla solo es alcanzable cuando HTTP/3 (QUIC) está habilitado — no está activo por defecto. Los hosts que sirven solo HTTP/1.1 o HTTP/2 sobre TCP no se ven afectados por este vector específico.
| CVE | CVE-2026-42530 |
| Componente | ngx_http_v3_module (HTTP/3 / QUIC) |
| Clase | Use-After-Free (CWE-416) |
| CVSS | 9.2 (v4) · 8.1 (v3.1) |
| Impacto | Caída de worker / DoS, posible RCE sin ASLR |
| Vector | Red, no autenticado, sin interacción del usuario |
| Rama | Estado |
|---|---|
| NGINX Open Source 1.31.0 – 1.31.1 | ❌ Vulnerable |
| NGINX Open Source 1.31.2+ | ✅ Corregido |
| NGINX Plus | Aplicar aviso del proveedor (R36 P6 / 37.0.2.1) |
Abre una conexión HTTP/3 real, envía una única solicitud HEAD / y lee la cabecera Server. A partir de eso clasifica cada objetivo — y, crucialmente, trata los hosts alcanzables pero con versión oculta como requiere revisión manual en lugar de un falso "limpio", porque que QUIC sea accesible es la condición previa para el CVE.
| Estado | Significado |
|---|---|
VULNERABLE | NGINX 1.31.0 / 1.31.1 servido sobre HTTP/3 |
HTTP3_VERSION_HIDDEN | HTTP/3 alcanzable pero Server está oculto (server_tokens off) — verificar versión manualmente |
LIKELY_PATCHED | NGINX sobre HTTP/3, versión fuera del rango afectado |
NOT_NGINX | HTTP/3 alcanzable, pero el servidor no es NGINX |
NO_HTTP3 | Sin listener HTTP/3 / QUIC alcanzable (no expuesto mediante este vector) |
ERROR | Sonda falló por otra razón |
Requiere Python 3.11+ (usa asyncio.timeout).
git clone https://github.com/renzi25031469/CVE-2026-42530-scanner.git
cd CVE-2026-42530-scanner
pip install aioquic
Consejo: usa un entorno virtual —
python3 -m venv .venv && source .venv/bin/activate.
# Un solo host
python3 cve-2026-42530-scanner.py example.com
# Muchos hosts desde un archivo, 100 en paralelo, guardar un CSV
python3 cve-2026-42530-scanner.py -f targets.txt -c 100 --csv results.csv
# Tubería de objetivos desde stdin y exportar JSON
cat hosts.txt | python3 cve-2026-42530-scanner.py -f - --json results.json
# Puerto y tiempo de espera personalizados
python3 cve-2026-42530-scanner.py target.internal -p 8443 -t 5
Un host por línea. Puertos, esquemas, rutas y comentarios se manejan automáticamente:
# producción edge
edge01.example.com
edge02.example.com:8443
https://api.example.com/
# staging
10.0.5.21
| Opción | Descripción | Por defecto |
|---|---|---|
host | Objetivo único (posicional) | — |
-f, --file | Archivo de lista de objetivos (- = stdin) | — |
-p, --port | Puerto QUIC/UDP por defecto | 443 |
-t, --timeout | Tiempo de espera por host (segundos) | 10 |
-c, --concurrency | Escaneos simultáneos máximos | 50 |
--csv | Escribir resultados en CSV | — |
--json | Escribir resultados en JSON | — |
[*] CVE-2026-42530 safe-check — 4 objetivo(s), concurrencia=100, tiempo de espera=10s
======================================================================
CVE-2026-42530 RESULTADOS SAFE-CHECK
======================================================================
[VULNERABLE ] edge01.example.com:443 (Server: nginx/1.31.1)
-> Versión vulnerable de NGINX sobre HTTP/3. Actualizar a nginx/1.31.2 o posterior.
[HTTP3_VERSION_HIDDEN ] api.example.com:443
-> HTTP/3 alcanzable pero la cabecera Server está oculta. Verificar la versión de NGINX manualmente.
[LIKELY_PATCHED ] edge02.example.com:8443 (Server: nginx/1.31.2)
[NO_HTTP3 ] 10.0.5.21:443
----------------------------------------------------------------------
Resumen: VULNERABLE=1 | HTTP3_VERSION_HIDDEN=1 | LIKELY_PATCHED=1 | NO_HTTP3=1
[!] 1 host(s) parece VULNERABLE. Mitigación: actualizar a nginx/1.31.2 o posterior,
o eliminar 'quic' de todas las directivas 'listen'.
======================================================================
quic de cada directiva listen y quitando http3 on;, luego recargar NGINX. Esto elimina por completo la ruta de código vulnerable./proc/sys/kernel/randomize_va_space = 2). Tratar esto como una capa de endurecimiento, no como un sustituto del parcheo.aioquic es asíncrono, por lo que este escáner usa un asyncio.Semaphore en lugar de hilos del sistema. Para trabajo limitado por E/S de red — cientos de handshakes QUIC esperando en el cable — un solo bucle de eventos escala más lejos con mucha menos sobrecarga que un pool de hilos, proporcionando el mismo comportamiento de "escanear muchos hosts a la vez". Ajusta el límite con -c.
Gracias a los investigadores acreditados en la divulgación original por sus informes coordinados.
Publicado bajo la Licencia MIT. Ver LICENSE.
Construido para defensores y equipos rojos autorizados. Escanea responsablemente. 🔐