GHSA-57rv-r2g8-2cj3 CVE-2026-42584
Netty has HttpClientCodec response desynchronization
- Severity
- 7.3 / 10
- Critical · CVSS 3.1
- Exploit chance (EPSS)
- 0.84%
- Chance of exploitation in the next 30 days. Higher than 57.79% of scored vulnerabilities.
- Known exploited
- No
- Not in CISA's catalog
- Weakness
- CWE-444 Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')
- Fix
4.2.13.Final- Upgrade io.netty:netty-codec-http to this version or later
Description
Summary
If HttpClientCodec is configured, there are use cases when a response body from one request, can be parsed as another's.
Details
HttpClientCodec pairs each inbound response with an outbound request by queue.poll() once per response, including for 1xx. If the client pipelines GET then HEAD and the server sends 103, then 200 with GET body, then 200 for HEAD, the queue pairs HEAD with the first 200. The HEAD rule then skips reading that message’s body, so the GET entity bytes stay on the stream and the following 200 is parsed from the wrong offset.
Prerequisites
- HTTP/1.1 pipelining
- HEAD in the pipeline
- The server sends 1xx
PoC
@Test
public void test() {
EmbeddedChannel channel = new EmbeddedChannel(new HttpClientCodec());
assertTrue(channel.writeOutbound(new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/1")));
ByteBuf request = channel.readOutbound();
request.release();
assertNull(channel.readOutbound());
assertTrue(channel.writeOutbound(new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.HEAD, "/2")));
request = channel.readOutbound();
request.release();
assertNull(channel.readOutbound());
String responseStr = "HTTP/1.1 103 Early Hints\r\n\r\n" +
"HTTP/1.1 200 OK\r\nContent-Length: 5\r\n\r\nhello" +
"HTTP/1.1 200 OK\r\n\r\n";
assertTrue(channel.writeInbound(Unpooled.copiedBuffer(responseStr, CharsetUtil.US_ASCII)));
// Response 1
HttpResponse response = channel.readInbound();
assertEquals(HttpResponseStatus.EARLY_HINTS, response.status());
LastHttpContent last = channel.readInbound();
assertEquals(0, last.content().readableBytes());
last.release();
// Response 2
response = channel.readInbound();
assertEquals(HttpResponseStatus.OK, response.status());
last = channel.readInbound();
assertEquals(0, last.content().readableBytes());
last.release();
// Response 3
FullHttpResponse response1 = channel.readInbound();
assertTrue(response1.decoderResult().isFailure());
assertEquals(0, response1.content().readableBytes());
response1.release();
assertFalse(channel.finish());
}
Impact
Integrity/availability of HTTP parsing on that connection, unsafe reuse of the socket.
Affected versions
Maven
| Package | Vulnerable | Fixed in |
|---|---|---|
| io.netty:netty-codec-http | >= 4.2.0.Alpha1, < 4.2.13.Final |
4.2.13.Final |
| io.netty:netty-codec-http | < 4.1.133.Final |
4.1.133.Final |
How to fix
Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.
io.netty:netty-codec-http Maven → 4.2.13.Final
- maven
<dependency><groupId>io.netty</groupId><artifactId>netty-codec-http</artifactId><version>4.2.13.Final</version></dependency>- gradle
implementation("io.netty:netty-codec-http:4.2.13.Final")
Severity breakdown
CVSS 3.1 7.3
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L
- Attack vector
- Network
- Attack complexity
- Low
- Privileges required
- None
- User interaction
- None
- Scope
- Unchanged
- Confidentiality
- Low
- Integrity
- Low
- Availability
- Low
Weakness
CWE-444: Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')
The product acts as an intermediary HTTP agent (such as a proxy or firewall) in the data flow between two entities such as a client and server, but it does not interpret malformed HTTP requests or responses in ways that are consistent with how the messages will be processed by those entities that are at the ultimate destination.
How to prevent it
- Implementation: Use a web server that employs a strict HTTP parsing procedure, such as Apache [REF-433].
- Implementation: Use only SSL communication.
- Implementation: Terminate the client session after each request.
- System Configuration: Turn all pages to non-cacheable.
References
Advisories
Packages
Other links
- github.com/netty/netty/security/advisories/GHSA-57rv-r2g8-2cj3
- access.redhat.com/errata/RHSA-2026:23808
- access.redhat.com/errata/RHSA-2026:24502
- access.redhat.com/errata/RHSA-2026:25123
- access.redhat.com/errata/RHSA-2026:28010
- access.redhat.com/errata/RHSA-2026:36820
- access.redhat.com/errata/RHSA-2026:37390
- access.redhat.com/errata/RHSA-2026:42644
- access.redhat.com/errata/RHSA-2026:49700
- access.redhat.com/errata/RHSA-2026:49701
- access.redhat.com/errata/RHSA-2026:53644
- access.redhat.com/errata/RHSA-2026:53645
- access.redhat.com/errata/RHSA-2026:53646
- access.redhat.com/errata/RHSA-2026:54435
- access.redhat.com/errata/RHSA-2026:65126
- access.redhat.com/errata/RHSA-2026:66488
- access.redhat.com/errata/RHSA-2026:66545
- access.redhat.com/security/cve/CVE-2026-42584
- bugzilla.redhat.com/show_bug.cgi
- security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-42584.json
Timeline
- Published
- Last updated by the source
- Latest EPSS score
Related advisories
| Advisory | Severity | Why it's related |
|---|---|---|
| GHSA-8c42-7qj2-3j46 Netty Vulnerable to Cache Poisoning and Information Disclosure via CORS Vary Header Overwrite | High | Also affects io.netty:netty-codec-http |
| GHSA-gcjf-9mgh-3p7g Netty: CRLF Injection via Multipart Filename in Netty HttpPostRequestEncoder | Medium | Also affects io.netty:netty-codec-http |
| GHSA-q4f6-jm68-57ww Netty: [HttpContentEncoder] Unbounded Per-Connection Queue Growth via HTTP/1.1 Pipelining Leads to Denial of Service | High | Also affects io.netty:netty-codec-http |
| GHSA-4mp9-239f-g9hg Netty: WebSockets V07/V08 handshaker missing Connection/Upgrade validation | High | Also affects io.netty:netty-codec-http |
| GHSA-6cqp-g7gg-8hr5 Netty: Security Control Bypass via CORS Short-Circuit Failure | Medium | Also affects io.netty:netty-codec-http |
| GHSA-jppx-w49h-x2qq Netty: [SpdyHttpDecoder] ByteBuf Reference Leak on RST_STREAM Leads to Native Memory Exhaustion | High | Also affects io.netty:netty-codec-http |
| GHSA-mvh2-crg5-v77c Netty SPDY zlib header block continues decoded expansion after maxHeaderSize truncation | High | Also affects io.netty:netty-codec-http |
| GHSA-6jqx-86gh-f27w Netty SPDY SETTINGS frame count materializes unbounded settings map | High | Also affects io.netty:netty-codec-http |
MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.
Check your repos with MergeHarbor