
Nicht-destruktiver Schwachstellen-Scanner für NGINX HTTP/3 (ngx_http_v3_module). Er führt NUR eine sichere Sondierung durch: öffnet eine HTTP/3-Verbindung (QUIC), sendet eine einzelne HEAD-Anfrage und untersucht den `Server`-Antwortheader. Er versucht NIE, einen QPACK-Encoder-Stream erneut zu öffnen oder den Use-after-Free auszulösen.
Nicht-destruktiver Massen-Scanner für den NGINX HTTP/3 (QUIC) Use-after-Free
Ermitteln Sie, welche Ihrer Hosts exponiert sind – ohne den Fehler jemals auszulösen.
Dieses Tool ist ausschließlich für autorisierte Sicherheitstests bestimmt – für Ihre eigene Infrastruktur oder Systeme, für die Sie eine ausdrückliche schriftliche Genehmigung zur Prüfung haben. Es führt einen schreibgeschützten Fingerprint durch und exploitiert die Schwachstelle nicht. Sie sind dafür verantwortlich, im Rahmen der Genehmigung zu bleiben und geltendes Recht sowie die Grundsätze der verantwortungsvollen Offenlegung (Responsible Disclosure) einzuhalten. Die Autoren übernehmen keine Haftung für Missbrauch.
CVE-2026-42530 ist ein Use-after-Free (CWE-416) im ngx_http_v3_module von NGINX. Wenn NGINX für die Auslieferung von HTTP/3 konfiguriert ist, kann ein entfernter, nicht authentifizierter Angreifer einen QPACK-Encoder-Stream innerhalb einer manipulierten HTTP/3-Sitzung erneut öffnen, wodurch ein Worker-Prozess auf freigegebenen Speicher zugreift. Die unmittelbare Auswirkung ist ein Worker-Absturz / -Neustart (Denial of Service); auf Hosts, auf denen ASLR deaktiviert ist oder umgangen werden kann, kann dies zu Remote-Code-Ausführung eskalieren.
Kernpunkt: Der Fehler ist nur erreichbar, wenn HTTP/3 (QUIC) aktiviert ist – standardmäßig ist es nicht aktiv. Hosts, die nur HTTP/1.1 oder HTTP/2 über TCP ausliefern, sind von diesem spezifischen Vektor nicht betroffen.
| Zweig | Status |
|---|---|
| NGINX Open Source 1.31.0 – 1.31.1 | ❌ Anfällig |
| NGINX Open Source 1.31.2+ | ✅ Behoben |
| NGINX Plus | Herstellerhinweis (Advisory) anwenden (R36 P6 / 37.0.2.1) |
Er öffnet eine echte HTTP/3-Verbindung, sendet eine einzelne HEAD /-Anfrage und liest den Server-Header zurück. Daraus klassifiziert er jedes Ziel – und entscheidend ist, dass er erreichbare, aber versionsversteckte Hosts als manuelle Überprüfung erforderlich behandelt, statt sie fälschlich als „sauber“ einzustufen, denn die Erreichbarkeit von QUIC ist die Voraussetzung für die CVE.
Erfordert Python 3.11+ (verwendet asyncio.timeout).
git clone https://github.com/renzi25031469/CVE-2026-42530-scanner.git
cd CVE-2026-42530-scanner
pip install aioquic
Tipp: Verwenden Sie eine virtuelle Umgebung –
python3 -m venv .venv && source .venv/bin/activate.
# Einzelner Host
python3 cve-2026-42530-scanner.py example.com
# Viele Hosts aus einer Datei, 100 parallel, CSV speichern
python3 cve-2026-42530-scanner.py -f targets.txt -c 100 --csv results.csv
# Ziele von stdin übernehmen und JSON exportieren
cat hosts.txt | python3 cve-2026-42530-scanner.py -f - --json results.json
# Benutzerdefinierter Port und Timeout
python3 cve-2026-42530-scanner.py target.internal -p 8443 -t 5
Ein Host pro Zeile. Ports, Schemata, Pfade und Kommentare werden automatisch verarbeitet:
# production edge
edge01.example.com
edge02.example.com:8443
https://api.example.com/
# staging
10.0.5.21
[*] CVE-2026-42530 safe-check — 4 target(s), concurrency=100, timeout=10s
======================================================================
CVE-2026-42530 SAFE-CHECK RESULTS
======================================================================
[VULNERABLE ] edge01.example.com:443 (Server: nginx/1.31.1)
-> Vulnerable NGINX version over HTTP/3. Upgrade to nginx/1.31.2 or later.
[HTTP3_VERSION_HIDDEN ] api.example.com:443
-> HTTP/3 reachable but Server header is masked. Verify the NGINX version manually.
[LIKELY_PATCHED ] edge02.example.com:8443 (Server: nginx/1.31.2)
[NO_HTTP3 ] 10.0.5.21:443
----------------------------------------------------------------------
Summary: VULNERABLE=1 | HTTP3_VERSION_HIDDEN=1 | LIKELY_PATCHED=1 | NO_HTTP3=1
[!] 1 host(s) appear VULNERABLE. Mitigation: upgrade to nginx/1.31.2 or later,
or remove 'quic' from all 'listen' directives.
======================================================================
quic aus jeder listen-Direktive entfernen und http3 on; streichen, und laden Sie dann NGINX neu. Dadurch wird der anfällige Codepfad vollständig entfernt./proc/sys/kernel/randomize_va_space = 2). Betrachten Sie dies als Härtungsschicht, nicht als Ersatz für das Patchen.aioquic ist asynchron, daher verwendet dieser Scanner ein asyncio.Semaphore anstelle von OS-Threads. Für netzwerk-I/O-gebundene Arbeit – hunderte QUIC-Handshakes, die auf der Leitung warten – skaliert eine einzelne Ereignisschleife mit weit weniger Overhead als ein Thread-Pool und bietet dabei dasselbe Verhalten „viele Hosts gleichzeitig scannen“. Passen Sie die Begrenzung mit -c an.
Dank an die Forscher, die in der ursprünglichen Offenlegung genannt werden, für ihre koordinierte Meldung.
Veröffentlicht unter der MIT-Lizenz. Siehe LICENSE.
Gebaut für Verteidiger und autorisierte Red Teams. Scannen Sie verantwortungsbewusst. 🔐
| CVE | CVE-2026-42530 |
| Komponente | ngx_http_v3_module (HTTP/3 / QUIC) |
| Klasse | Use-After-Free (CWE-416) |
| CVSS | 9.2 (v4) · 8.1 (v3.1) |
| Auswirkung | Worker-Absturz / DoS, mögliche RCE ohne ASLR |
| Vektor | Netzwerk, nicht authentifiziert, keine Benutzerinteraktion |
| Status | Bedeutung |
|---|
VULNERABLE | NGINX 1.31.0 / 1.31.1 über HTTP/3 ausgeliefert |
HTTP3_VERSION_HIDDEN | HTTP/3 erreichbar, aber Server ist maskiert (server_tokens off) – Version manuell prüfen |
LIKELY_PATCHED | NGINX über HTTP/3, Version außerhalb des betroffenen Bereichs |
NOT_NGINX | HTTP/3 erreichbar, aber der Server ist kein NGINX |
NO_HTTP3 | Kein HTTP/3-/QUIC-Listener erreichbar (über diesen Vektor nicht exponiert) |
ERROR | Sonde ist aus einem anderen Grund fehlgeschlagen |
| Flag | Beschreibung | Standard |
|---|
host | Einzelnes Ziel (positional) | — |
-f, --file | Zieldatei (- = stdin) | — |
-p, --port | Standard-QUIC/UDP-Port | 443 |
-t, --timeout | Timeout pro Host (Sekunden) | 10 |
-c, --concurrency | Maximale gleichzeitige Scans | 50 |
--csv | Ergebnisse als CSV schreiben | — |
--json | Ergebnisse als JSON schreiben | — |