
🛡️ Script pour tester NGINX CVE-2026-42945
Les organisations utilisant NGINX Open Source, NGINX Plus ou des ingress/contrôleurs basés sur NGINX doivent vérifier si elles sont affectées par CVE-2026-42945 et appliquer le correctif ou reconfigurer avant que des tentatives d’exploitation n’atteignent les périphériques de production.
Ce dépôt fournit un scanneur en lecture seule, sans exploitation, destiné à un usage défensif autorisé sur les systèmes que vous possédez ou que vous êtes autorisé à tester.
| Élément | Détail |
|---|
| CVE | CVE-2026-42945 |
| Nom | NGINX Rift |
| Composant | ngx_http_rewrite_module (dépassement de tampon du tas) |
| Versions affectées | NGINX Open Source 0.6.27 à 1.30.0 |
| Versions corrigées | 1.30.1, 1.31.0 (+ rétroportages des éditeurs) |
| CVSS | 9.2 (Critique) |
L’exploitation nécessite une configuration rewrite spécifique :
rewrite utilisant une capture PCRE non nommée ($1, $2, …) dans le remplacement?rewrite, if ou set dans le même bloc server/location utilise cette captureImpact :
| Vérification | Méthode |
|---|---|
| Version | nginx -v local ou en-tête Server passif |
| Déclencheur de configuration | Analyse heuristique de nginx -T ou d’un fichier de configuration |
| ASLR (Linux) | /proc/sys/kernel/randomize_va_space |
| Recommandations | Étapes de correction priorisées |
Il n’envoie pas de requêtes d’exploitation conçues ni ne tente de planter les workers.
cd nginx-cve-2026-42945
chmod +x scan_nginx_rift.py
# Meilleure pratique : exécuter sur chaque hôte NGINX avec sudo
sudo python3 scan_nginx_rift.py --local
# Ou scanner un vidage de configuration complet
sudo nginx -T 2>&1 | tee /tmp/nginx-full.txt
python3 scan_nginx_rift.py --local --config /tmp/nginx-full.txt
# Vérification de bannière distante passive (version uniquement)
python3 scan_nginx_rift.py --url https://votre-site.exemple/
# JSON pour automatisation
python3 scan_nginx_rift.py --local --json --fail-on high
Code de sortie 1 lorsque le risque est ÉLEVÉ ou CRITIQUE (utilisez --fail-on pour paramétrer les seuils CI).
| Risque | Signification |
|---|---|
| CRITIQUE | Version vulnérable + motif de réécriture correspondant à un déclencheur connu |
| ÉLEVÉ | Version vulnérable et réécritures suspectes, ou version inconnue avec déclencheur probable |
| MOYEN | Version vulnérable, aucun déclencheur trouvé dans la configuration scannée (corriger quand même) |
| FAIBLE | Version corrigée mais motifs de réécriture risqués subsistent |
| INFO | Version corrigée et aucun motif de déclencheur dans la configuration scannée |
Mettez à jour vers NGINX 1.30.1 / 1.31.0+ ou le paquet de sécurité de votre OS/éditeur.
Redémarrez les workers après la mise à jour (systemctl restart nginx), pas seulement un reload.
Auditez la configuration complète : sudo nginx -T et recherchez les règles rewrite avec $1/$2 et ?.
Atténuation temporaire : utilisez des captures nommées au lieu de $1, $2 :
# Vulnerable pattern (simplified)
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_path $1;
# Safer pattern
rewrite ^/api/(?<path>.*)$ /internal?migrated=true;
set $original_path $path;
Confirmez que l’ASLR reste activé sur Linux (randomize_va_space=2).
Examinez les ingress Kubernetes, les chartes Helm et les configurations générées — pas seulement /etc/nginx/nginx.conf.
Utilisez uniquement sur des infrastructures que vous êtes autorisé à évaluer. Un scan non autorisé peut violer la politique ou la loi.