
Scanner locale di sola lettura per CVE-2026-42945 (NGINX Rift) che controlla le istanze di NGINX, OpenResty e Tengine per configurazioni di rewrite vulnerabili senza eseguire exploit o modificare servizi.
Questo repository fornisce due script di controllo standalone per verificare localmente su server Linux / Windows se Nginx, OpenResty e Tengine presentano rischi relativi a CVE-2026-42945.
Gli script eseguono solo raccolta in sola lettura e determinazione locale, non eseguono PoC di vulnerabilità, non inviano richieste di attacco, non modificano configurazioni, non riavviano servizi e non aggiornano software.
CVE-2026-42945 è anche conosciuta come NGINX Rift; i materiali pubblici la descrivono come un problema di heap buffer overflow nel modulo ngx_http_rewrite_module. Secondo la descrizione NVD, quando la direttiva rewrite forma una combinazione specifica con direttive rewrite / if / set successive e coinvolge variabili di cattura PCRE senza nome (ad es. , ) e stringhe di sostituzione contenenti il punto interrogativo , un attaccante potrebbe attivare un heap buffer overflow nel processo worker di NGINX costruendo apposite richieste HTTP. Il problema può portare al riavvio del processo worker; in condizioni particolari come ASLR disattivato, esiste il rischio di esecuzione di codice.
$1$2?L'avviso di sicurezza ufficiale di NGINX segna CVE-2026-42945 come buffer overflow di ngx_http_rewrite_module e fornisce i limiti di correzione per NGINX Open Source:
| Stato | Versione NGINX Open Source |
|---|---|
| Corretto | 1.31.0+ / 1.30.1+ |
| Potenzialmente affetto | 0.6.27-1.30.0 |
Distribuzioni, prodotti commerciali, OpenResty, Tengine o build private potrebbero avere patch retroportate o differenze di mappatura delle versioni. Lo script cercherà di raccogliere quante più prove possibile, ma alla fine si consiglia comunque di confermare manualmente con gli annunci del fornitore.
Questo strumento non è uno strumento di verifica dello sfruttamento di vulnerabilità, ma uno strumento di raccolta locale e controllo statico della configurazione. Si concentra sull'identificazione delle seguenti combinazioni:
rewrite vengono utilizzate variabili di cattura senza nome come $1, $2 non escaped.rewrite contiene ? non escaped (i punti interrogativi letterali come \? non vengono considerati condizione di rischio).rewrite, if o set.Esempio di modello a rischio:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?endpoint=$1 last;
set $flag 1;
}
Il rischio non deriva da una singola rewrite o set, ma dalla combinazione di versione, contesto di configurazione e ordine di esecuzione. In caso di hit, si consiglia comunque di confermare manualmente se la configurazione è effettivamente attiva, se può essere raggiunta da richieste esterne e se è già stata corretta da patch della distribuzione.
| File | Descrizione |
|---|---|
check_nginx_linux.sh | Script di controllo per Linux |
check_nginx_windows.ps1 | Script di controllo per Windows |
README.md | Documentazione in Cinese |
README.en.md | Documentazione in Inglese |
La prima versione supporta:
rewrite pericolose relative a CVE-2026-42945.summary.txt, summary.json e directory di evidenze grezze.La prima versione non include:
Si consiglia di eseguire con privilegi di amministratore:
root o con permessi sudo.Senza privilegi di amministratore lo script cercherà comunque di raccogliere dati; se non è possibile esportare la configurazione attiva completa con nginx -T, il risultato verrà contrassegnato come "Da verificare manualmente".
Caricare check_nginx_linux.sh sul server ed eseguire:
chmod +x check_nginx_linux.sh
sudo ./check_nginx_linux.sh
Se sudo non è disponibile, eseguire direttamente:
./check_nginx_linux.sh
Caricare check_nginx_windows.ps1 sul server, quindi eseguire PowerShell come "Amministratore":
powershell -ExecutionPolicy Bypass -File .\check_nginx_windows.ps1
Lo script creerà una directory dei risultati nella stessa directory dello script. Il nome della directory contiene il nome host, l'ora e il PID dello script, evitando sovrascritture in caso di esecuzioni simultanee nello stesso secondo.
nginx_check_<nome_host>_<ora>_<PID>/
summary.txt
summary.json
raw/
host_info.txt
process_info.txt
service_info.txt
package_info.txt
nginx_paths.txt
instances/
instance_01/
nginx_invocation.txt
nginx_version.txt
nginx_build.txt
nginx_config_dump.txt
risky_config_matches.txt
instance_02/
...
| File o directory | Descrizione |
|---|---|
summary.txt | Riepilogo in Cinese, adatto per consultazione manuale e invio |
summary.json | Risultato strutturato, utile per aggregazioni successive |
raw/ | Output dei comandi grezzi e file di evidenza |
raw/instances/instance_XX/ | Versione, configurazione ed evidenze di rischio per ogni istanza |
Il riepilogo registrerà:
| Campo | Descrizione |
|---|---|
Numero istanze | Numero di istanze candidate Nginx / OpenResty / Tengine trovate e controllate singolarmente |
Dimensione configurazione | Dimensione del file di configurazione grezzo esportato da nginx -T |
Righe scandite | Numero di righe di output della configurazione effettivamente scandite dallo script |
Numero di hit di configurazione pericolose | Numero di regole rewrite pericolose trovate |
Riepilogo evidenze | Anteprima delle evidenze per l'istanza a rischio più elevato; evidenze complete nella directory dell'istanza corrispondente |
Se la configurazione Nginx è molto grande, lo script non stamperà la configurazione completa sulla console; la configurazione attiva completa viene salvata in nginx_config_dump.txt nella directory dell'istanza. Quando il file di configurazione esportato supera i 10 MB, lo script continuerà la scansione automatica e suggerirà di controllare manualmente utilizzando i risultati in raw/.
Se il server trova più eseguibili candidati nginx, openresty o tengine, lo script li controllerà singolarmente e genererà i dettagli dell'istanza.
La conclusione nel riepilogo generale prende l'istanza con il rischio più elevato. La priorità conservativa della conclusione complessiva è:
Affetto con configurazione a rischioDa verificare manualmenteAffetto senza configurazione a rischioNon affettoNginx non installatoDa verificare manualmente è superiore a Affetto senza configurazione a rischio, indicando che esistono istanze non confermate che richiedono ulteriori verifiche, ma non equivale a una configurazione pericolosa confermata.
| Conclusione | Significato |
|---|---|
Nginx non installato | Nessun comando, processo o servizio Nginx / OpenResty / Tengine trovato |
Non affetto | Versione chiaramente corretta e nessuna configurazione pericolosa trovata |
Affetto senza configurazione a rischio | Versione potenzialmente affetta, ma nessuna configurazione rewrite pericolosa trovata |
Affetto con configurazione a rischio | Versione potenzialmente affetta o versione derivata da verificare, e sono state trovate configurazioni rewrite pericolose |
Da verificare manualmente | Versione sconosciuta, versione derivata, acquisizione configurazione fallita, permessi insufficienti o prove insufficienti |
| Prodotto | Giudizio sulla versione |
|---|---|
NGINX 1.31.0+ | Corretto, lo script mostra Corretto (mainline) |
NGINX 1.30.1+ | Corretto, lo script mostra Corretto (stable) |
NGINX 0.6.27-1.30.0 | Potenzialmente affetto |
| OpenResty / Tengine | Versione e configurazione possono essere raccolte, ma la relazione di impatto della versione richiede per impostazione predefinita verifica manuale |
Le distribuzioni potrebbero avere "versione obsoleta ma già patchata". Se è disponibile una prova della patch del fornitore, è possibile confermare manualmente utilizzando summary.txt e le informazioni sulla versione del pacchetto.
rewrite / if / set nei contesti location, server, if, ecc.$1, $2 nelle stringhe di sostituzione rewrite che contengono ?.nginx -T non può esportare completamente la configurazione, lo script non la considererà sicura.