
Exploit RCE di NGINX
Proof of concept di RCE per CVE-2026-42945, un heap buffer overflow critico nel ngx_http_rewrite_module di NGINX introdotto nel 2008. Il bug consente l'esecuzione remota di codice senza autenticazione su server che utilizzano le direttive rewrite e set.
Questa vulnerabilità — insieme ad altri tre problemi di corruzione della memoria (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) — è stata scoperta autonomamente dal sistema di analisi della sicurezza di depthfirst dopo un singolo clic di caricamento del codice sorgente NGINX.
Vuoi trovare problemi come questo nel tuo codice? Prova lo stesso sistema su https://depthfirst.com/open-defense.
Il motore di script di NGINX utilizza un processo a due passaggi: prima calcola la dimensione del buffer necessaria, poi copia i dati. Il flag is_args viene impostato sul motore principale quando una sostituzione rewrite contiene ?, ma il passaggio di calcolo della lunghezza viene eseguito su un motore secondario appena azzerato. Quindi:
is_args = 0 → restituisce la lunghezza grezza della cattura.is_args = 1 → chiama ngx_escape_uri con NGX_ESCAPE_ARGS, espandendo ogni byte escapabile a 3 byte.La copia provoca un overflow del buffer heap sottodimensionato con dati URI controllati dall'attaccante. Lo sfruttamento utilizza heap feng shui tra richieste per corrompere il puntatore cleanup di un ngx_pool_t adiacente (spruzzato tramite i corpi delle richieste POST, poiché i byte dell'URI non possono contenere byte nulli), reindirizzandolo verso un finto ngx_pool_cleanup_s che invoca system() alla distruzione della pool.
Maggiori informazioni su questo bug nel nostro approfondimento tecnico.
| Prodotto | Versioni affette | Corretta in |
|---|---|---|
| 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 |
Advisory completo del fornitore: https://my.f5.com/manage/s/article/K000160932
K000161616: vulnerabilità di NGINX ngx_http_v3_module — HTTP/3 QPACK alloca il insert_buffer della sessione da una pool di stream encoder unidirezionale. La chiusura di tale stream libera la pool mentre la sessione mantiene un puntatore pendente, quindi uno stream encoder successivo innesca un heap use-after-free nel worker NGINX.
K000162097: vulnerabilità della direttiva map e del matching regex di NGINX — il matching regex della direttiva map con variabili di cattura può causare un heap buffer overflow nel processo worker NGINX.
Il bug si trova nella valutazione complessa a due passaggi del motore script di stream. In una configurazione stream vulnerabile che usa ssl_preread, il SNI TLS controllato dall'attaccante viene inserito in variabili basate su regex. NGINX calcola prima la lunghezza del buffer di output, poi copia l'output. Una regex map può aggiornare lo stato di cattura globale tra questi due passaggi: il passaggio di lunghezza considera un valore piccolo, mentre il passaggio di copia legge una cattura regex più grande come $1, causando una scrittura heap fuori dai limiti nel worker.
Il PoC CVE-2026-42533/ associato è un exploit a catena completa. Utilizza la primitiva di leak dello stream per recuperare le basi di heap e libc per il bypass di ASLR, spruzza record ngx_pool_cleanup_s fittizi attraverso i corpi delle richieste HTTP, e poi usa l'overflow per corrompere il puntatore di cleanup di una pool NGINX adiacente. Quando la pool corrotta viene distrutta, il dispatch del cleanup viene reindirizzato a system() della libc, eseguendo il comando fornito.