
Exploit de prueba de concepto para CVE-2026-42945, un desbordamiento de búfer en el montón en el módulo rewrite de NGINX que permite la ejecución remota de código sin autenticación mediante heap feng shui entre solicitudes.
Prueba de concepto de RCE para CVE-2026-42945, un desbordamiento crítico de búfer en el montón de NGINX en ngx_http_rewrite_module introducido en 2008. El error permite la ejecución remota de código no autenticada contra servidores que usan directivas rewrite y set.
Esta vulnerabilidad — junto con otros tres problemas de corrupción de memoria (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) — fue descubierta de forma autónoma por el sistema de análisis de seguridad de depthfirst tras un solo clic al incorporar el código fuente de NGINX.
¿Quieres encontrar problemas como este en tu propio código? Prueba el mismo sistema en https://depthfirst.com/open-defense.
El motor de scripts de NGINX utiliza un proceso de dos pasos: primero calcula el tamaño de búfer necesario, luego copia los datos. La bandera is_args se establece en el motor principal cuando una sustitución de rewrite contiene ?, pero el pase de cálculo de longitud se ejecuta en un submotor recién puesto a cero. Por lo tanto:
is_args = 0 → devuelve la longitud de captura original.is_args = 1 → llama a ngx_escape_uri con NGX_ESCAPE_ARGS, expandiendo cada byte escapable a 3 bytes.La copia desborda el búfer de montón subdimensionado con datos URI controlados por el atacante. La explotación utiliza heap feng shui entre solicitudes para corromper el puntero cleanup de un ngx_pool_t adyacente (rociado mediante cuerpos POST, ya que los bytes URI no pueden contener nulos), redirigiéndolo a un ngx_pool_cleanup_s falso que invoca system() al destruir el pool.
Lee más sobre este error en nuestro informe técnico.
| Producto | Afectado | Corregido en |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
Aviso completo del proveedor: https://my.f5.com/manage/s/article/K000160932
Probado en Ubuntu 24.04.3 LTS.
./setup.sh — construir el contenedor.docker compose -f env/docker-compose.yml up — iniciar el servidor NGINX vulnerable.python3 poc.py --shell — obtener una shell.