
Escaneo de CVE de Reescritura de Nginx(CVE-2026-42945 nginx-rift CVE-2026-9256)
Idioma: English | 中文
Esta es una herramienta ligera diseñada para verificar si la configuración de NGINX presenta patrones de riesgo relacionados con CVE-2026-42945 (NGINX Rift) y CVE-2026-9256.
La vulnerabilidad fue divulgada por depthfirst en el artículo NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability. Según el artículo y la descripción de F5/NVD, el riesgo está asociado a combinaciones específicas de configuración de ngx_http_rewrite_module: en el mismo contexto de configuración, la cadena de sustitución de rewrite contiene ?, y posteriormente rewrite, if o set referencian variables de captura PCRE sin nombre, como $1, $2.
Esta herramienta verifica principalmente si existen los siguientes patrones de alto riesgo en los archivos de configuración de NGINX.
Secuencias de alto riesgo similares a la siguiente:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
El punto de riesgo no es un rewrite o set aislado, sino su orden de ejecución en el mismo contexto:
rewrite utiliza captura regex y la cadena de sustitución contiene ?rewrite, if o set usan variables de captura sin nombre como $1, $2Esta combinación puede provocar una inconsistencia entre el cálculo de longitud y la fase de copia real del motor de scripting de NGINX, resultando en un desbordamiento de búfer en el montón (heap buffer overflow).
rewrite de alto riesgo similar al siguiente:
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
Condiciones de riesgo:
^/((.*))$, $1 incluye $2$1$2Cabe señalar que break no elimina el riesgo; mientras múltiples grupos de captura superpuestos aparezcan en la parte de argumentos después de ?, sigue perteneciendo al contexto de arguments. Un rewrite de URI normal como /$1$2 break no activa esta CVE.
Cuando el script detecte este patrón, lo marcará explícitamente como CVE-2026-9256.
El alcance de versiones afectadas listado en el artículo de depthfirst incluye:
Para conocer las versiones reales con parche y la matriz de productos, consulte el boletín oficial de F5 o el boletín de seguridad de su distribución. Incluso si la versión se encuentra dentro del rango afectado, normalmente se requiere una secuencia específica de configuración rewrite para que se active la vulnerabilidad.
El script mostrará tanto la versión actual de NGINX como los resultados del escaneo de configuración:
0.6.27 - 1.30.1 y configuración que coincide con la secuencia de riesgo: es necesario actualizar NGINX o ajustar la configuración.0.6.27 - 1.30.1 pero configuración que no coincide con la secuencia de riesgo: se recomienda actualizar, pero esta herramienta no detectó condiciones desencadenantes en la configuración.Escanear directamente la configuración completa de NGINX en la máquina actual:
python3 scan_rift.py
El script ejecutará:
nginx -T
Si el usuario actual no tiene permisos para leer la configuración completa, use sudo:
sudo python3 scan_rift.py
También se puede escanear un archivo de configuración exportado previamente:
python3 scan_rift.py /path/to/nginx-full.conf
Por ejemplo, exportar la configuración primero y luego escanear:
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
Cuando no se detectan secuencias de riesgo:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[+] No vulnerable CVE-2026-42945 sequences or CVE-2026-9256 patterns detected.
[Recommendation]: Current NGINX version is in the affected range, but no vulnerable config pattern was detected. Upgrade is recommended, but config risk was not found by this scanner.
Cuando se encuentra una secuencia sospechosa:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE SEQUENCE FOUND (CVE-2026-42945):
Context: location ~ ^/api/(.*)$ {
[1. Rewrite With ?] rewrite ^/api/(.*)$ /internal?migrated=true;
[2. Follow-up $N] set $original_endpoint $1;
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
Cuando se encuentra un patrón sospechoso de CVE-2026-9256:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE PATTERN FOUND (CVE-2026-9256):
Context: location ^~ /wengine-auth-static/ {
[Rewrite Overlapping Captures] rewrite /wengine-auth-static/((.*)) /?$1$2 break;
[Context] arguments; overlapping refs: $1/$2
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
Si se encuentra una coincidencia, se debe confirmar manualmente si ese contexto de configuración puede ser alcanzado por solicitudes externas y actualizar NGINX o ajustar la configuración lo antes posible.
rewrite / set en contextos como location, server, if, etc.$1, $2 después de un rewrite que contenga ?.^/((.*))$ con ?$1$2.break como una forma de evitar CVE-2026-9256; /?$1$2 break sigue siendo vulnerable.Esta herramienta es un escáner estático de configuración, diseñado para detectar rápidamente patrones de alto riesgo. No equivale a una validación de explotación de vulnerabilidades.
include o configuraciones generadas dinámicamente pueden afectar los resultados del escaneo.