Netty HTTP/2: Advertised MAX_CONCURRENT_STREAMS are not enforced
Package
Affected versions
>= 4.2.0.Final, <= 4.2.14.Final
<= 4.1.134.Final
Patched versions
4.2.15.Final
4.1.135.Final
Description
Published to the GitHub Advisory Database
Jun 8, 2026
Reviewed
Jun 8, 2026
Published by the National Vulnerability Database
Jun 12, 2026
Last updated
Jun 12, 2026
Impact
DefaultHttp2Connection.DefaultEndpoint initialises maxActiveStreams/maxStreams to Integer.MAX_VALUE, and Http2Settings never inserts SETTINGS_MAX_CONCURRENT_STREAMS by default (Http2Settings.java:305-307 only clamps a user-supplied value). Unless the application explicitly calls initialSettings().maxConcurrentStreams(n), a Netty HTTP/2 server advertises no limit and enforces none locally. Each open stream allocates a DefaultStream object, PropertyMap slots, flow-controller state and IntObjectHashMap entry; with ~2^30 permissible odd stream IDs a single TCP connection can create hundreds of thousands of long-lived stream objects. This is also the precondition for CVE-2023-44487-style Rapid-Reset amplification, where the absence of a low concurrent cap multiplies backend work.
Resources
https://www.rfc-editor.org/rfc/rfc7540.html#section-6.5.2
References