
Um script Python que verifica se um servidor web é vulnerável ao MadeYouReset (CVE-2025-8671) — um ataque DoS HTTP/2 que contorna as mitigações do Rapid Reset ao enganar o servidor para que este redefina seus próprios streams. Ele sonda o alvo enviando um frame WINDOW_UPDATE malformado e inspeciona se o servidor responde.
Um script Python leve para detectar se um servidor web está potencialmente vulnerável à vulnerabilidade de negação de serviço HTTP/2 MadeYouReset — rastreada como CVE-2025-8671 (CVSS 7.5 Alta).
MadeYouReset é uma vulnerabilidade DoS HTTP/2 divulgada em agosto de 2025 por pesquisadores da Universidade de Tel Aviv e Imperva.
Ela explora uma incompatibilidade entre a contabilização de streams HTTP/2 e o processamento interno do backend em muitas implementações populares de servidores.
O ataque envia quadros de controle HTTP/2 deliberadamente malformados (por exemplo, um WINDOW_UPDATE com increment=0, que é ilegal de acordo com RFC 9113 §6.9.1) para coagir o próprio servidor a emitir quadros RST_STREAM.
Como o servidor trata o stream como fechado no nível do protocolo enquanto continua a processar a requisição no backend, um atacante pode contornar o limite MAX_CONCURRENT_STREAMS e esgotar os recursos do servidor — sem enviar um único RST_STREAM do lado do cliente.
Isso torna um desvio das mitigações introduzidas para o ataque anterior (CVE-2023-44487).
Software afetado conhecido:
| Produto | 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 via ALPN.SETTINGS.HEADERS.WINDOW_UPDATE malformado (increment=0) no stream aberto.RST_STREAM no stream (sem GOAWAY) → provavelmente vulnerável.GOAWAY → comportamento RFC correto; provavelmente corrigido.O script realiza uma sonda passiva somente leitura — ele não tenta explorar ou testar a carga do servidor.
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# No pip install needed — no dependencies
python3 main.py <url> [OPTIONS]
| Flag | Padrão | Descrição |
|---|---|---|
--timeout SECONDS | 8 | Tempo limite de leitura do socket |
--no-color | off | Desabilitar saída colorida 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 | Não vulnerável — servidor respondeu com GOAWAY (comportamento RFC correto) |
1 | Provavelmente vulnerável — servidor enviou RST_STREAM no stream mas sem GOAWAY |
2 | Inconclusivo — sem HTTP/2, erro de conexão, ou resposta ambígua |
Os códigos de saída facilitam a integração em pipelines de CI ou scripts de automação.
========================================================
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.
========================================================
| Ação | Detalhes |
|---|---|
| Patch | Aplique a atualização mais recente do fornecedor para sua pilha HTTP/2 (veja tabela acima) |
| Desabilitar HTTP/2 | Recorra ao HTTP/1.1 como mitigação temporária |
| WAF / Proxy | Implante um proxy reverso ou WAF que valide quadros HTTP/2 na borda |
| Limitação de taxa | Imponha limites de conexão por cliente e limites de taxa de RST_STREAM |
Esta ferramenta é destinada apenas para testes de segurança autorizados e pesquisa.
Não execute este script contra sistemas que você não possui ou para os quais não tenha permissão explícita por escrito para testar.
Os autores não aceitam responsabilidade por uso indevido.