
Redescubrimiento reproducible de vulnerabilidad asistido por IA de CVE-2026-42945 en nginx, que incluye análisis técnico, disparador de PoC y validación de parche para desbordamiento de búfer en el montón.
Este repositorio documenta un experimento reproducible de redescubrimiento de vulnerabilidad asistido por IA contra el módulo ngx_http_rewrite_module de nginx, posteriormente asociado con CVE-2026-42945.
El experimento es intencionalmente limitado. El archivo vulnerable, src/http/ngx_http_script.c, se proporcionó directamente al modelo para su auditoría. Esto no es una afirmación de que un sistema de IA encontró el problema de forma autónoma en la base de código completa de nginx desde cero.
El error auditado es un desbordamiento de búfer en el heap causado por un estado obsoleto del motor de scripts en el procesamiento de reescritura de nginx.
A alto nivel:
rewrite que contiene ? establece e->is_args = 1.e->is_args no se limpia después de que finaliza la reescritura.set, if o rewrite que copie una captura de regex sin nombre, como $1, puede dimensionar el búfer de destino como si la captura se copiara sin procesar.e->is_args = 1 obsoleto y escapa la URI de la captura.La reproducción local con AddressSanitizer confirma un heap-buffer-overflow en:
ngx_escape_uri
ngx_http_script_copy_capture_code
ngx_http_rewrite_handler
.
├── README.md
├── LICENSE
├── prompts/
│ ├── audit_prompt.md
│ └── poc_prompt.md
├── poc/
│ ├── trigger.py
│ ├── nginx.conf
│ ├── reproduce.sh
│ └── expected_output.txt
├── docs/
│ ├── technical-analysis.md
│ ├── vulnerability-breakdown.md
│ └── methodology.md
└── screenshots/
└── asan-crash.png
El PoC está diseñado para una compilación de laboratorio local de nginx vulnerable con AddressSanitizer habilitado. Inicia nginx en 127.0.0.1:18080, envía una solicitud manipulada a un servidor local e imprime evidencia del fallo.
Utilice un árbol fuente de nginx afectado. El experimento se validó contra nginx 1.30.0 compilado con clang y ASan:
./auto/configure \
--prefix=/tmp/nginx-asan-poc \
--with-cc-opt='-O0 -g -fsanitize=address -fno-omit-frame-pointer' \
--with-ld-opt='-fsanitize=address'
make -j"$(getconf _NPROCESSORS_ONLN 2>/dev/null || sysctl -n hw.ncpu)"
Desde este repositorio:
NGINX_BIN=/path/to/vulnerable/nginx/objs/nginx ./poc/reproduce.sh
Si este repositorio se coloca directamente dentro del checkout del código fuente de nginx utilizado para la validación, el script también encuentra ../../objs/nginx automáticamente.
Una reproducción exitosa imprime un informe de ASan similar a:
ERROR: AddressSanitizer: heap-buffer-overflow
WRITE of size 1
#0 ngx_escape_uri ngx_string.c:1687
#1 ngx_http_script_copy_capture_code ngx_http_script.c:1399
#2 ngx_http_rewrite_handler ngx_http_rewrite_module.c:180

La configuración de nginx utilizada por el PoC es intencionalmente pequeña:
location / {
rewrite ^(.*) /new?c=1;
set $myvar $1;
return 200 "$myvar\n";
}
La primera reescritura establece e->is_args porque la sustitución contiene ?. La posterior set evalúa $1 mientras ese estado obsoleto aún está presente.
El parche mínimo restablece la bandera de estado de argumentos del motor de scripts cuando finaliza una reescritura de regex:
e->is_args = 0;
e->quote = 0;
En el árbol fuente utilizado para este experimento, la corrección aparece como commit:
524977e7c534e87e5b55739fa74601c9f1102686
Rewrite: fixed escaping and possible buffer overrun
El punto clave no es el tamaño del parche, sino el invariante de estado que restaura: el paso de longitud y el paso de escritura deben estar de acuerdo sobre si las capturas se están copiando como argumentos de URI.
Este experimento utilizó un agente de codificación de frontera como asistente de auditoría. El prompt dirigió explícitamente al modelo a centrarse en problemas de seguridad de memoria en src/http/ngx_http_script.c y a prestar especial atención a discrepancias de dos pasos (longitud/escritura).
Limitaciones importantes:
Los prompts exactos se incluyen en prompts/audit_prompt.md y prompts/poc_prompt.md.
Este repositorio está destinado a la investigación defensiva, la validación de parches y la reproducibilidad. Ejecute el PoC solo contra instancias de laboratorio local que usted controle.
La documentación y el harness del PoC en este repositorio se publican bajo la Licencia MIT. nginx en sí no está incluido y se rige por su propia licencia.