MadeYouReset Checker
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).
Hintergrund
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 Rapid-Reset-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 |
Funktionsweise des Checkers
- Öffnet eine TCP-Verbindung zum Zielhost.
- Führt einen TLS-Handshake mit Aushandlung von
h2 über ALPN durch.
- Sendet das HTTP/2-Client-Präambel und einen
SETTINGS-Frame.
- Öffnet einen Request-Stream mit einem
HEADERS-Frame.
- Sendet einen fehlerhaften
WINDOW_UPDATE-Frame (increment=0) auf dem offenen Stream.
- Analysiert die Serverantwort:
RST_STREAM auf dem Stream (kein GOAWAY) → wahrscheinlich anfällig.
GOAWAY → korrektes RFC-Verhalten; wahrscheinlich gepatcht.
- Keine Antwort / nicht eindeutig → manuelle Nachverfolgung empfohlen.
Das Skript führt eine rein lesende passive Prüfung durch – es versucht nicht, den Server auszunutzen oder zu belasten.
Voraussetzungen
- Python 3.7+
- Keine externen Pakete – nur reine Standardbibliothek.
Installation
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# Kein pip install nötig – keine Abhängigkeiten
Verwendung
python3 main.py <url> [OPTIONEN]
Optionen
| Flag | Standard | Beschreibung |
|---|
--timeout SEKUNDEN | 8 | Socket-Read-Timeout |
--no-color | aus | ANSI-Farbausgabe deaktivieren |
Beispiele
# 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
Exit-Codes
Die Exit-Codes erleichtern die Integration in CI-Pipelines oder Automatisierungsskripte.
Beispielausgabe
========================================================
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.
========================================================
Abhilfe
Haftungsausschluss
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.
Referenzen