
Exploit de prueba de concepto para CVE-2026-42945, un desbordamiento crítico de búfer en el montón en el módulo de reescritura de NGINX que permite la ejecución remota de código sin autenticación. Incluye script de configuración y exploit de Python para obtener una shell.
Prueba de concepto de RCE para CVE-2026-42945, un desbordamiento crítico de búfer en el montón en el ngx_http_rewrite_module de NGINX introducido en 2008. El error permite la ejecución remota de código no autenticado contra servidores que utilizan las 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 después de un solo clic al incorporar el código fuente de NGINX.
El motor de scripts de NGINX utiliza un proceso de dos pasos: primero calcula el tamaño de búfer requerido, luego copia los datos. La bandera is_args se establece en el motor principal cuando un reemplazo de rewrite contiene ?, pero el paso de cálculo de longitud se ejecuta en un submotor recién puesto a cero. Por lo tanto:
is_args = 0is_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 (esparcido a través de cuerpos POST, ya que los bytes URI no pueden contener bytes nulos), redirigiéndolo a un ngx_pool_cleanup_s falso que invoca system() en la destrucción del pool.
Lea más sobre este error en nuestro https://t.me/p3Nt3st3rsTAr
| 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 un shell.