
Un script en Python que verifica si un servidor web es vulnerable a MadeYouReset (CVE-2025-8671) — un ataque de denegación de servicio (DoS) HTTP/2 que elude las mitigaciones de Rapid Reset engañando al servidor para que restablezca sus propios flujos. Sonda el objetivo enviando un marco WINDOW_UPDATE malformado e inspecciona si el servidor responde.
Un script ligero en Python para detectar si un servidor web es potencialmente vulnerable a la vulnerabilidad de denegación de servicio HTTP/2 MadeYouReset — registrada como CVE-2025-8671 (CVSS 7.5 Alta).
MadeYouReset es una vulnerabilidad DoS HTTP/2 divulgada en agosto de 2025 por investigadores de la Universidad de Tel Aviv e Imperva. Explota un desajuste entre la contabilidad de flujos HTTP/2 y el procesamiento interno del backend en muchas implementaciones de servidores populares.
El ataque envía tramas de control HTTP/2 deliberadamente malformadas (por ejemplo, un WINDOW_UPDATE con increment=0, lo cual es ilegal según RFC 9113 §6.9.1) para forzar al propio servidor a emitir tramas RST_STREAM. Debido a que el servidor trata el flujo como cerrado a nivel de protocolo mientras continúa procesando la petición en el backend, un atacante puede eludir el límite MAX_CONCURRENT_STREAMS y agotar los recursos del servidor — sin enviar un solo RST_STREAM del lado del cliente.
Esto lo convierte en una evasión de las mitigaciones introducidas para el ataque anterior (CVE-2023-44487).
Software afectado conocido:
| Producto | 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 mediante ALPN.SETTINGS.HEADERS.WINDOW_UPDATE malformada (increment=0) en el flujo abierto.RST_STREAM en el flujo (sin GOAWAY) → probablemente vulnerable.GOAWAY → comportamiento RFC correcto; probablemente parcheado.El script realiza una sonda pasiva de sólo lectura — no intenta explotar ni someter a prueba de esfuerzo al servidor.
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# No pip install needed — no dependencies
python3 main.py <url> [OPCIONES]
| Indicador | Por defecto | Descripción |
|---|---|---|
--timeout SEGUNDOS | 8 | Tiempo de espera de lectura del socket |
--no-color | desactivado | Deshabilitar salida de color ANSI |
# Basic check
python3 main.py https://example.com
# Custom port and longer timeout
python3 main.py https://example.com:8443 --timeout 15
# CI-friendly (no colour)
python3 main.py https://example.com --no-color
| Código | Significado |
|---|---|
0 | No vulnerable — el servidor respondió con GOAWAY (comportamiento RFC correcto) |
1 | Probablemente vulnerable — el servidor envió RST_STREAM en el flujo pero no GOAWAY |
2 | No concluyente — sin HTTP/2, error de conexión o respuesta ambigua |
Los códigos de salida facilitan la integración en tuberías CI o scripts de automatización.
========================================================
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.
========================================================
| Acción | Detalles |
|---|---|
| Parche | Aplicar la última actualización del proveedor para su pila HTTP/2 (ver tabla anterior) |
| Deshabilitar HTTP/2 | Volver a HTTP/1.1 como mitigación temporal |
| WAF / Proxy | Desplegar un proxy inverso o WAF que valide las tramas HTTP/2 en el borde |
| Limitación de velocidad | Imponer límites de conexión por cliente y límites de velocidad de RST_STREAM |
Esta herramienta está destinada únicamente a pruebas de seguridad autorizadas e investigación.
No ejecute este script contra sistemas que no posea o para los que no tenga permiso explícito por escrito.
Los autores no asumen ninguna responsabilidad por su uso indebido.