Back to Blog Directory
Vulnerability AnalysisApr 25, 202613 min read

HTTP/2 Rapid Reset Attack Analysis

In late 2023, cloud providers including Cloudflare, Google Cloud, and AWS disclosed the largest Layer 7 DDoS attack in internet history, peaking at an unprecedented 398 Million Requests Per Second (RPS). The attack exploited a fundamental design feature of the HTTP/2 protocol, officially tracked as CVE-2023-44487 (HTTP/2 Rapid Reset).

Asymmetric Resource Exploitation: In HTTP/2, a client can open a stream with a `HEADERS` frame and cancel it immediately with a `RST_STREAM` frame. The client incurs almost zero computational cost, while the server performs full TLS decryption, stream allocation, and routing teardown.

Protocol Mechanics: How Rapid Reset Works

HTTP/2 introduced stream multiplexing over a single TCP connection. A client can initiate multiple concurrent streams without waiting for previous requests to finish:

  1. Stream Initiation: The client sends a HEADERS frame on Stream ID 1.
  2. Immediate Cancellation: Before the server can reply, the client sends a RST_STREAM frame on Stream ID 1 with error code NO_ERROR (0x00).
  3. Stream Reset: The stream transitions to the closed state. Because the stream is closed, it does not count toward the server's SETTINGS_MAX_CONCURRENT_STREAMS limit.
  4. Continuous Loop: The client repeats this loop hundreds of thousands of times per second on Stream IDs 3, 5, 7, 9, etc., across a single TCP connection.

Vulnerability Impact Matrix Across Web Servers

Web Server / ProxyDefault Behavior Under Rapid ResetPatched VersionMitigation Directive
Nginx100% CPU lockup across worker cores1.25.3+ / 1.24.1+keepalive_time, stream reset limits
Envoy ProxyHigh memory allocation & heap crash1.28.0+max_consecutive_inbound_frames
HAProxyWorker thread starvation2.8.4+ / 2.7.10+tune.h2.max-concurrent-streams
Go net/httpGoroutine leak and CPU spikeGo 1.21.3+ / 1.20.10+golang.org/x/net/http2 update

Incident Response Playbook for HTTP/2 Rapid Reset Attacks

If your web infrastructure experiences sudden 100% CPU lockups with low inbound bandwidth utilization, execute this immediate triage sequence:

  1. Emergency Mitigation: Temporarily disable HTTP/2 support on public ingress load balancers (falling back to HTTP/1.1) to immediately neutralize stream reset amplification while patches are deployed.
  2. Apply Vendor Patches: Upgrade Nginx to 1.25.3+, Envoy to 1.28.0+, or HAProxy to 2.8.4+ to enforce built-in RST_STREAM frame rate limiting.
  3. WAF Rule Enforcement: Deploy Cloudflare or AWS WAF custom rules to challenge or block clients exhibiting anomalous stream reset ratios.

Simulating Rapid Reset Resiliency with Boota

With Boota Layer 7 HTTP/2 Rapid Reset Engine, security engineers can simulate multi-million RPS multiplexed stream bursts against staging endpoints to verify WAF mitigation responsiveness.

Frequently Asked Questions (FAQ)

Does HTTP/3 (QUIC) solve the Rapid Reset vulnerability?

HTTP/3 uses QUIC over UDP and implements native flow-control frame limits, reducing stream state amplification. However, application-layer reset floods can still impact unpatched servers.

Why do standard rate limits fail against Rapid Reset?

Standard rate limits count completed HTTP requests (200 OK, 404, etc.). Because Rapid Reset cancels streams before completion, traditional request counters never increment.