
Escáner local de solo lectura para CVE-2026-42945 (NGINX Rift) que verifica instancias de NGINX, OpenResty y Tengine en busca de configuraciones rewrite vulnerables sin ejecutar exploits ni modificar servicios.
Este repositorio proporciona dos scripts de verificación local para inspeccionar en servidores Linux / Windows si Nginx, OpenResty o Tengine presentan riesgos relacionados con CVE-2026-42945.
Los scripts solo realizan recopilación de solo lectura y evaluación local; no ejecutan PoC de vulnerabilidades, no envían solicitudes de ataque, no modifican la configuración, no reinician servicios ni actualizan software.
CVE-2026-42945, también conocido como NGINX Rift, está descrito en fuentes públicas como un desbordamiento de búfer en el montón en ngx_http_rewrite_module. Según la descripción de NVD, cuando la directiva rewrite forma una combinación específica con directivas rewrite / if / set posteriores e involucra variables de captura PCRE sin nombre (por ejemplo, , ) y cadenas de sustitución que contienen el signo de interrogación , un atacante podría provocar un desbordamiento de búfer en el montón en el proceso worker de NGINX mediante solicitudes HTTP especialmente diseñadas. Este problema podría provocar el reinicio del proceso worker; en condiciones específicas, como con ASLR desactivado, existe riesgo de ejecución de código.
$1$2?El aviso de seguridad oficial de NGINX clasifica CVE-2026-42945 como un desbordamiento de búfer en ngx_http_rewrite_module y proporciona el alcance de la corrección para NGINX Open Source:
| Estado | Versión de NGINX Open Source |
|---|---|
| Corregido | 1.31.0+ / 1.30.1+ |
| Posiblemente afectado | 0.6.27-1.30.0 |
Las distribuciones, los productos comerciales, OpenResty, Tengine o las compilaciones privadas pueden presentar diferencias en los backports de parches o en el mapeo de versiones. El script intentará recopilar la mayor evidencia posible, pero se recomienda confirmar manualmente junto con los avisos de los proveedores.
Esta herramienta no es una herramienta de validación de explotación de vulnerabilidades, sino una herramienta de recopilación local e inspección estática de configuración. Se centra en identificar las siguientes combinaciones:
$1, $2, en la cadena de sustitución de la directiva rewrite.rewrite contiene un ? sin escapar; los signos de interrogación literales con la forma \? no se consideran una condición de riesgo.rewrite, if o set posteriores.Ejemplo de patrón de riesgo:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?endpoint=$1 last;
set $flag 1;
}
El riesgo no proviene de una directiva rewrite o set aislada, sino de la condición de activación que forman conjuntamente la versión, el contexto de configuración y el orden de ejecución. Ante una coincidencia, se recomienda confirmar manualmente si esa configuración es la efectivamente aplicada, si puede ser alcanzada por solicitudes externas y si la distribución ya la ha corregido mediante un backport.
| Archivo | Descripción |
|---|---|
check_nginx_linux.sh | Script de verificación local para Linux |
check_nginx_windows.ps1 | Script de verificación local para Windows |
README.md | Documentación en chino |
README.en.md | README en inglés |
La primera versión admite:
rewrite relacionadas con CVE-2026-42945.summary.txt, summary.json y un directorio de evidencia sin procesar.La primera versión no incluye:
Se recomienda ejecutar con privilegios de administrador:
root o una cuenta con privilegios sudo.Sin privilegios de administrador, el script recopilará todo lo que pueda; si no es posible exportar la configuración efectiva completa de nginx -T, el resultado se marcará como Requiere revisión manual.
Suba check_nginx_linux.sh al servidor y ejecute:
chmod +x check_nginx_linux.sh
sudo ./check_nginx_linux.sh
Si no puede usar sudo, también puede ejecutarlo directamente:
./check_nginx_linux.sh
Suba check_nginx_windows.ps1 al servidor y, con PowerShell en modo «Ejecutar como administrador», ejecute:
powershell -ExecutionPolicy Bypass -File .\check_nginx_windows.ps1
El script genera un directorio de resultados en el mismo directorio en el que se encuentra. El nombre del directorio incluye el nombre del host, la hora y el ID del proceso del script, para evitar que se mezcle la evidencia si se ejecuta varias veces en el mismo segundo.
nginx_check_<主机名>_<时间>_<进程ID>/
summary.txt
summary.json
raw/
host_info.txt
process_info.txt
service_info.txt
package_info.txt
nginx_paths.txt
instances/
instance_01/
nginx_invocation.txt
nginx_version.txt
nginx_build.txt
nginx_config_dump.txt
risky_config_matches.txt
instance_02/
...
| Archivo o directorio | Descripción |
|---|---|
summary.txt | Resumen en chino, adecuado para revisión manual y reenvío posterior |
summary.json | Resultado estructurado, para facilitar la consolidación posterior por lotes |
raw/ | Salida original de comandos y archivos de evidencia |
raw/instances/instance_XX/ | Versión, configuración y evidencia de riesgo independientes de cada instancia |
El resumen registra:
| Campo | Descripción |
|---|---|
Número de instancias | Número de instancias candidatas de Nginx / OpenResty / Tengine encontradas y verificadas una por una en el equipo local |
Tamaño de la configuración | Tamaño del archivo de resultados de configuración sin procesar exportado por nginx -T |
Líneas escaneadas | Número de líneas de salida de configuración realmente escaneadas por el script |
Coincidencias de configuración peligrosa | Número de reglas peligrosas de rewrite que coinciden |
Resumen de evidencia | Vista previa de la evidencia de la instancia de mayor riesgo; la evidencia completa se encuentra en el directorio de la instancia correspondiente |
Si la configuración de Nginx es muy extensa, el script no imprime la configuración completa en la consola; la configuración efectiva completa se guarda en nginx_config_dump.txt dentro del directorio de la instancia correspondiente. Cuando el archivo de configuración exportado supere los 10 MB, el script continuará el escaneo automáticamente y avisará de que se recomienda realizar una revisión manual por muestreo junto con los resultados de raw/.
Si en el servidor se encuentran varios ejecutables candidatos nginx, openresty o tengine, el script los verifica uno por uno y genera el detalle de cada instancia.
La conclusión del resumen general se toma de la instancia de mayor riesgo. La conclusión global utiliza una prioridad conservadora:
Afectado con configuración de riesgoRequiere revisión manualAfectado sin configuración de riesgoNo afectadoNginx no instaladoDe ellas, Requiere revisión manual tiene prioridad sobre Afectado sin configuración de riesgo; indica que existen instancias sin confirmar que requieren seguir verificándose, y no equivale a que se haya confirmado la existencia de una configuración peligrosa.
| Conclusión | Significado |
|---|---|
Nginx no instalado | No se encuentran comandos, procesos ni servicios de Nginx / OpenResty / Tengine |
No afectado | La versión es claramente una versión corregida y no se ha encontrado ninguna configuración peligrosa |
Afectado sin configuración de riesgo | La versión es posiblemente afectada, pero no se ha encontrado ninguna configuración peligrosa de rewrite |
Afectado con configuración de riesgo | La versión es posiblemente afectada o es una variante derivada que requiere revisión, y se ha encontrado una configuración peligrosa de rewrite |
Requiere revisión manual | Versión desconocida, variante derivada, fallo en la recopilación de la configuración, permisos insuficientes o evidencia insuficiente |
| Producto | Determinación de versión |
|---|---|
NGINX 1.31.0+ | Corregida; el script la muestra como Corregida (mainline) |
NGINX 1.30.1+ | Corregida; el script la muestra como Corregida (stable) |
NGINX 0.6.27-1.30.0 | Posiblemente afectado |
| OpenResty / Tengine | Se pueden recopilar la versión y la configuración, pero la relación de impacto por versión requiere revisión manual de forma predeterminada |
Las distribuciones pueden presentar casos en los que «el número de versión es antiguo pero el parche ya se ha aplicado mediante backport». Si se puede aportar la prueba del parche del proveedor, se puede realizar la confirmación manual combinando summary.txt y la información de la versión del paquete.
rewrite / if / set en todos los contextos como location, server, if, etc.$1, $2 en cadenas de sustitución de rewrite que contengan ?.nginx -T no puede exportar la configuración completa, el script no determinará que el sistema es seguro.