Vulnerabilities

6 min readUpdated

MadeYouReset: 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.

AspectRapid Reset (CVE-2023-44487)MadeYouReset (CVE-2025-8671)
Who resets the streamThe client sends RST_STREAMThe server is tricked into sending RST_STREAM
How it is provokedImmediate client cancellationValid request, then a malformed control frame
Bypasses reset counting?No — that is the fixYes — the client never sends a reset
EffectStreams stop counting, work continuesStreams stop counting, work continues
Disclosed10 October 202313 August 2025
In the wildYes (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.

ProjectCVEFixed version(s)Status
Apache TomcatCVE-2025-4898911.0.10, 10.1.44, 9.0.108Affected
NettyCVE-2025-551634.1.124.Final, 4.2.4.FinalAffected
Eclipse JettyCVE-2025-51159.4.58, 10.0.26, 11.0.26, 12.0.25Affected
F5 BIG-IPCVE-2025-54500See F5 advisoryAffected
H2OCVE-2025-8671commit 4729b66 or laterAffected, patched
UndertowCVE-2025-97842.2.38.Final, 2.3.20.FinalAffected
Varnish CacheCVE-2025-86717.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 neededNot 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

In Rapid Reset, the client cancels streams by sending RST_STREAM. In MadeYouReset, the attacker sends a valid request and then a malformed control frame that forces the server to send RST_STREAM itself. The effect is the same — streams stop counting while backend work continues — but because the client never sends a reset, it bypasses defences that only count client resets.

At disclosure there were no public reports of in-the-wild exploitation, and it is not listed in the CISA KEV catalogue, unlike Rapid Reset. It was disclosed responsibly through CERT/CC with vendor patches coordinated. The absence of known exploitation is not a reason to delay patching, since the technique is public and well documented.

The CERT/CC note listed NGINX and F5 as unknown at disclosure rather than affected or unaffected. Several other proxies and runtimes, including Envoy, HAProxy, Go and Node.js, were listed as not affected. Check your specific HTTP/2 server and every library in your stack against its own advisory rather than assuming from the protocol alone.

Confirmed affected products include 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) and Varnish Cache. Each has its own fixed version. Patch every HTTP/2 component you run, including libraries your own application depends on, such as gRPC stacks built on Netty.

No — that is exactly what it is designed to bypass. The reset comes from the server, not the client, so a limit on client RST_STREAM frames never engages. The effective defence is to bound concurrent backend work per connection, limit the control frames that trigger resets, and close connections that produce repeated stream errors.

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.

  1. 01NVD — CVE-2025-8671 · NVD
  2. 02CERT/CC VU#767506 — HTTP/2 MadeYouReset · CERT/CC
  3. 03MadeYouReset — researcher write-up (Gal Bar Nahum) · Gal Bar Nahum
  4. 04MadeYouReset technical details · Gal Bar Nahum
  5. 05Netty advisory GHSA-prj3-ccx8-p6x4 (CVE-2025-55163) · GitHub Security Advisories
  6. 06Apache Tomcat advisory GHSA-gqp3-2cvr-x8m3 (CVE-2025-48989) · GitHub Security Advisories
  7. 07H2O advisory GHSA-mrjm-qq9m-9mjq (MadeYouReset) · H2O
  8. 08Eclipse Jetty advisory GHSA-mmxm-8w33-wc4h (CVE-2025-5115) · GitHub Security Advisories
  9. 09Undertow advisory GHSA-95h4-w6j8-2rp8 (CVE-2025-9784) · GitHub Security Advisories
  10. 10Varnish VSV00017 — HTTP/2 Made You Reset attack · Varnish Cache
  11. 11NVD — CVE-2025-54500 (F5 BIG-IP) · NVD

Last updated