Skip to content

Instantly share code, notes, and snippets.

@adulau
Last active June 9, 2026 03:35
Show Gist options
  • Select an option

  • Save adulau/7c2bfb8e9cdbe4b35a5e131c66a0c088 to your computer and use it in GitHub Desktop.

Select an option

Save adulau/7c2bfb8e9cdbe4b35a5e131c66a0c088 to your computer and use it in GitHub Desktop.
HTTP/2 Rapid Reset DDoS Attack

Introduction

This Gist aims to centralise the most relevant public sources of information related to the HTTP/2 Rapid Reset vulnerability. This vulnerability has been disclosed jointly by Google, Amazon AWS, and Cloudflare on 10 October 2023 at 12:00 UTC.

Please help us make this page as comprehensive as possible by contributing relevant references, vendor advisories and statements, mitigations, etc.

References

Vendor advisories and statements

Testing if HTTP/2 is enabled

OpenSSL

echo 1 | openssl s_client -alpn h2 -connect google.com:443 -status 2>&1  | grep "ALPN"

Nmap

nmap -p 443 --script=tls-nextprotoneg www.google.com

curl

curl -Is --http2-prior-knowledge https://example.com/| head -1

Testing if it's vulnerable (use at your own risk)

Potential remediation

NGINX

can be configured to mitigate the vulnerability

  • Disabling HTTP/2 in NGINX is not necessary. Simply ensure you have configured:

    • keepalive_requests should be kept at the default setting of 1000 requests
    • http2_max_concurrent_streams should be kept at the default setting of 128 streams
    • limit_conn and limit_req should be set "with a reasonable setting balancing application performance and security"

If you want to remove http2 support

  • Remove reference to http2 in the listening part

DDoS protection / CDNs

Web apps that are behind the following DDoS protection providers / CDNs should not be impacted:

  • AWS
  • Cloudflare
  • Google Cloud
  • Microsoft Azure
@lcrilly

lcrilly commented Oct 10, 2023

Copy link
Copy Markdown

Disabling HTTP/2 in NGINX is not necessary. Simply ensure you have configured:

Full details in the blog:
https://www.nginx.com/blog/http-2-rapid-reset-attack-impacting-f5-nginx-products/

@adulau

adulau commented Oct 10, 2023

Copy link
Copy Markdown
Author

@lcrilly Thank you for the updates!

@rwhitworth

Copy link
Copy Markdown

You can prevent the openssl command from hanging by echoing input. Can also remove stderr output by redirecting stderr to stdout.

echo 1 | openssl s_client -alpn h2 -connect google.com:443 -status 2>&1 | grep "ALPN"

@adulau

adulau commented Oct 10, 2023

Copy link
Copy Markdown
Author

@rwhitworth Thanks a lot. It’s updated.

@cert-olivier

Copy link
Copy Markdown

@saadkadhi

Copy link
Copy Markdown

@adulau for your consideration. I reworked the MD, adding a source, some mitigations, and additional text for clarity etc.

Introduction

This Gist aims to centralise the most relevant public sources of information related to the HTTP/2 Rapid Reset vulnerability. This vulnerability has been disclosed jointly by Google, Amazon AWS, and Cloudflare on 10 October 2023 at 12:00 UTC.

Please help us make this page as comprehensive as possible by contributing relevant references, vendor advisories and statements, mitigations, etc.

References

Vendor advisories and statements

Testing if HTTP/2 is enabled

OpenSSL

echo 1 | openssl s_client -alpn h2 -connect google.com:443 -status 2>&1  | grep "ALPN"

Nmap

nmap -p 443 --script=tls-nextprotoneg www.google.com

Testing if it's vulnerable (use at your own risk)

Potential remediation

NGINX

can be configured to mitigate the vulnerability

  • Disabling HTTP/2 in NGINX is not necessary. Simply ensure you have configured:

    • keepalive_requests should be kept at the default setting of 1000 requests
    • http2_max_concurrent_streams should be kept at the default setting of 128 streams

