The vulnerability lies in Netty's HttpObjectDecoder class, which is responsible for parsing HTTP requests. The core of the issue is a failure to adhere to RFC 9112 regarding the Transfer-Encoding header. The specification mandates that if chunked transfer coding is used, it must be the final encoding listed in the header. If it is not, the server must reject the request.
Before the patch, Netty's HttpObjectDecoder would incorrectly accept a header such as Transfer-Encoding: chunked, identity. It would treat the request as chunked and ignore the Content-Length header. When Netty is deployed behind a front-end proxy that does not perform the same validation and instead prioritizes the Content-Length header, a desynchronization occurs, leading to an HTTP Request Smuggling vulnerability.
The fix was applied in the readHeaders method, which is a private method called by the public decode method of the HttpObjectDecoder class. The patch adds a check to ensure that if Transfer-Encoding is present and contains chunked, then chunked must be the last value. If this check fails, it throws an IllegalArgumentException, effectively rejecting the malformed request.
Therefore, the function io.netty.handler.codec.http.HttpObjectDecoder.decode is the primary vulnerable function. It is the main entry point for the decoding logic and would be present in any runtime profile or stack trace when a malicious request triggers this vulnerability.