
Ein Python-Skript, das überprüft, ob ein Webserver anfällig für MadeYouReset (CVE-2025-8671) ist – einen HTTP/2-DoS-Angriff, der Rapid-Reset-Maßnahmen umgeht, indem er den Server dazu bringt, seine eigenen Streams zurückzusetzen. Es testet das Ziel, indem es einen manipulierten WINDOW_UPDATE-Frame sendet und prüft, ob der Server antwortet.
Ein leichtgewichtiges Python-Skript, um zu erkennen, ob ein Webserver potenziell anfällig für die MadeYouReset HTTP/2-Denial-of-Service-Sicherheitslücke ist – bekannt als CVE-2025-8671 (CVSS 7.5 Hoch).
MadeYouReset ist eine HTTP/2-DoS-Sicherheitslücke, die im August 2025 von Forschern der Tel Aviv University und Imperva veröffentlicht wurde. Sie nutzt eine Inkonsistenz zwischen der HTTP/2-Stream-Accounting und der internen Backend-Verarbeitung in vielen gängigen Serverimplementierungen aus.
Der Angriff sendet absichtlich falsch formatierte HTTP/2-Steuerframes (z. B. ein WINDOW_UPDATE mit increment=0, was gemäß RFC 9113 §6.9.1 ungültig ist), um den Server selbst zur Ausgabe von RST_STREAM-Frames zu zwingen. Da der Server den Stream auf Protokollebene als geschlossen betrachtet, während er die Anfrage im Backend weiterverarbeitet, kann ein Angreifer das MAX_CONCURRENT_STREAMS-Limit umgehen und Serverressourcen erschöpfen – ohne ein einziges clientseitiges RST_STREAM zu senden.
Dadurch handelt es sich um eine Umgehung der Schutzmaßnahmen, die für den früheren -Angriff (CVE-2023-44487) eingeführt wurden.
Bekannte betroffene Software:
| Produkt | CVE |
|---|---|
| Apache Tomcat 9.x / 10.x / 11.x | CVE-2025-48989 |
| Netty < 4.1.124.Final / 4.2.4.Final | CVE-2025-55163 |
| F5 BIG-IP | CVE-2025-54500 |
| IBM WebSphere Application Server Liberty | CVE-2025-36047 |
| Varnish, Fastly, Jetty, SUSE, Wind River | CVE-2025-8671 |
h2 über ALPN durch.SETTINGS-Frame.HEADERS-Frame.WINDOW_UPDATE-Frame (increment=0) auf dem offenen Stream.RST_STREAM auf dem Stream (kein GOAWAY) → wahrscheinlich anfällig.GOAWAY → korrektes RFC-Verhalten; wahrscheinlich gepatcht.Das Skript führt eine rein lesende passive Prüfung durch – es versucht nicht, den Server auszunutzen oder zu belasten.
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# Kein pip install nötig – keine Abhängigkeiten
python3 main.py <url> [OPTIONEN]
| Flag | Standard | Beschreibung |
|---|---|---|
--timeout SEKUNDEN | 8 | Socket-Read-Timeout |
--no-color | aus | ANSI-Farbausgabe deaktivieren |
# Einfacher Check
python3 main.py https://example.com
# Benutzerdefinierter Port und längeres Timeout
python3 main.py https://example.com:8443 --timeout 15
# CI-freundlich (keine Farbe)
python3 main.py https://example.com --no-color
| Code | Bedeutung |
|---|---|
0 | Nicht anfällig – Server antwortete mit GOAWAY (korrektes RFC-Verhalten) |
1 | Wahrscheinlich anfällig – Server sandte RST_STREAM auf dem Stream, aber kein GOAWAY |
2 | Nicht eindeutig – kein HTTP/2, Verbindungsfehler oder mehrdeutige Antwort |
Die Exit-Codes erleichtern die Integration in CI-Pipelines oder Automatisierungsskripte.
========================================================
MadeYouReset (CVE-2025-8671) Checker
========================================================
Target : https://vulnerable-server.example.com
Host : vulnerable-server.example.com:443
Path : /
Timeout : 8.0s
────────────────────────────────────────────────────────
[*] Connecting to vulnerable-server.example.com:443 ...
✓ TCP connection established
[*] Performing TLS handshake (ALPN: h2, http/1.1) ...
→ Negotiated protocol : h2
✓ HTTP/2 (h2) negotiated via ALPN
[*] Sending HTTP/2 client preface ...
✓ Preface + SETTINGS sent
[*] Waiting for server SETTINGS ...
← Frame type=0x04 stream=0 length=18
✓ Server SETTINGS received
✓ Sent SETTINGS ACK
[*] Opening HTTP/2 stream 1 (HEADERS frame) ...
✓ HEADERS sent on stream 1
[*] Sending malformed WINDOW_UPDATE (increment=0) on stream 1 ...
RFC 9113 §6.9.1: increment=0 is a stream-level FLOW_CONTROL_ERROR
✓ Malformed WINDOW_UPDATE sent
[*] Analysing server response (timeout=8.0s) ...
← RST_STREAM stream=1 error_code=0x00000003
────────────────────────────────────────────────────────
RESULT
────────────────────────────────────────────────────────
[LIKELY VULNERABLE]
Server responded with RST_STREAM on stream 1
(error_code=0x00000003) but did NOT send GOAWAY.
Recommended actions:
• Patch: Apache Tomcat ≥10.1.44/11.0.10/9.0.108,
Netty ≥4.1.124.Final / 4.2.4.Final,
and other vendor advisories for CVE-2025-8671.
• Interim: disable HTTP/2 or deploy a WAF/proxy that
validates HTTP/2 frames before forwarding.
========================================================
| Maßnahme | Details |
|---|---|
| Patchen | Wenden Sie das neueste Hersteller-Update für Ihren HTTP/2-Stack an (siehe Tabelle oben) |
| HTTP/2 deaktivieren | Fallen Sie als temporären Schutz auf HTTP/1.1 zurück |
| WAF / Proxy | Setzen Sie einen Reverse-Proxy oder eine WAF ein, die HTTP/2-Frames am Edge validiert |
| Ratenbegrenzung | Erzwingen Sie clientseitige Verbindungslimits und RST_STREAM-Ratenbegrenzungen |
Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Forschung bestimmt.
Führen Sie dieses Skript nicht gegen Systeme aus, die Sie nicht besitzen oder für die Sie keine ausdrückliche schriftliche Erlaubnis zum Testen haben.
Die Autoren übernehmen keine Haftung für Missbrauch.