
Rediscovery riproducibile assistita da IA di un heap buffer overflow (CVE-2026-42945) nel modulo rewrite di nginx. Include prompt di audit, trigger PoC, riproduzione del crash con ASan e analisi tecnica per ricerca difensiva.
Questo repository documenta un esperimento riproducibile di riscoperta di vulnerabilità assistita dall'IA contro nginx ngx_http_rewrite_module, successivamente associato a CVE-2026-42945.
L'esperimento è intenzionalmente limitato. Il file vulnerabile, src/http/ngx_http_script.c, è stato fornito direttamente al modello per l'audit. Non si afferma che un sistema di IA abbia trovato autonomamente il problema nell'intero codebase di nginx da zero.
Il bug sottoposto ad audit è un heap buffer overflow causato dallo stato obsoleto del motore di script nell'elaborazione di riscrittura di nginx.
A livello generale:
rewrite contenente ? imposta e->is_args = 1.e->is_args non viene cancellato dopo che la riscrittura termina.set, if o rewrite successiva che copia una cattura regex senza nome, come $1, può dimensionare il buffer di destinazione come se la cattura venisse copiata grezza.e->is_args = 1 obsoleto e URI-escape la cattura.La riproduzione locale con AddressSanitizer conferma un heap-buffer-overflow in:
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
Il PoC è progettato per una build di laboratorio locale di nginx vulnerabile con AddressSanitizer abilitato. Avvia nginx su 127.0.0.1:18080, invia una richiesta appositamente predisposta a un server locale e stampa l'evidenza del crash.
Utilizzare un albero sorgente di nginx affetto. L'esperimento è stato validato con nginx 1.30.0 compilato con clang e 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)"
Da questo repository:
NGINX_BIN=/path/to/vulnerable/nginx/objs/nginx ./poc/reproduce.sh
Se questo repository viene posizionato direttamente all'interno del checkout del sorgente di nginx utilizzato per la validazione, lo script trova automaticamente anche ../../objs/nginx.
Una riproduzione riuscita stampa un report ASan simile 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
Vedi poc/expected_output.txt.

La configurazione di nginx utilizzata dal PoC è intenzionalmente ridotta:
location / {
rewrite ^(.*) /new?c=1;
set $myvar $1;
return 200 "$myvar\n";
}
La prima riscrittura imposta e->is_args perché la sostituzione contiene ?. La successiva set valuta $1 mentre quello stato obsoleto è ancora presente.
La patch minima ripristina il flag dello stato degli argomenti del motore di script quando una riscrittura regex termina:
e->is_args = 0;
e->quote = 0;
Nell'albero sorgente utilizzato per questo esperimento, la correzione appare come commit:
524977e7c534e87e5b55739fa74601c9f1102686
Rewrite: fixed escaping and possible buffer overrun
Il punto chiave non è la dimensione della patch, ma l'invariante di stato che ripristina: il passaggio di lunghezza e il passaggio di scrittura devono concordare sul fatto che le catture vengano copiate come argomenti URI.
Questo esperimento ha utilizzato un agente di codifica avanzato come assistente di audit. Il prompt ha esplicitamente diretto il modello a concentrarsi sui problemi di memory-safety in src/http/ngx_http_script.c e a prestare molta attenzione alle discrepanze tra passaggio di lunghezza e passaggio di scrittura.
Limitazioni importanti:
I prompt esatti sono inclusi in prompts/audit_prompt.md e prompts/poc_prompt.md.
Questo repository è destinato alla ricerca difensiva, alla validazione delle patch e alla riproducibilità. Esegui il PoC solo contro istanze di laboratorio locali che controlli.
La documentazione e l'harness PoC in questo repository sono rilasciati sotto la licenza MIT. nginx stesso non è incluso ed è soggetto alla propria licenza.