Update all non-major dependencies (patch) - #246
Merged
Conversation
|
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.



This PR contains the following updates:
21.0.10→21.0.1121.0.10→21.0.114.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.15.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.15.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.Final4.2.12.Final→4.2.16.FinalWarning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
Netty has an IPv6 Subnet Filter Bypass via Incorrect Comparator Masking
CVE-2026-44249 / GHSA-3qp7-7mw8-wx86
More information
Details
Summary
An attacker can bypass IPv6 subnet rules due to an incorrect masking operation in IpSubnetFilterRule.compareTo(). Valid public IP addresses can bypass the restrictions.
Details
io.netty.handler.ipfilter.IpSubnetFilterRule#compareTo(java.net.InetSocketAddress)method performs a bitwise AND between the incoming IP address and the configured networkAddress, instead of the subnetMask.Impact
Access Control Bypass. Attacker can bypass IpSubnetFilter IPv6 access controls.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:HReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty: SNI handler pre-allocates up to 16 MiB from nine attacker bytes
CVE-2026-45416 / GHSA-x4gw-5cx5-pgmh
More information
Details
SslClientHelloHandler.decode() reads the 24-bit TLS handshake length and, when the ClientHello does not fit in the first record, eagerly allocates
ctx.alloc().buffer(handshakeLength)(line 161). The guard at line 140 ishandshakeLength > maxClientHelloLength && maxClientHelloLength != 0, and the commonly-used SniHandler/AbstractSniHandler constructors (SniHandler(Mapping), SniHandler(AsyncMapping), AbstractSniHandler()) pass maxClientHelloLength=0 and handshakeTimeoutMillis=0, so the length guard is disabled and no timeout is scheduled. A 16 MiB request exceeds the default pooled chunk size and becomes a huge/unpooled allocation performed immediately. The buffer is retained in the handler until the channel closes.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: Wrapping plain trust manager silently disables hostname verification
CVE-2026-50010 / GHSA-c653-97m9-rcg9
More information
Details
SimpleTrustManagerFactory.engineGetTrustManagers() and related paths wrap any user-supplied plain X509TrustManager in X509TrustManagerWrapper, which extends X509ExtendedTrustManager but implements the 3-arg checkServerTrusted(chain, authType, SSLEngine) by discarding the SSLEngine and calling the 2-arg delegate. Because the object now IS an X509ExtendedTrustManager, neither SunJSSE's internal AbstractTrustManagerWrapper nor Netty's own OpenSslX509TrustManagerWrapper will re-wrap it to add endpoint-identification. Consequently, even though Netty 4.2 sets endpointIdentificationAlgorithm="HTTPS" by default, a client built with
SslContextBuilder.forClient().trustManager(somePlainX509TrustManager)performs no hostname verification at all.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty: DNS Cache Poisoning due to Predictable PRNG and Default Static Source Port
CVE-2026-45673 / GHSA-xmv7-r254-6q78
More information
Details
Summary
Netty's DNS resolver uses a predictable PRNG for generating DNS transaction IDs and defaults to a static UDP source port. This combination reduces the entropy of DNS queries, enabling DNS Cache Poisoning (Kaminsky attack).
Details
Two factors contribute to this vulnerability in io.netty.resolver.dns:
DnsQueryIdSpacemanages 16-bit transaction IDs in buckets of 16,384 IDs. It initializes only the first bucket. When an ID is returned, it is pushed back into the bucket at a random index generated by java.util.concurrent.ThreadLocalRandom:Because ThreadLocalRandom is a predictable LCG and the resolver operates within a single bucket, the sequence of IDs is predictable once the PRNG state is mathematically recovered.
DnsNameResolverBuilderdefaults to achannelStrategyofChannelPerResolver. This binds the DatagramChannel once, resulting in a static source port for all subsequent queries.Combined, a static source port and predictable transaction IDs reduces the entropy required to secure DNS resolution against spoofing.
Impact
DNS Cache Poisoning. Downstream applications using the default Netty DNS resolver may connect to malicious IPs, leading to traffic interception or MitM attacks.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty Vulnerable to DNS Cache Poisoning via Missing Bailiwick Checks in CNAME Records
CVE-2026-45674 / GHSA-676x-f7gg-47vc
More information
Details
Summary
Netty's DnsResolveContext fails to validate the origin (bailiwick) of CNAME records in DNS responses.
Details
In
io.netty.resolver.dns.DnsResolveContext#buildAliasMap, the resolver processes the ANSWER section of a DNS response and blindly caches all CNAME records it finds.According to https://datatracker.ietf.org/doc/html/rfc5452#section-6
Impact
DNS Cache Poisoning (Bailiwick Bypass). Any application using Netty's DNS resolver is impacted.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty has Insufficient Bailiwick Validation for NS Records
CVE-2026-47691 / GHSA-5pvg-856g-cp85
More information
Details
Summary
Netty's
DnsResolveContextinsufficiently validates the bailiwick of NS records, enabling DNS Cache Poisoning. An attacker controlling an authoritative name server for a subdomain can poison the cache for parent domains (like.co.uk).Details
In
io.netty.resolver.dns.DnsResolveContext.AuthoritativeNameServerList#addmethod accepts any NS record from the AUTHORITY section as long as the record's name is a suffix of the questionName.This means if the resolver queries evil.co.uk., it will accept an NS record claiming authority over co.uk.. Subsequently, the
handleWithAdditionalmethod caches the associated A records from the ADDITIONAL section directly into theauthoritativeDnsServerCacheunder the parent domain's key (co.uk.). This bypasses standard bailiwick rules, where a server authoritative for a subdomain should not be trusted to provide authoritative records for its parent. The poisoned cache is then used for all future resolutions under co.uk..The
io.netty.resolver.dns.DnsResolveContext.AuthoritativeNameServerList#cachemethod only prevents caching if the record is for the root zone (dots == 1).Impact
DNS Cache Poisoning. Any application using Netty's DNS resolver is impacted.
Severity
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:NReferences
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: [codec-http2] Lack of Host Header Deduplication in HTTP/2→HTTP/1.x Translation Leads to Request Routing Bypass
CVE-2026-59900 / GHSA-c69g-56f8-xwqj
More information
Details
Netty's HTTP/2-to-HTTP/1.x translation layer (
Http2StreamFrameToHttpObjectCodecandInboundHttp2ToHttpAdapter) fails to deduplicate or validateHostheaders when an HTTP/2 client supplies both the:authoritypseudo-header and a literalhostheader in a single HEADERS frame. The translator maps:authoritytoHostand separately copies the literalhostheader, producing anHttpRequestobject containing twoHostheaders with attacker-controlled differing values.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty: HttpObjectDecoder skips arbitrary initial control characters when only initial CRLF characters are permitted
CVE-2026-50020 / GHSA-hvcg-qmg6-jm4c
More information
Details
Summary
Before reading the first request-line,
HttpObjectDecoderskips every byte for whichCharacter.isISOControl(b)istrue(0x00–0x1F and 0x7F) as well as all whitespace.RFC 9112 §2.2 only asks servers to ignore empty CRLF lines preceding the request-line —
a carefully scoped robustness allowance intended to handle HTTP/1.0 POST workarounds.
Silently absorbing NUL bytes, SOH, STX, and other non-CRLF control characters goes
significantly beyond this, and can be exploited for request-boundary confusion in pipelined
or multiplexed transports where a front-end component treats those bytes differently.
Affected Code
codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.javaISO_CONTROL_OR_WHITESPACEstatic initialiser — marks all ISO control charscodec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.javaSKIP_CONTROL_CHARS_BYTESByteProcessor— skips the entire setcodec-http/src/main/java/io/netty/handler/codec/http/HttpObjectDecoder.javaLineParser.skipControlChars— advancesreaderIndexpast all matching bytesSpecification Analysis
RFC 9112 §2.2 — Message Parsing
Deviation
The RFC names a single permitted exception: an empty line (bare CRLF, i.e. the two-byte
sequence
\r\n). TheISO_CONTROL_OR_WHITESPACEtable is initialised as:Character.isISOControlreturnstruefor0x00–0x1Fand0x7F. This includes NUL(
0x00), SOH (0x01), STX (0x02), BEL (0x07), DEL (0x7F), and every other non-CRLFcontrol character. The
SKIP_CONTROL_CHARSstate runs this scan unconditionally before thefirst
READ_INITIAL, meaning any sequence of such bytes prepended to a request is silentlyconsumed.
A load balancer or TLS terminator that does not perform the same scan sees a different
message boundary than Netty does, which is the basis of a request-desync / smuggling attack.
Suggested Unit Test
Add to
HttpRequestDecoderTest.java.Current behaviour (unfixed):
skipControlCharsadvances past0x00and0x01becauseboth are in
ISO_CONTROL_OR_WHITESPACE; the request parses normally,isFailure()isfalse→ test fails.Expected behaviour after fix: only CRLF empty lines are tolerated; non-CRLF control
bytes produce an error,
isFailure()istrue→ test passes.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty SPDY SETTINGS frame count materializes unbounded settings map
CVE-2026-55831 / GHSA-6jqx-86gh-f27w
More information
Details
Summary
Netty's SPDY SETTINGS decoder accepts a peer-declared SETTINGS entry count up to the 24-bit frame-length limit and materializes every unique setting ID in
DefaultSpdySettingsFramewithout an implementation-level count cap. A remote SPDY/3.1 peer can send one syntactically valid roughly 2 MiB SETTINGS frame that creates 262144 map entries, amplifying network input into heap growth and ordered-map insertion work.Details
Inbound SPDY bytes enter
SpdyFrameCodec.decode()and are passed directly to the frame decoder. The decoder reads the peer-controlled flags and 24-bit frame length from the common header, then accepts SETTINGS frames with onlylength >= 4. For SETTINGS payloads, it reads the peer-controllednumSettingsfield and validates only that the remaining payload is divisible into 8-byte entries and exactly matches that count. Each accepted entry then supplies an attacker-controlled 24-bit ID and value, and the normal delegate path forwards it intospdySettingsFrame.setValue(). The sink isDefaultSpdySettingsFrame: it backs settings with aTreeMap, checks only that IDs fit the SPDY 24-bit maximum, and inserts a newSettingfor each previously unseen ID. There is no count budget between the wire-format count validation and the TreeMap insertion site.PoC
poc.zip
run with
expected output:
The
NETTY_SPDY_SETTINGS_COUNT_MAP_TRIGGEREDline means the harness decoded the crafted SETTINGS frame and observed all 262144 peer-selected IDs in the resulting settings map. Thewire_bytes=2097164,first_value=1, andlast_value=262144fields distinguish this from a setup failure: they show the exact oversized frame was accepted and fully materialized.Impact
remote unauthenticated network peer that can speak SPDY/3.1 to a Netty pipeline containing
SpdyFrameCodeccan trigger resource-exhaustion denial of service. The required guards are satisfied by a complete valid SETTINGS frame using the expected SPDY version, a length of4 + numSettings * 8, and IDs within the accepted 24-bit range; the verified PoC usesnumSettings=262144andwire_bytes=2097164. On that input, Netty materializes 262144 attacker-controlled entries in a TreeMap-backedDefaultSpdySettingsFrame, with local runs observing about 17-18 MiB of heap growth per decoded frame plus CPU work for ordered-map insertion.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: CRLF Injection via Multipart Filename in Netty HttpPostRequestEncoder
CVE-2026-59921 / GHSA-gcjf-9mgh-3p7g
More information
Details
Security Vulnerability Report: CRLF Injection via Multipart Filename in Netty HttpPostRequestEncoder
1. Vulnerability Summary
io.netty.handler.codec.http.multipart.HttpPostRequestEncoderCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N2. Affected Components
The following classes in the
codec-httpmodule are affected:io.netty.handler.codec.http.multipart.HttpPostRequestEncoder— directly concatenates unvalidated filename/name intoContent-DispositionMIME headers (lines 519, 633, 674, 682, 686-688)io.netty.handler.codec.http.multipart.DiskFileUpload—setFilename()only checks null (line 78)io.netty.handler.codec.http.multipart.MemoryFileUpload—setFilename()only checks null (line 60)io.netty.handler.codec.http.multipart.MixedFileUpload—setFilename()delegates without validation (line 62)3. Vulnerability Description
Netty's
HttpPostRequestEncoderconstructs multipart HTTP request bodies by directly concatenating user-supplied filenames and field names intoContent-DispositionMIME headers without validating or sanitizing CRLF characters (\r\n). Since MIME headers are delimited by CRLF, an attacker who controls the filename can inject arbitrary MIME headers into the multipart body part.Root Cause
In
HttpPostRequestEncoder.java, multiple code paths directly embedfileUpload.getFilename()into header strings:The
setFilename()method in allFileUploadimplementations only checks for null:Comparison with Similar Fixed CVEs
This vulnerability follows the same pattern as:
SmtpUtils.validateSMTPParameters()HttpUtil.validateRequestLineTokens()The multipart encoder has no equivalent validation for filenames or field names.
4. Exploitability Prerequisites
This vulnerability is exploitable when:
HttpPostRequestEncoderto construct multipart HTTP requestsCommon affected patterns:
5. Attack Scenarios
Scenario 1: Content-Type Override via Filename Injection
An attacker uploads a file with a crafted filename to override the Content-Type of the multipart body part, potentially enabling stored XSS:
Wire format:
If the receiving server parses the first
Content-Type, the file is treated as HTML instead of JPEG, enabling XSS when the file is served back.Scenario 2: Arbitrary MIME Header Injection
Injects arbitrary headers into the multipart body part that may be processed by downstream middleware or application logic.
Scenario 3: Multipart Boundary Confusion
By injecting a new boundary delimiter, the attacker can:
6. Proof of Concept
Full Runnable PoC Source Code (MultipartFilenameInjectionPoC.java)
How to Compile and Run
PoC Execution Output (Verified on Netty 4.2.12.Final)
7. Impact Analysis
application/octet-streamtotext/htmlto serve executable content<script>tags via Content-Type override when uploaded files are served back8. Remediation Recommendations
Option 1: Validate in FileUpload.setFilename() (Recommended)
Option 2: Sanitize in HttpPostRequestEncoder (Defense-in-Depth)
Escape or reject CRLF characters when building Content-Disposition headers:
Option 3: RFC 2231/5987 Encoding for Filenames
Use proper RFC 2231 encoding for filenames with special characters:
9. References
Severity
CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Netty: WebSockets V07/V08 handshaker missing Connection/Upgrade validation
CVE-2026-59898 / GHSA-4mp9-239f-g9hg
More information
Details
Summary
An attacker can force WebSocket upgrade via the lax V07 (or V08) handshaker by sending
Sec-WebSocket-Version: 7and omittingConnection: Upgrade/Upgrade: websocketheaders, completing a protocol switch that a proxy would not recognize as an Upgrade request and enabling HTTP request smuggling / protocol-confusion attacks.Severity