
Analyse CVE de réécriture Nginx (CVE-2026-42945 nginx-rift CVE-2026-9256)
Langue : Chinois | English
Il s'agit d'un script léger pour vérifier si la configuration NGINX présente les motifs de risque CVE-2026-42945 (NGINX Rift) et CVE-2026-9256.
Cette vulnérabilité a été divulguée par depthfirst dans l'article NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability. Selon l'article et la description F5/NVD, le risque est lié à certaines combinaisons de configuration du ngx_http_rewrite_module : dans le même contexte de configuration, la chaîne de remplacement de rewrite contient ?, et une rewrite, un if ou un set ultérieur référence des variables de capture PCRE non nommées, par exemple $1, $2.
Cet outil vérifie principalement si le fichier de configuration NGINX contient les motifs à haut risque suivants.
Séquence à haut risque similaire à :
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
Le point de risque n'est pas un rewrite ou un set isolé, mais l'ordre d'exécution dans le même contexte :
rewrite utilise une capture regex et la chaîne de remplacement contient ?rewrite, un if ou un set ultérieur utilise des variables de capture non nommées telles que $1, $2Cette combinaison peut provoquer une incohérence d'état entre le calcul de longueur et la phase de copie réelle dans le moteur de script NGINX, entraînant un débordement de tas.
rewrite à haut risque similaire à :
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
Conditions de risque :
^/((.*))$ où $1 contient $2$1$2Notez que break n'exclut pas le risque ; dès que plusieurs groupes de capture qui se chevauchent apparaissent dans la partie arguments après ?, ils appartiennent toujours au contexte arguments. Un rewrite URI simple comme /$1$2 break ne déclenche pas cette CVE.
Lorsque le script détecte ce motif, il le marque explicitement comme CVE-2026-9256.
Les versions impactées listées dans l'article de depthfirst incluent :
Les versions corrigées réelles et la matrice produit doivent être confirmées via les annonces officielles de F5 ou les bulletins de sécurité des distributions. Même si la version se trouve dans la plage impactée, une séquence de configuration rewrite spécifique est généralement nécessaire pour déclencher la vulnérabilité.
Le script affiche simultanément la version actuelle de NGINX et les résultats du scan de configuration :
0.6.27 - 1.30.1 et configuration correspondant à la séquence à risque : impératif de mettre à jour NGINX ou d'ajuster la configuration.0.6.27 - 1.30.1 mais configuration ne correspondant pas à la séquence à risque : mise à jour recommandée, mais cet outil n'a pas trouvé de condition déclenchante dans la configuration.Scanner directement la configuration NGINX complète de la machine actuelle :
python3 scan_rift.py
Le script exécute :
nginx -T
Si l'utilisateur actuel n'a pas les droits pour lire la configuration complète, utilisez sudo :
sudo python3 scan_rift.py
Vous pouvez également scanner un fichier de configuration déjà exporté :
python3 scan_rift.py /path/to/nginx-full.conf
Par exemple, exportez la configuration puis scannez :
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
Lorsqu'aucune séquence à risque n'est détectée :
--- 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.
Lorsqu'une séquence suspecte est détectée :
--- 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.
Lorsqu'un motif suspect CVE-2026-9256 est détecté :
--- 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.
Après détection, il convient de confirmer manuellement si ce contexte de configuration peut être atteint par des requêtes externes, et de mettre à jour NGINX ou d'ajuster la configuration dès que possible.
rewrite / set dans les contextes location, server, if, etc.$1, $2, etc.) après un rewrite contenant ?.^/((.*))$ avec ?$1$2.break comme une échappatoire pour CVE-2026-9256 ; /?$1$2 break reste vulnérable.Ce script est un outil de scan statique de configuration. Son objectif est de détecter rapidement les motifs à haut risque, il ne constitue pas une validation d'exploitation de vulnérabilité.