Update dependency io.netty:netty-codec-http2 to v4.1.135.Final [SECURITY] (main)#27
Draft
renovatebot-confluentinc[bot] wants to merge 1 commit into
Conversation
c1c9372 to
5e243dd
Compare
5e243dd to
179d5e4
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
For any questions/concerns about this PR, please review the Renovate Bot wiki/FAQs, or the #renovatebot Slack channel.
This PR contains the following updates:
4.1.118.Final→4.1.135.FinalWarning
Some dependencies could not be looked up. Check the warning logs for more information.
Netty affected by MadeYouReset HTTP/2 DDoS vulnerability
CVE-2025-55163 / GHSA-prj3-ccx8-p6x4
More information
Details
Below is a technical explanation of a newly discovered vulnerability in HTTP/2, which we refer to as “MadeYouReset.”
MadeYouReset Vulnerability Summary
The MadeYouReset DDoS vulnerability is a logical vulnerability in the HTTP/2 protocol, that uses malformed HTTP/2 control frames in order to break the max concurrent streams limit - which results in resource exhaustion and distributed denial of service.
Mechanism
The vulnerability uses malformed HTTP/2 control frames, or malformed flow, in order to make the server reset streams created by the client (using the RST_STREAM frame).
The vulnerability could be triggered by several primitives, defined by the RFC of HTTP/2 (RFC 9113). The Primitives are:
From our experience, the primitives are likely to exist in the decreasing order listed above.
Note that based on the implementation of the library, other primitives (which are not defined by the RFC) might exist - meaning scenarios in which RST_STREAM is not supposed to be sent, but in the implementation it does. On the other hand - some RFC-defined primitives might not work, even though they are defined by the RFC (as some implementations are not fully complying with RFC). For example, some implementations we’ve seen discard the PRIORITY frame - and thus does not return RST_STREAM, and some implementations send GO_AWAY when receiving a WINDOW_UPDATE frame with increment of 0.
The vulnerability takes advantage of a design flaw in the HTTP/2 protocol - While HTTP/2 has a limit on the number of concurrently active streams per connection (which is usually 100, and is set by the parameter SETTINGS_MAX_CONCURRENT_STREAMS), the number of active streams is not counted correctly - when a stream is reset, it is immediately considered not active, and thus unaccounted for in the active streams counter.
While the protocol does not count those streams as active, the server’s backend logic still processes and handles the requests that were canceled.
Thus, the attacker can exploit this vulnerability to cause the server to handle an unbounded number of concurrent streams from a client on the same connection. The exploitation is very simple: the client issues a request in a stream, and then sends the control frame that causes the server to send a RST_STREAM.
Attack Flow
For example, a possible attack scenario can be:
The attacker can repeat steps 2+3 as rapidly as it is capable, since the active streams counter never exceeds 1 and the attacker does not need to wait for the response from the server.
This leads to resource exhaustion and distributed denial of service vulnerabilities with an impact of: CPU overload and/or memory exhaustion (implementation dependent)
Comparison to Rapid Reset
The vulnerability takes advantage of a design flow in the HTTP/2 protocol that was also used in the Rapid Reset vulnerability (CVE-2023-44487) which was exploited as a zero-day in the wild in August 2023 to October 2023, against multiple services and vendors.
The Rapid Reset vulnerability uses RST_STREAM frames sent from the client, in order to create an unbounded amount of concurrent streams - it was given a CVSS score of 7.5.
Rapid Reset was mostly mitigated by limiting the number/rate of RST_STREAM sent from the client, which does not mitigate the MadeYouReset attack - since it triggers the server to send a RST_STREAM.
Suggested Mitigations for MadeYouReset
A quick and easy mitigation will be to limit the number/rate of RST_STREAMs sent from the server.
It is also possible to limit the number/rate of control frames sent by the client (e.g. WINDOW_UPDATE and PRIORITY), and treat protocol flow errors as a connection error.
As mentioned in our previous message, this is a protocol-level vulnerability that affects multiple vendors and implementations. Given its broad impact, it is the shared responsibility of all parties involved to handle the disclosure process carefully and coordinate mitigations effectively.
If you have any questions, we will be happy to clarify or schedule a Zoom call.
Gal, Anat and Yaniv.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty HTTP/2 CONTINUATION Frame Flood DoS via Zero-Byte Frame Bypass
CVE-2026-33871 / GHSA-w9fj-cfpg-grvv
More information
Details
Summary
A remote user can trigger a Denial of Service (DoS) against a Netty HTTP/2 server by sending a flood of
CONTINUATIONframes. The server's lack of a limit on the number ofCONTINUATIONframes, combined with a bypass of existing size-based mitigations using zero-byte frames, allows an user to cause excessive CPU consumption with minimal bandwidth, rendering the server unresponsive.Details
The vulnerability exists in Netty's
DefaultHttp2FrameReader. When an HTTP/2HEADERSframe is received without theEND_HEADERSflag, the server expects one or more subsequentCONTINUATIONframes. However, the implementation does not enforce a limit on the count of theseCONTINUATIONframes.The key issue is located in
codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2FrameReader.java. TheverifyContinuationFrame()method checks for stream association but fails to implement a frame count limit.Any user can exploit this by sending a stream of
CONTINUATIONframes with a zero-byte payload. While Netty has amaxHeaderListSizeprotection to limit the total size of headers, this check is never triggered by zero-byte frames. The logic effectively evaluates tomaxHeaderListSize - 0 < currentSize, which will not trigger the limit until a non-zero byte is added. As a result, the server is forced to process an unlimited number of frames, consuming a CPU thread and monopolizing the connection.codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2FrameReader.javaverifyContinuationFrame()(lines 381-393) — No frame count check:HeadersBlockBuilder.addFragment()(lines 695-723) — Byte limit bypassed by 0-byte frames:When
len=0:maxGoAway - 0 < readableBytes→10240 < 1→ FALSE. The byte limit is never triggered.Impact
This is a CPU-based Denial of Service (DoS). Any service using Netty's default HTTP/2 server implementation is impacted. An unauthenticated user can exhaust server CPU resources and block legitimate users, leading to service unavailability. The low bandwidth requirement for the attack makes it highly practical.
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty: HttpContentDecompressor maxAllocation bypass when Content-Encoding set to br/zstd/snappy leads to decompression bomb DoS
CVE-2026-42587 / GHSA-f6hv-jmp6-3vwv
More information
Details
Summary
HttpContentDecompressoraccepts amaxAllocationparameter to limit decompression buffer size and prevent decompression bomb attacks. This limit is correctly enforced for gzip and deflate encodings viaZlibDecoder, but is silently ignored when the content encoding isbr(Brotli),zstd, orsnappy. An attacker can bypass the configured decompression limit by sending a compressed payload withContent-Encoding: brinstead ofContent-Encoding: gzip, causing unbounded memory allocation and out-of-memory denial of service.The same vulnerability exists in
DelegatingDecompressorFrameListenerfor HTTP/2 connections.Details
HttpContentDecompressorstores themaxAllocationvalue at construction time (HttpContentDecompressor.java:89) and uses it innewContentDecoder()to create the appropriate decompression handler.For gzip/deflate,
maxAllocationis forwarded toZlibCodecFactory.newZlibDecoder():ZlibDecoder.prepareDecompressBuffer()enforces this as a hard cap by setting the buffer'smaxCapacityand throwingDecompressionExceptionwhen the limit is reached:For brotli, zstd, and snappy, the decoders are created without any size limit:
BrotliDecoderhas nomaxAllocationparameter at all — there is no way to constrain its output. It streams decompressed data in chunks viafireChannelReadwith no total limit.ZstdDecoder()defaults to a 4MBmaximumAllocationSize, but this only constrains individual buffer allocations, not total output. The decode loop (ZstdDecoder.java:100-114) creates new buffers and fireschannelReadrepeatedly, so total decompressed output is unbounded.The identical pattern exists in
DelegatingDecompressorFrameListener.newContentDecompressor()at lines 188-210 for HTTP/2.PoC
Content-Encoding: zstdandContent-Encoding: snappy.Impact
maxAllocationfor decompression bomb protection, by simply using a non-gzip content encoding.maxAllocationto protect against decompression bombs are not actually protected for brotli, zstd, or snappy encodings. The API documentation implies all encodings are covered.Content-Encoding: brinstead ofContent-Encoding: gzip) to circumvent the protection entirely.HttpContentDecompressor(HTTP/1.1) andDelegatingDecompressorFrameListener(HTTP/2).Recommended Fix
Pass
maxAllocationto all decoder constructors. ForBrotliDecoder, which currently has nomaxAllocationsupport, add the parameter:HttpContentDecompressor.java — pass maxAllocation to all decoders:
DelegatingDecompressorFrameListener.java — same fix at lines 188-210.
BrotliDecoder — add
maxAllocationparameter with the same semantics asZlibDecoder.prepareDecompressBuffer(): set buffer maxCapacity and throwDecompressionExceptionwhen the total decompressed output exceeds the limit.SnappyFrameDecoder — add
maxAllocationparameter with equivalent enforcement.ZstdDecoder — ensure that when
maxAllocationis set, total output across all buffers is bounded (not just per-buffer allocation size).Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty HTTP/2: Advertised MAX_CONCURRENT_STREAMS are not enforced
CVE-2026-47244 / GHSA-5x3r-wrvg-rp6q
More information
Details
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
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
netty-codec-http2: ByteBuf Reference-Count Leak in DelegatingDecompressorFrameListener Leads to Memory Exhaustion
CVE-2026-48043 / GHSA-c2gf-v879-257j
More information
Details
Impact
The
DelegatingDecompressorFrameListenerclass orchestrates HTTP/2 decompression by embedding a per-streamEmbeddedChannelthat runs the appropriate decompression codec (gzip, deflate, zstd) and forwards decompressed chunks to a wrapped listener. Each decompressed chunk is a pooledByteBufhanded to an anonymousChannelInboundHandlerAdaptertail handler, which becomes the sole owner responsible for releasing it.A remote peer could send frames that would result in the flow-controller throwing and so trigger a resource leak which at the end might take down the whole JVM due OOME.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty susceptible to HTTP/2 Reset Attack with different on-the-wire signature
CVE-2026-50560 / GHSA-563q-j3cm-6jxm
More information
Details
Summary
Netty HTTP/2 max header size handling produces attack similar to HTTP/2 Rapid Reset.
Details
There is a setting in the http2 specification called
SETTINGS_MAX_HEADER_LIST_SIZE. According to the RFC: “This advisory setting informs a peer of the maximum field section size that the sender is prepared to accept, in units of octets.”When a client sends that setting to Netty, it appears that Netty will behave as follows:
Functionally, this should be similar to the http2 reset attack, but with a different on-the-wire signature.
Remediation
When speaking with clients, Netty should potentially treat this as “advisory” and ignore it. It would be best to ignore the SETTINGS_MAX_HEADER_LIST_SIZE setting from clients (or ignore it when sending to clients). According to the spec, a server does not need to honor this advisory setting, and it appears that other http/2 implementations ignore it when acting as a server.
Impact
This is a DDoS attack similar to the HTTP/2 Rapid Reset Attack.
Credit
Jonathan Looney (Engineering, Netflix)
Contact
Ashley Tolbert (Security, Netflix) - artolbert@netflix.com
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty affected by MadeYouReset HTTP/2 DDoS vulnerability
CVE-2025-55163 / GHSA-prj3-ccx8-p6x4
More information
Details
Below is a technical explanation of a newly discovered vulnerability in HTTP/2, which we refer to as “MadeYouReset.”
MadeYouReset Vulnerability Summary
The MadeYouReset DDoS vulnerability is a logical vulnerability in the HTTP/2 protocol, that uses malformed HTTP/2 control frames in order to break the max concurrent streams limit - which results in resource exhaustion and distributed denial of service.
Mechanism
The vulnerability uses malformed HTTP/2 control frames, or malformed flow, in order to make the server reset streams created by the client (using the RST_STREAM frame).
The vulnerability could be triggered by several primitives, defined by the RFC of HTTP/2 (RFC 9113). The Primitives are:
From our experience, the primitives are likely to exist in the decreasing order listed above.
Note that based on the implementation of the library, other primitives (which are not defined by the RFC) might exist - meaning scenarios in which RST_STREAM is not supposed to be sent, but in the implementation it does. On the other hand - some RFC-defined primitives might not work, even though they are defined by the RFC (as some implementations are not fully complying with RFC). For example, some implementations we’ve seen discard the PRIORITY frame - and thus does not return RST_STREAM, and some implementations send GO_AWAY when receiving a WINDOW_UPDATE frame with increment of 0.
The vulnerability takes advantage of a design flaw in the HTTP/2 protocol - While HTTP/2 has a limit on the number of concurrently active streams per connection (which is usually 100, and is set by the parameter SETTINGS_MAX_CONCURRENT_STREAMS), the number of active streams is not counted correctly - when a stream is reset, it is immediately considered not active, and thus unaccounted for in the active streams counter.
While the protocol does not count those streams as active, the server’s backend logic still processes and handles the requests that were canceled.
Thus, the attacker can exploit this vulnerability to cause the server to handle an unbounded number of concurrent streams from a client on the same connection. The exploitation is very simple: the client issues a request in a stream, and then sends the control frame that causes the server to send a RST_STREAM.
Attack Flow
For example, a possible attack scenario can be:
The attacker can repeat steps 2+3 as rapidly as it is capable, since the active streams counter never exceeds 1 and the attacker does not need to wait for the response from the server.
This leads to resource exhaustion and distributed denial of service vulnerabilities with an impact of: CPU overload and/or memory exhaustion (implementation dependent)
Comparison to Rapid Reset
The vulnerability takes advantage of a design flow in the HTTP/2 protocol that was also used in the Rapid Reset vulnerability (CVE-2023-44487) which was exploited as a zero-day in the wild in August 2023 to October 2023, against multiple services and vendors.
The Rapid Reset vulnerability uses RST_STREAM frames sent from the client, in order to create an unbounded amount of concurrent streams - it was given a CVSS score of 7.5.
Rapid Reset was mostly mitigated by limiting the number/rate of RST_STREAM sent from the client, which does not mitigate the MadeYouReset attack - since it triggers the server to send a RST_STREAM.
Suggested Mitigations for MadeYouReset
A quick and easy mitigation will be to limit the number/rate of RST_STREAMs sent from the server.
It is also possible to limit the number/rate of control frames sent by the client (e.g. WINDOW_UPDATE and PRIORITY), and treat protocol flow errors as a connection error.
As mentioned in our previous message, this is a protocol-level vulnerability that affects multiple vendors and implementations. Given its broad impact, it is the shared responsibility of all parties involved to handle the disclosure process carefully and coordinate mitigations effectively.
If you have any questions, we will be happy to clarify or schedule a Zoom call.
Gal, Anat and Yaniv.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Netty HTTP/2 CONTINUATION Frame Flood DoS via Zero-Byte Frame Bypass
CVE-2026-33871 / GHSA-w9fj-cfpg-grvv
More information
Details
Summary
A remote user can trigger a Denial of Service (DoS) against a Netty HTTP/2 server by sending a flood of
CONTINUATIONframes. The server's lack of a limit on the number ofCONTINUATIONframes, combined with a bypass of existing size-based mitigations using zero-byte frames, allows an user to cause excessive CPU consumption with minimal bandwidth, rendering the server unresponsive.Details
The vulnerability exists in Netty's
DefaultHttp2FrameReader. When an HTTP/2HEADERSframe is received without theEND_HEADERSflag, the server expects one or more subsequentCONTINUATIONframes. However, the implementation does not enforce a limit on the count of theseCONTINUATIONframes.The key issue is located in
codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2FrameReader.java. TheverifyContinuationFrame()method checks for stream association but fails to implement a frame count limit.Any user can exploit this by sending a stream of
CONTINUATIONframes with a zero-byte payload. While Netty has amaxHeaderListSizeprotection to limit the total size of headers, this check is never triggered by zero-byte frames. The logic effectively evaluates tomaxHeaderListSize - 0 < currentSize, which will not trigger the limit until a non-zero byte is added. As a result, the server is forced to process an unlimited number of frames, consuming a CPU thread and monopolizing the connection.codec-http2/src/main/java/io/netty/handler/codec/http2/DefaultHttp2FrameReader.javaverifyContinuationFrame()(lines 381-393) — No frame count check:HeadersBlockBuilder.addFragment()(lines 695-723) — Byte limit bypassed by 0-byte frames:When
len=0:maxGoAway - 0 < readableBytes→10240 < 1→ FALSE. The byte limit is never triggered.Impact
This is a CPU-based Denial of Service (DoS). Any service using Netty's default HTTP/2 server implementation is impacted. An unauthenticated user can exhaust server CPU resources and block legitimate users, leading to service unavailability. The low bandwidth requirement for the attack makes it highly practical.
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Netty: HttpContentDecompressor maxAllocation bypass when Content-Encoding set to br/zstd/snappy leads to decompression bomb DoS
CVE-2026-42587 / GHSA-f6hv-jmp6-3vwv
More information
Details
Summary
HttpContentDecompressoraccepts amaxAllocationparameter to limit decompression buffer size and prevent decompression bomb attacks. This limit is correctly enforced for gzip and deflate encodings viaZlibDecoder, but is silently ignored when the content encoding isbr(Brotli),zstd, orsnappy. An attacker can bypass the configured decompression limit by sending a compressed payload withContent-Encoding: brinstead ofContent-Encoding: gzip, causing unbounded memory allocation and out-of-memory denial of service.The same vulnerability exists in
DelegatingDecompressorFrameListenerfor HTTP/2 connections.Details
HttpContentDecompressorstores themaxAllocationvalue at construction time (HttpContentDecompressor.java:89) and uses it innewContentDecoder()to create the appropriate decompression handler.For gzip/deflate,
maxAllocationis forwarded toZlibCodecFactory.newZlibDecoder():ZlibDecoder.prepareDecompressBuffer()enforces this as a hard cap by setting the buffer'smaxCapacityand throwingDecompressionExceptionwhen the limit is reached:For brotli, zstd, and snappy, the decoders are created without any size limit:
BrotliDecoderhas nomaxAllocationparameter at all — there is no way to constrain its output. It streams decompressed data in chunks viafireChannelReadwith no total limit.ZstdDecoder()defaults to a 4MBmaximumAllocationSize, but this only constrains individual buffer allocations, not total output. The decode loop (ZstdDecoder.java:100-114) creates new buffers and fireschannelReadrepeatedly, so total decompressed output is unbounded.The identical pattern exists in
DelegatingDecompressorFrameListener.newContentDecompressor()at lines 188-210 for HTTP/2.PoC
Content-Encoding: zstdandContent-Encoding: snappy.Impact
maxAllocationfor decompression bomb protection, by simply using a non-gzip content encoding.maxAllocationto protect against decompression bombs are not actually protected for brotli, zstd, or snappy encodings. The API documentation implies all encodings are covered.Content-Encoding: brinstead ofContent-Encoding: gzip) to circumvent the protection entirely.HttpContentDecompressor(HTTP/1.1) andDelegatingDecompressorFrameListener(HTTP/2).Recommended Fix
Pass
maxAllocationto all decoder constructors. ForBrotliDecoder, which currently has nomaxAllocationsupport, add the parameter:HttpContentDecompressor.java — pass maxAllocation to all decoders:
DelegatingDecompressorFrameListener.java — same fix at lines 188-210.
BrotliDecoder — add
maxAllocationparameter with the same semantics asZlibDecoder.prepareDecompressBuffer(): set buffer maxCapacity and throwDecompressionExceptionwhen the total decompressed output exceeds the limit.SnappyFrameDecoder — add
maxAllocationparameter with equivalent enforcement.ZstdDecoder — ensure that when
maxAllocationis set, total output across all buffers is bounded (not just per-buffer allocation size).Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Netty susceptible to HTTP/2 Reset Attack with different on-the-wire signature
CVE-2026-50560 / GHSA-563q-j3cm-6jxm
More information
Details
Summary
Netty HTTP/2 max header size handling produces attack similar to HTTP/2 Rapid Reset.
Details
There is a setting in the http2 specification called
SETTINGS_MAX_HEADER_LIST_SIZE. According to the RFC: “This advisory setting informs a peer of the maximum field section size that the sender is prepared to accept, in units of octets.”When a client sends that setting to Netty, it appears that Netty will behave as follows:
Functionally, this should be similar to the http2 reset attack, but with a different on-the-wire signature.
Remediation
When speaking with clients, Netty should potentially treat this as “advisory” and ignore it. It would be best to ignore the SETTINGS_MAX_HEADER_LIST_SIZE setting from clients (or ignore it when sending to clients). According to the spec, a server does not need to honor this advisory setting, and it appears that other http/2 implementations ignore it when acting as a server.
Impact
This is a DDoS attack similar to the HTTP/2 Rapid Reset Attack.
Credit
Jonathan Looney (Engineering, Netflix)
Contact
Ashley Tolbert (Security, Netflix) - artolbert@netflix.com
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Netty HTTP/2: Advertised MAX_CONCURRENT_STREAMS are not enforced
CVE-2026-47244 / GHSA-5x3r-wrvg-rp6q
More information
Details
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
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
netty-codec-http2: ByteBuf Reference-Count Leak in DelegatingDecompressorFrameListener Leads to Memory Exhaustion
CVE-2026-48043 / GHSA-c2gf-v879-257j
More information
Details
Impact
The
DelegatingDecompressorFrameListenerclass orchestrates HTTP/2 decompression by embedding a per-streamEmbeddedChannelthat runs the appropriate decompression codec (gzip, deflate, zstd) and forwards decompressed chunks to a wrapped listener. Each decompressed chunk is a pooledByteBufhanded to an anonymousChannelInboundHandlerAdaptertail handler, which becomes the sole owner responsible for releasing it.A remote peer could send frames that would result in the flow-controller throwing and so trigger a resource leak which at the end might take down the whole JVM due OOME.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.