一个轻量级 Python 脚本,用于检测 Web 服务器是否可能受到 MadeYouReset HTTP/2 拒绝服务漏洞的影响——该漏洞编号为 CVE-2025-8671(CVSS 7.5 高危)。
MadeYouReset 是 2025 年 8 月由特拉维夫大学和 Imperva 的研究人员披露的一个 HTTP/2 DoS 漏洞。它利用了许多主流服务器实现中 HTTP/2 流计数与内部后端处理之间的不一致。
该攻击会发送刻意构造的畸形 HTTP/2 控制帧(例如 increment=0 的 WINDOW_UPDATE 帧,根据 RFC 9113 §6.9.1,这是非法的),以迫使服务器自身发出 RST_STREAM 帧。由于服务器在协议层面将流视为已关闭,同时仍在后端继续处理请求,攻击者可以绕过 MAX_CONCURRENT_STREAMS 限制并耗尽服务器资源——而无需发送任何客户端 RST_STREAM。
这使得它可以绕过为更早的 Rapid Reset 攻击(CVE-2023-44487)引入的缓解措施。
已知受影响的软件:
| 产品 | 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 执行 TLS 握手。SETTINGS 帧。HEADERS 帧打开请求流。WINDOW_UPDATE 帧(increment=0)。RST_STREAM(无 GOAWAY) → 可能易受攻击。GOAWAY → 符合 RFC 行为;可能已修补。该脚本执行只读被动探测——它不会尝试利用漏洞或对服务器进行压力测试。
git clone https://github.com/ayushghatkar8080/MadeYouReset_Tester.git
cd MadeYouReset_Tester
# No pip install needed — no dependencies
python3 main.py <url> [OPTIONS]
| 参数 | 默认值 | 说明 |
|---|---|---|
--timeout SECONDS | 8 | 套接字读取超时 |
--no-color | off | 禁用 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
| 代码 | 含义 |
|---|---|
0 | 不受影响——服务器以 响应(符合 RFC 行为) |
退出代码使其可以轻松集成到 CI 流水线或自动化脚本中。
========================================================
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.
========================================================
| 措施 | 详情 |
|---|---|
| 打补丁 | 为你的 HTTP/2 技术栈应用最新的厂商更新(见上表) |
| 禁用 HTTP/2 | 回退到 HTTP/1.1 作为临时缓解措施 |
| WAF / 代理 | 部署在边缘验证 HTTP/2 帧的反向代理或 WAF |
此工具仅用于授权的安全测试和研究。
请勿针对你不拥有或未经明确书面许可的系统运行此脚本。
作者对滥用行为不承担任何责任。
GOAWAY1 | 可能易受攻击——服务器在流上发送了 RST_STREAM,但未发送 GOAWAY |
2 | 结果不确定——无 HTTP/2、连接错误或响应不明确 |
| 速率限制 | 对每个客户端实施连接上限和 RST_STREAM 速率限制 |