Vulnerabilities
6 min readUpdatedMadeYouReset: the HTTP/2 attack that bypassed Rapid Reset fixes
Quick answer
MadeYouReset (CVE-2025-8671) is an HTTP/2 denial-of-service technique disclosed on 13 August 2025. Instead of the client cancelling streams, the attacker sends valid requests and then malformed control frames that force the server to reset the streams. Each reset stream stops counting toward the concurrency limit while the backend keeps processing it, so one connection can drive unbounded concurrent work. Because the client never sends a reset, it bypasses the usual Rapid Reset defence. Many implementations were affected; several were not.
At a glance
high severity- Identifier
- CVE-2025-8671
- Also known as
- MadeYouReset
- Product
- HTTP/2 protocol — multiple server and proxy implementations
- Affected
- Apache Tomcat (CVE-2025-48989); Netty (CVE-2025-55163); Eclipse Jetty (CVE-2025-5115); F5 BIG-IP (CVE-2025-54500), H2O, Undertow (CVE-2025-9784), Varnish Cache
- Fixed in
- Tomcat 11.0.10 / 10.1.44 / 9.0.108; Netty 4.1.124.Final / 4.2.4.Final; Jetty 9.4.58 / 10.0.26 / 11.0.26 / 12.0.25; Undertow 2.2.38.Final / 2.3.20.Final; Varnish 7.6.5 / 7.7.3 / 6.0.16
- CVSS
- 7.5 (CVSS 3.1, CISA-ADP score on NVD)
- Disclosed
- Known exploited (CISA KEV)
- Not listed
Disclosed 13 August 2025 via CERT/CC VU#767506. Patched across affected implementations. No public in-the-wild exploitation reported; not in CISA KEV.
01What is MadeYouReset?
MadeYouReset is a 2025 HTTP/2 denial-of-service technique, tracked as CVE-2025-8671. It was found by Gal Bar Nahum, Anat Bremler-Barr and Yaniv Harel of Tel Aviv University, with partial support from Imperva, and disclosed on 13 August 2025 through a coordinated CERT/CC note, VU#767506.
It is a direct sequel to HTTP/2 Rapid Reset (CVE-2023-44487). Rapid Reset relied on the client sending RST_STREAM to cancel streams. The standard fix was to count and limit client resets. MadeYouReset sidesteps that entirely: it makes the server reset the stream, so the client never sends an RST_STREAM and the counter that defends against Rapid Reset never ticks up.
02How does MadeYouReset work?
The attacker opens a stream with a valid, complete request that the server begins processing. Then, instead of cancelling it, the attacker sends a control frame that is invalid in that stream's current state. The HTTP/2 specification says the server must respond to such a stream error with RST_STREAM. The stream immediately transitions to closed and stops counting toward SETTINGS_MAX_CONCURRENT_STREAMS, but in affected implementations the backend keeps computing the response, because it never learns that the stream was cancelled.
Crucially, the request itself is valid, so the server starts real work before the error is triggered. Malformed requests do not work for this, because the server rejects them before doing anything. That distinction is why MadeYouReset keeps backend workers busy, the same property that made Rapid Reset an HTTP flood amplifier.
The researchers documented six RFC-defined ways to provoke a server-sent stream reset after a valid request. They fall into invalid control frames and improper protocol flow. Of these, the researchers found the WINDOW_UPDATE overflow the most consistently effective across implementations.
- WINDOW_UPDATE with an increment of 0
- PRIORITY frame with a length other than 5 bytes
- PRIORITY frame that makes a stream depend on itself
- WINDOW_UPDATE that pushes the flow-control window above 2^31 - 1
- HEADERS sent after the client already closed the stream with END_STREAM
- DATA sent after the client already closed the stream with END_STREAM
03MadeYouReset versus Rapid Reset
The effect is identical — a single connection drives unbounded concurrent backend work while staying under the advertised stream limit. The difference is purely in how the reset is caused, and that difference is enough to walk straight past a defence built only on counting client resets. The CONTINUATION flood (CVE-2024-27316) is a third HTTP/2 denial of service that needs no reset at all.
| Aspect | Rapid Reset (CVE-2023-44487) | MadeYouReset (CVE-2025-8671) |
|---|---|---|
| Who resets the stream | The client sends RST_STREAM | The server is tricked into sending RST_STREAM |
| How it is provoked | Immediate client cancellation | Valid request, then a malformed control frame |
| Bypasses reset counting? | No — that is the fix | Yes — the client never sends a reset |
| Effect | Streams stop counting, work continues | Streams stop counting, work continues |
| Disclosed | 10 October 2023 | 13 August 2025 |
| In the wild | Yes (CISA KEV) | No public exploitation reported |
04Which implementations were affected?
Because MadeYouReset abuses RFC-defined behaviour, many compliant HTTP/2 stacks were affected, each with its own CVE and fix. Several were not: CERT/CC lists Envoy, HAProxy, Go, Node.js and Apache HTTP Server, among others, as not affected, while NGINX and F5 were listed as unknown at disclosure.
The researchers note that some stacks, such as Envoy and gRPC's C core, escalate these protocol errors to connection errors and close the whole connection, which removes the concurrency bypass. That is the clearest endorsement of the right fix: bound the work per connection, not just one cause of resets.
| Project | CVE | Fixed version(s) | Status |
|---|---|---|---|
| Apache Tomcat | CVE-2025-48989 | 11.0.10, 10.1.44, 9.0.108 | Affected |
| Netty | CVE-2025-55163 | 4.1.124.Final, 4.2.4.Final | Affected |
| Eclipse Jetty | CVE-2025-5115 | 9.4.58, 10.0.26, 11.0.26, 12.0.25 | Affected |
| F5 BIG-IP | CVE-2025-54500 | See F5 advisory | Affected |
| H2O | CVE-2025-8671 | commit 4729b66 or later | Affected, patched |
| Undertow | CVE-2025-9784 | 2.2.38.Final, 2.3.20.Final | Affected |
| Varnish Cache | CVE-2025-8671 | 7.6.5, 7.7.3, 6.0.16 (7.6.4 / 7.7.2 / 6.0.15 fixed it but had a regression) | Affected, patched |
| Envoy, HAProxy, Go, Node.js, Apache httpd | — | No change needed | Not affected (CERT/CC) |
05How do you defend against it?
The fix is the same discipline that protected the unaffected stacks. Do not key your defence on client resets; account for streams and the control frames that cause resets, and treat the connection, not the request, as the unit of enforcement. CERT/CC's headline advice to implementers is to limit the number or rate of RST_STREAM frames the server sends.
- Limit the rate of server-sent RST_STREAM frames per connection, and tear the connection down past a budget
- Limit or reject the control frames that trigger resets — WINDOW_UPDATE with a zero or overflowing increment, malformed PRIORITY frames
- Treat repeated stream errors as a connection-level problem and close the connection
- Cap concurrent backend work per connection so cancelled or reset streams cannot free unlimited capacity
- Patch to the fixed version for every HTTP/2 component in your stack, including libraries behind your own code
06What does it look like in practice?
The traffic signature is high CPU with ordinary bandwidth (a request-rate problem, as bps vs pps vs rps explains), concentrated on a small number of HTTP/2 connections, with an unusual rate of stream errors. Because the resets are server-initiated, logs show the server closing streams rather than clients cancelling them, and control-frame counters (WINDOW_UPDATE, PRIORITY) climb far above normal browser behaviour.
Stacks that expose HTTP/2 metrics make this visible as a spike in stream resets or protocol errors without a matching rise in active connections. If you only alert on bandwidth or on whether the service is up, you will miss it until the origin is already saturated — the same blind spot that makes any application-layer flood hard to see. For how to respond once you spot it, see how to stop a DDoS attack.
Questions
Frequently asked questions
Sources
Sources and verification
No commands on this page. Affected and fixed versions cross-checked against CERT/CC VU#767506, GitHub Security Advisories, the Varnish advisory and NVD in October 2026; no exploit code was run.
- 01NVD — CVE-2025-8671 · NVD
- 02CERT/CC VU#767506 — HTTP/2 MadeYouReset · CERT/CC
- 03MadeYouReset — researcher write-up (Gal Bar Nahum) · Gal Bar Nahum
- 04MadeYouReset technical details · Gal Bar Nahum
- 05Netty advisory GHSA-prj3-ccx8-p6x4 (CVE-2025-55163) · GitHub Security Advisories
- 06Apache Tomcat advisory GHSA-gqp3-2cvr-x8m3 (CVE-2025-48989) · GitHub Security Advisories
- 07H2O advisory GHSA-mrjm-qq9m-9mjq (MadeYouReset) · H2O
- 08Eclipse Jetty advisory GHSA-mmxm-8w33-wc4h (CVE-2025-5115) · GitHub Security Advisories
- 09Undertow advisory GHSA-95h4-w6j8-2rp8 (CVE-2025-9784) · GitHub Security Advisories
- 10Varnish VSV00017 — HTTP/2 Made You Reset attack · Varnish Cache
- 11NVD — CVE-2025-54500 (F5 BIG-IP) · NVD
Last updated