
Analysez votre configuration NGINX pour déterminer si elle est affectée par CVE-2026-42945.
Analyseur statique pour fichiers de configuration NGINX qui détecte le motif rewrite/set associé à CVE-2026-42945.
L'analyseur parse les configurations NGINX avec crossplane, parcourt les blocs location, et affiche chaque emplacement potentiellement affecté dans ce format :
/<chemin-vers>/xxx.conf:<numéro-ligne> -> location XXXXX
Exemple :
/path/to/nginx.conf:39 -> location ~ ^/api/(.*)$
Référence : CVE-2026-42945-POC.
Les dépendances sont gérées avec uv dans pyproject.toml et verrouillées dans uv.lock.
La seule dépendance d'exécution est .
crossplaneDepuis la racine du dépôt :
uv sync
Vous pouvez également ignorer l'étape d'installation séparée et laisser uv run créer l'environnement lors de la première utilisation.
Analyser un fichier de configuration :
uv run ./scan.py /etc/nginx/nginx.conf
Analyser un répertoire de manière récursive :
uv run ./scan.py -r /etc/nginx
Analyser récursivement depuis le répertoire courant pour les fichiers *.conf :
uv run ./scan.py -r './*.conf'
Mettez les globs entre guillemets lorsque vous souhaitez que l'analyseur les développe récursivement. Si votre shell développe ./*.conf en premier, l'analyseur ne reçoit que les fichiers correspondants trouvés par le shell.
Analyser uniquement les fichiers fournis sans suivre les directives include :
uv run ./scan.py --single ./site.conf
Afficher les avertissements de l'analyseur, y compris les fichiers include manquants :
uv run ./scan.py -v -r /etc/nginx
Une implémentation en Go avec le même format de sortie et les mêmes codes de sortie est disponible dans go/. Elle utilise nginx-go-crossplane pour l'analyse des configurations NGINX et pflag pour les drapeaux CLI.
Nécessite Go 1.23 ou plus récent.
Exécutez-la avec go run :
cd go
go run . -r ../tests/fixtures
Lorsque des résultats sont présents, l'analyseur se termine avec le code 1. go run affichera une ligne supplémentaire exit status 1 dans ce cas ; construisez le binaire lorsque vous souhaitez uniquement la sortie de l'analyseur.
Construire un binaire autonome :
cd go
go build -o cve-2026-42945-scan-go .
./cve-2026-42945-scan-go -r ../tests/fixtures
Le motif de configuration risqué est une location qui contient :
rewrite dont la substitution contient un ? non échappélast, break, redirect ou permanentset ultérieure qui copie une capture d'expression régulière telle que $1, ${1}, $name ou ${name}Exemple de motif vulnérable :
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
L'analyseur signale la ligne de la location, pas la ligne de rewrite ou set, car la location est le bloc sur lequel agir pour inspecter et corriger.
Le répertoire tests/fixtures/ contient de petites configurations NGINX pouvant servir d'exemples :
| Fixture | Résultat attendu |
|---|---|
tests/fixtures/vulnerable.conf | signale un résultat de capture positionnelle |
tests/fixtures/named_capture.conf | signale un résultat de capture nommée |
tests/fixtures/missing_include_still_scans.conf | signale un résultat même si un include est manquant |
tests/fixtures/safe_break_flag.conf | pas de résultat car la rewrite utilise break |
tests/fixtures/safe_no_capture.conf | pas de résultat car aucune capture n'est disponible |
Exécuter l'analyseur sur tous les exemples de fixtures :
uv run ./scan.py -r tests/fixtures
Résultats attendus :
/path/absolu/vers/tests/fixtures/missing_include_still_scans.conf:6 -> location ~ ^/partial/(.*)$
/path/absolu/vers/tests/fixtures/named_capture.conf:2 -> location /users
/path/absolu/vers/tests/fixtures/vulnerable.conf:2 -> location ~ ^/api/(.*)$
Si des emplacements affectés sont trouvés, chaque résultat est affiché sur sa propre ligne :
/path/absolu/vers/fichier.conf:30 -> location ~ ^/aaaa/dddd/(.*)$
/path/absolu/vers/nginx.conf:39 -> location ~ ^/api/(.*)$
Aucune sortie signifie qu'aucun emplacement affecté n'a été trouvé dans la configuration analysée.
Il s'agit d'un analyseur de configuration statique. Il ne :
Traitez les résultats comme des emplacements nécessitant une révision et une correction. Un hôte n'est réellement affecté que lorsque la version NGINX vulnérable et le motif de configuration risqué sont tous deux présents.
Exécuter la suite de tests :
uv run python -m unittest discover -s tests -v
Exécuter la suite de tests Go :
cd go
go test ./...
Exécuter la vérification syntaxique :
uv run python -m py_compile scan.py
Exécuter contre la configuration POC fournie :
uv run ./scan.py CVE-2026-42945-POC/env/nginx.conf
Sortie attendue :
/path/absolu/vers/CVE-2026-42945-POC/env/nginx.conf:39 -> location ~ ^/api/(.*)$