
Nginx Rewrite CVE Scan(CVE-2026-42945 nginx-rift CVE-2026-9256)
Sprache: Chinesisch | English
Dies ist ein leichtgewichtiges Skript zur Überprüfung von NGINX-Konfigurationen auf Risikomuster der CVEs CVE-2026-42945 (NGINX Rift) und CVE-2026-9256.
Die Schwachstelle wurde von depthfirst im Artikel NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability offengelegt. Laut dem Artikel und den Beschreibungen von F5/NVD hängt das Risiko mit bestimmten Konfigurationskombinationen von ngx_http_rewrite_module zusammen: Im selben Konfigurationskontext enthält der Ersetzungsstring von rewrite ein ?, und nachfolgende rewrite-, if- oder set-Anweisungen referenzieren unbenannte PCRE-Erfassungsvariablen wie $1, $2.
Dieses Tool prüft hauptsächlich die folgenden risikoreichen Muster in NGINX-Konfigurationsdateien.
Eine risikoreiche Sequenz wie die folgende:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
Der Risikopunkt liegt nicht in einzelnen rewrite- oder set-Anweisungen, sondern in deren Ausführungsreihenfolge im selben Kontext:
rewrite verwendet reguläre Erfassungsgruppen und der Ersetzungsstring enthält ?rewrite-, if- oder set-Anweisungen verwenden unbenannte Erfassungsvariablen wie $1, $2Diese Kombination kann eine Inkonsistenz zwischen Längenberechnung und tatsächlicher Kopierphase der NGINX-Script-Engine auslösen, was zu einem Heap-Pufferüberlauf führt.
Ein risikoreicher rewrite wie der folgende:
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
Risikobedingungen:
$1 in ^/((.*))$ $2$1$2Beachten Sie, dass break das Risiko nicht ausschließt; solange mehrere überlappende Erfassungsgruppen im Parametertteil nach ? erscheinen, bleibt es im Arguments-Kontext. Ein normaler URI-Rewrite wie /$1$2 break gehört nicht zu den Auslösern dieser CVE.
Wenn das Skript dieses Muster erkennt, wird es explizit als CVE-2026-9256 markiert.
Der von depthfirst aufgeführte betroffene Bereich umfasst:
Informationen zu tatsächlichen Patch-Versionen und Produktmatrix entnehmen Sie bitte den offiziellen F5-Ankündigungen oder den Sicherheitsbulletins der Distributionen. Selbst wenn die Version im betroffenen Bereich liegt, ist normalerweise das Vorhandensein einer bestimmten rewrite-Konfigurationssequenz erforderlich, um die Schwachstelle auszulösen.
Das Skript gibt sowohl die aktuelle NGINX-Version als auch die Ergebnisse der Konfigurationsüberprüfung aus:
0.6.27 - 1.30.1 und Konfiguration erfüllt Risikosequenz: NGINX aktualisieren oder Konfiguration anpassen.0.6.27 - 1.30.1 aber Konfiguration erfüllt keine Risikosequenz: Update empfohlen, aber der Scanner hat keine auslösende Konfiguration gefunden.Direktes Scannen der vollständigen NGINX-Konfiguration auf dem aktuellen Rechner:
python3 scan_rift.py
Das Skript führt aus:
nginx -T
Wenn der aktuelle Benutzer nicht berechtigt ist, die vollständige Konfiguration zu lesen, verwenden Sie sudo:
sudo python3 scan_rift.py
Sie können auch eine bereits exportierte Konfigurationsdatei scannen:
python3 scan_rift.py /path/to/nginx-full.conf
Beispiel: Konfiguration exportieren und dann scannen:
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
Wenn keine Risikosequenz gefunden wurde:
--- 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.
Wenn eine verdächtige Sequenz gefunden wurde:
--- 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.
Wenn das verdächtige Muster CVE-2026-9256 gefunden wurde:
--- 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.
Nach Erkennung sollte manuell überprüft werden, ob der entsprechende Konfigurationskontext von externen Anfragen erreicht werden kann, und dann NGINX aktualisiert oder die Konfiguration angepasst werden.
rewrite/set-Kombinationen in Kontexten wie location, server, if usw.$1, $2 nach einem rewrite mit ?.^/((.*))$ mit ?$1$2.break nicht als Umgehung für CVE-2026-9256; /?$1$2 break wird dennoch ausgelöst.Dieses Skript ist ein statisches Konfigurations-Scan-Tool, das darauf abzielt, schnell risikoreiche Muster zu erkennen. Es ist kein Exploit-Validierungstool.