If you want to remove http2 support

  • Remove reference to http2 in the listening part

DDoS protection / CDNs

Web apps that are behind the following DDoS protection providers / CDNs should not be impacted:

  • AWS
  • Cloudflare
  • Google Cloud
  • Microsoft Azure

@adulau

adulau commented Oct 10, 2023

Copy link
Copy Markdown
Author

@cert-olivier Thank you it's updated.
@saadkadhi Thank a zillion for the clean-up and the improvement. It's now included.

@INCIBE-CERT

Copy link
Copy Markdown

@INCIBE-CERT

Copy link
Copy Markdown

Disabling HTTP/2 in NGINX is not necessary. Simply ensure you have configured:

* keepalive_requests should be kept at the default setting of 1000 requests
* http2_max_concurrent_streams should be kept at the default setting of 128 streams

Full details in the blog: https://www.nginx.com/blog/http-2-rapid-reset-attack-impacting-f5-nginx-products/

The blog also says that, in addition of keeping those at its default values, you should add limit_conn and limit_req "with a reasonable setting balancing application performance and security"

@adulau

adulau commented Oct 11, 2023

Copy link
Copy Markdown
Author

@INCIBE-CERT Thanks a lot for the feedback. It's updated.

@ion-storm

Copy link
Copy Markdown

Anyone able to provide any PCAP's? We could design some suricata rules to detect and prevent the attacks

@marcin-gryszkalis

Copy link
Copy Markdown

There's draft proposal (from Mozilla engineer) for backporting QUIC (HTTP/3) stream id limits to HTTP/2
https://martinthomson.github.io/h2-stream-limits/draft-thomson-httpbis-h2-stream-limits.html

@adulau

adulau commented Oct 12, 2023

Copy link
Copy Markdown
Author

@marcin-gryszkalis Thanks for the info. It's updated.
@ion-storm There is a pcap from Cloudflare. Suricata rule would be indeed a good idea. Suricata seems to support HTTP/2 framing (not sure if it's complete) - https://docs.suricata.io/en/suricata-6.0.0/rules/http2-keywords.html

@ravager-dk

Copy link
Copy Markdown

@lcrilly

lcrilly commented Oct 12, 2023

Copy link
Copy Markdown

NGINX mitigation: please note the nginx.com blog has been updated to separate essential configuration from recommended.

Testing if HTTP/2 is enabled with curl(1)

curl -Is --http2-prior-knowledge https://example.com/| head -1

@adulau

adulau commented Oct 13, 2023

Copy link
Copy Markdown
Author

@lcrilly Thank you. it’s updated.

@adulau

adulau commented Oct 13, 2023

Copy link
Copy Markdown
Author

@ravager-dk Thank you it’s updated.

@secengjeff

Copy link
Copy Markdown

I wrote a tool that implements a sparse HTTP/2 client and emulates this attack. It can be used to test system behavior to rapid HEADERS + RST_STREAM frames.

@adulau

adulau commented Oct 14, 2023

Copy link
Copy Markdown
Author

@secengjeff Thank you. It's included.

@crstian19

Copy link
Copy Markdown

@adulau

adulau commented Oct 16, 2023

Copy link
Copy Markdown
Author

@crstian19 Thank you it's updated.

@theta682

Copy link
Copy Markdown

Apache Tomcat apache/tomcat@9cdfe25 was backported to the released 11.1.14. However, this version had a regression. So, it is better to use 11.1.15

@eduardojoaofonseca

Copy link
Copy Markdown

Hello, besides this information is there any public datasets related to this attacks? Im currently doing research about the topic and would be very useful to check traffic generated by this kind of attack. Thank you in advance.

@shblue21

shblue21 commented Jan 3, 2024

Copy link
Copy Markdown

Thanks you for docs. it's lightspeed rapid reset blog.
https://blog.litespeedtech.com/2023/10/11/rapid-reset-http-2-vulnerablilty/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment