
Scansiona la tua configurazione di NGINX per determinare se è affetta da CVE-2026-42945.
Scanner statico per file di configurazione NGINX che rileva il pattern rewrite/set associato a CVE-2026-42945.
Lo scanner analizza le configurazioni NGINX con
crossplane, percorre i blocchi location,
e stampa ogni posizione che appare affetta in questo formato:
/<percorso>/xxx.conf:<numero_linea> -> location XXXXX
Esempio:
/path/to/nginx.conf:39 -> location ~ ^/api/(.*)$
Riferimento: CVE-2026-42945-POC.
Le dipendenze sono gestite con uv in pyproject.toml e bloccate in uv.lock.
L'unica dipendenza runtime è .
crossplaneDalla radice del repository:
uv sync
Puoi anche saltare un passaggio di configurazione separato e lasciare che uv run crei l'ambiente
al primo utilizzo.
Scansiona un file di configurazione:
uv run ./scan.py /etc/nginx/nginx.conf
Scansiona una directory ricorsivamente:
uv run ./scan.py -r /etc/nginx
Scansiona ricorsivamente dalla directory corrente per file *.conf:
uv run ./scan.py -r './*.conf'
Usa le virgolette per i glob quando vuoi che lo scanner li espanda ricorsivamente. Se la tua shell
espande ./*.conf per prima, lo scanner riceve solo i file corrispondenti dalla shell.
Scansiona solo i file forniti e non seguire le direttive include:
uv run ./scan.py --single ./site.conf
Mostra gli avvisi del parser, inclusi i file include mancanti:
uv run ./scan.py -v -r /etc/nginx
Una implementazione Go con lo stesso formato di output e codici di uscita è disponibile in
go/. Utilizza
nginx-go-crossplane per il parsing delle configurazioni NGINX
e pflag per i flag CLI.
Richiede Go 1.23 o superiore.
Eseguilo con go run:
cd go
go run . -r ../tests/fixtures
Quando vengono rilevati risultati, lo scanner termina con codice 1. go run stamperà
una riga aggiuntiva exit status 1 in quel caso; compila il binario quando vuoi solo
l'output dello scanner.
Compila un binario standalone:
cd go
go build -o cve-2026-42945-scan-go .
./cve-2026-42945-scan-go -r ../tests/fixtures
Il pattern di configurazione rischioso è una location che contiene:
rewrite la cui sostituzione contiene un ? non escapelast, break, redirect o permanentset che copia una cattura regex come $1, ${1},
$name o ${name}Esempio di pattern vulnerabile:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
Lo scanner riporta la riga della location, non la riga rewrite o set,
perché la location è il blocco su cui agire per ispezione e correzione.
La directory tests/fixtures/ contiene piccole configurazioni NGINX che possono essere utilizzate
come esempi:
| Fixture | Risultato atteso |
|---|---|
tests/fixtures/vulnerable.conf | riporta un risultato di cattura posizionale |
tests/fixtures/named_capture.conf | riporta un risultato di cattura nominativa |
tests/fixtures/missing_include_still_scans.conf | riporta un risultato anche se un include è mancante |
tests/fixtures/safe_break_flag.conf | nessun risultato perché la rewrite usa break |
tests/fixtures/safe_no_capture.conf | nessun risultato perché nessuna cattura è disponibile |
Esegui lo scanner su tutte le fixture di esempio:
uv run ./scan.py -r tests/fixtures
Risultati attesi:
/absolute/path/to/tests/fixtures/missing_include_still_scans.conf:6 -> location ~ ^/partial/(.*)$
/absolute/path/to/tests/fixtures/named_capture.conf:2 -> location /users
/absolute/path/to/tests/fixtures/vulnerable.conf:2 -> location ~ ^/api/(.*)$
Se vengono trovate posizioni affette, ogni risultato viene stampato su una propria riga:
/absolute/path/to/file.conf:30 -> location ~ ^/aaaa/dddd/(.*)$
/absolute/path/to/nginx.conf:39 -> location ~ ^/api/(.*)$
Nessun output significa che nessuna posizione affetta è stata trovata nella configurazione analizzata.
Questo è uno scanner di configurazione statico. Non:
Considera i risultati come posizioni che necessitano di revisione e correzione. Un host è realmente affetto solo quando sia la versione vulnerabile di NGINX che il pattern di configurazione rischioso sono presenti.
Esegui la suite di test:
uv run python -m unittest discover -s tests -v
Esegui la suite di test Go:
cd go
go test ./...
Esegui il controllo sintattico:
uv run python -m py_compile scan.py
Esegui contro la configurazione POC inclusa:
uv run ./scan.py CVE-2026-42945-POC/env/nginx.conf
Output atteso:
/absolute/path/to/CVE-2026-42945-POC/env/nginx.conf:39 -> location ~ ^/api/(.*)$