
Scansione CVE di riscrittura Nginx (CVE-2026-42945 nginx-rift CVE-2026-9256)
Lingua: Italiano | English
Questo è uno script leggero per verificare se la configurazione di NGINX presenta modelli di rischio relativi a CVE-2026-42945 (NGINX Rift) e CVE-2026-9256.
La vulnerabilità è stata divulgata da depthfirst nell'articolo NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability. Secondo l'articolo e la descrizione F5/NVD, il rischio è legato a specifiche combinazioni di configurazione del modulo ngx_http_rewrite_module: nello stesso contesto di configurazione, la stringa di sostituzione di rewrite contiene ? e successive direttive rewrite, if o set fanno riferimento a variabili di cattura PCRE senza nome, come $1, $2.
Questo strumento verifica principalmente se nel file di configurazione di NGINX sono presenti i seguenti modelli ad alto rischio.
Sequenza ad alto rischio simile a:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
Il punto di rischio non è la singola direttiva rewrite o set, ma l'ordine di esecuzione delle stesse nello stesso contesto:
rewrite utilizza catture regex e la stringa di sostituzione contiene ?rewrite, if o set utilizzano variabili di cattura senza nome come $1, $2Questa combinazione può causare una discrepanza tra il calcolo della lunghezza e la fase di copia effettiva nel motore di scripting di NGINX, portando a un overflow del buffer heap.
rewrite ad alto rischio simile a:
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
Condizioni di rischio:
$1 include $2 in ^/((.*))$$1$2Nota: break non esclude il rischio; finché più gruppi di cattura sovrapposti compaiono nella parte degli argomenti dopo ?, rimangono nel contesto degli argomenti. Un rewrite URI normale come /$1$2 break non rientra nelle condizioni di attivazione di questa CVE.
Lo script etichetta esplicitamente questo modello come CVE-2026-9256.
L'articolo di depthfirst elenca i seguenti impatti:
Per versioni di fix e matrici di prodotti aggiornate, consultare gli annunci ufficiali di F5 o i bollettini delle distribuzioni. Anche se la versione è all'interno dell'intervallo interessato, è solitamente necessaria una specifica sequenza di configurazione rewrite per attivare la vulnerabilità.
Lo script mostra contemporaneamente la versione corrente di NGINX e i risultati della scansione della configurazione:
0.6.27 - 1.30.1 e configurazione che corrisponde a una sequenza a rischio: è necessario aggiornare NGINX o modificare la configurazione.0.6.27 - 1.30.1 ma configurazione che non corrisponde a una sequenza a rischio: si consiglia l'aggiornamento, ma non è stato rilevato alcun trigger nella configurazione.Scansiona direttamente la configurazione completa di NGINX della macchina corrente:
python3 scan_rift.py
Lo script esegue:
nginx -T
Se l'utente corrente non ha i permessi per leggere la configurazione completa, utilizzare sudo:
sudo python3 scan_rift.py
È anche possibile scansionare un file di configurazione già esportato:
python3 scan_rift.py /path/to/nginx-full.conf
Ad esempio, esportare la configurazione prima di eseguire la scansione:
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
Quando non viene trovata alcuna sequenza a rischio:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[+] No vulnerable CVE-2026-42945 sequences or CVE-2026-9256 patterns detected.
[Recommendation]: Current NGINX version is in the affected range, but no vulnerable config pattern was detected. Upgrade is recommended, but config risk was not found by this scanner.
Quando viene trovata una sequenza sospetta:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE SEQUENCE FOUND (CVE-2026-42945):
Context: location ~ ^/api/(.*)$ {
[1. Rewrite With ?] rewrite ^/api/(.*)$ /internal?migrated=true;
[2. Follow-up $N] set $original_endpoint $1;
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
Quando viene trovato un modello sospetto di CVE-2026-9256:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE PATTERN FOUND (CVE-2026-9256):
Context: location ^~ /wengine-auth-static/ {
[Rewrite Overlapping Captures] rewrite /wengine-auth-static/((.*)) /?$1$2 break;
[Context] arguments; overlapping refs: $1/$2
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
Dopo che viene trovata una corrispondenza, è necessario verificare manualmente se il contesto di configurazione riportato può essere raggiunto da richieste esterne e, se possibile, aggiornare NGINX o modificare la configurazione.
rewrite / set nei contesti location, server, if, ecc.$1, $2 dopo un rewrite con ?.^/((.*))$ con ?$1$2.break come un modo per evitare CVE-2026-9256; /?$1$2 break rientra comunque nel modello.Questo script è uno strumento di scansione statico della configurazione, progettato per individuare rapidamente modelli ad alto rischio, ma non equivale a una verifica dello sfruttamento della vulnerabilità.
include anomala o configurazioni generate dinamicamente possono influenzare la scansione.