MadeYouReset Checker
Uno script Python leggero per rilevare se un server web è potenzialmente vulnerabile alla vulnerabilità denial-of-service HTTP/2 MadeYouReset — tracciata come CVE-2025-8671 (CVSS 7.5 Alta).
Contesto
MadeYouReset è una vulnerabilità DoS HTTP/2 divulgata nell'agosto 2025 da ricercatori dell'Università di Tel Aviv e Imperva. Sfrutta una discrepanza tra la contabilità dei flussi HTTP/2 e l'elaborazione interna del backend in molte implementazioni di server popolari.
L'attacco invia frame di controllo HTTP/2 deliberatamente malformati (ad es. un WINDOW_UPDATE con increment=0, che è illegale secondo RFC 9113 §6.9.1) per costringere il server stesso a emettere frame RST_STREAM. Poiché il server considera il flusso chiuso a livello di protocollo mentre continua a elaborare la richiesta nel backend, un attaccante può bypassare il limite MAX_CONCURRENT_STREAMS ed esaurire le risorse del server — senza inviare un singolo RST_STREAM lato client.
Questo lo rende un bypass delle mitigazioni introdotte per il precedente attacco Rapid Reset (CVE-2023-44487).
Software noto vulnerabile:
| Prodotto | CVE |
|---|
| Apache Tomcat 9.x / 10.x / 11.x | CVE-2025-48989 |
| Netty < 4.1.124.Final / 4.2.4.Final | CVE-2025-55163 |
Come Funziona il Checker
- Apre una connessione TCP verso l'host target.
- Esegue un handshake TLS negoziando
h2 tramite ALPN.
- Invia il prefisso client HTTP/2 e un frame
SETTINGS.
- Apre un flusso di richiesta con un frame
HEADERS.
- Invia un frame
WINDOW_UPDATE malformato (increment=0) sul flusso aperto.
- Analizza la risposta del server:
RST_STREAM sul flusso (senza GOAWAY) → probabile vulnerabile.
GOAWAY → comportamento RFC corretto; probabile patchato.
- Nessuna risposta / inconcludente → follow-up manuale consigliato.
Lo script esegue un sondaggio passivo in sola lettura — non tenta di sfruttare o stressare il server.
Requisiti
- Python 3.7+
- Nessun pacchetto esterno — solo libreria standard pura.
Installazione
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# Nessun pip install necessario — nessuna dipendenza
Utilizzo
python3 main.py <url> [OPZIONI]
Opzioni
| Flag | Default | Descrizione |
|---|
--timeout SECOND | 8 | Timeout di lettura socket |
--no-color | off | Disabilita output colore ANSI |
Esempi
# Controllo base
python3 main.py https://example.com
# Porta personalizzata e timeout più lungo
python3 main.py https://example.com:8443 --timeout 15
# Adatto a CI (senza colore)
python3 main.py https://example.com --no-color
Codici di Uscita
I codici di uscita rendono semplice l'integrazione in pipeline CI o script di automazione.
Output di Esempio
========================================================
MadeYouReset (CVE-2025-8671) Checker
========================================================
Target : https://vulnerable-server.example.com
Host : vulnerable-server.example.com:443
Path : /
Timeout : 8.0s
────────────────────────────────────────────────────────
[*] Connessione a vulnerable-server.example.com:443 ...
✓ Connessione TCP stabilita
[*] Esecuzione handshake TLS (ALPN: h2, http/1.1) ...
→ Protocollo negoziato : h2
✓ HTTP/2 (h2) negoziato tramite ALPN
[*] Invio prefisso client HTTP/2 ...
✓ Prefisso + SETTINGS inviati
[*] Attesa SETTINGS del server ...
← Frame type=0x04 stream=0 length=18
✓ SETTINGS del server ricevuti
✓ Inviato SETTINGS ACK
[*] Apertura flusso HTTP/2 1 (frame HEADERS) ...
✓ HEADERS inviati sul flusso 1
[*] Invio WINDOW_UPDATE malformato (increment=0) sul flusso 1 ...
RFC 9113 §6.9.1: increment=0 è un FLOW_CONTROL_ERROR a livello di flusso
✓ WINDOW_UPDATE malformato inviato
[*] Analisi risposta del server (timeout=8.0s) ...
← RST_STREAM stream=1 error_code=0x00000003
────────────────────────────────────────────────────────
RISULTATO
────────────────────────────────────────────────────────
[PROBABILE VULNERABILE]
Il server ha risposto con RST_STREAM sul flusso 1
(error_code=0x00000003) ma NON ha inviato GOAWAY.
Azioni consigliate:
• Patch: Apache Tomcat ≥10.1.44/11.0.10/9.0.108,
Netty ≥4.1.124.Final / 4.2.4.Final,
e altri avvisi del vendor per CVE-2025-8671.
• Temporaneo: disabilitare HTTP/2 o implementare un WAF/proxy che
convalidi i frame HTTP/2 prima di inoltrarli.
========================================================
Rimedio
Disclaimer
Questo strumento è destinato esclusivamente a test di sicurezza autorizzati e ricerca.
Non eseguire questo script contro sistemi di cui non possiedi o per i quali non hai esplicita autorizzazione scritta al test.
Gli autori non si assumono alcuna responsabilità per uso improprio.
Riferimenti