CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-50020

CVE-2026-50020: HTTP Request Smuggling in Netty HttpObjectDecoder via Arbitrary Leading Control Bytes

Alon Barad
Alon Barad
Software Engineer

Jun 15, 2026·7 min read·65 visits

Executive Summary (TL;DR)

Netty's HTTP decoder silently skips leading non-CRLF control characters (like SOH or NUL), allowing attackers to smuggle HTTP requests through reverse proxies.

CVE-2026-50020 is a medium-severity HTTP Request Smuggling/Response Smuggling vulnerability (CWE-444) within the Netty asynchronous network application framework. The flaw resides in Netty's HTTP codec implementation, specifically the HttpObjectDecoder class, which silently consumes arbitrary ISO control bytes preceding the first request line.

Vulnerability Overview

Netty is an asynchronous, event-driven network application framework used extensively in the enterprise Java ecosystem for building high-performance protocol servers and clients. The framework serves as the underlying networking layer for major projects, including Spring Boot WebFlux, Vert.x, Quarkus, and various API gateways. Because Netty handles raw socket parsing directly, flaws within its parsing logic expose a highly critical attack surface to the public internet.

This specific vulnerability, tracked as CVE-2026-50020 and natively as GHSA-hvcg-qmg6-jm4c, resides in Netty's HTTP codec module, specifically inside the HttpObjectDecoder class. The component is responsible for parsing raw incoming byte streams into structured HTTP request and response objects. A parsing inconsistency in this decoder allows remote attackers to perform HTTP request smuggling, a class of vulnerability categorized under CWE-444.

The vulnerability occurs when Netty acts as a backend server positioned behind an intermediary reverse proxy, load balancer, or web application firewall (WAF). If the upstream proxy handles invalid leading control characters differently than Netty, an attacker can exploit this discrepancy to bypass front-end security controls. The impact is restricted to architectures where persistent TCP connections are shared or reused between the proxy and the backend server.

Root Cause Analysis

The root cause of CVE-2026-50020 lies in Netty's overly lenient handling of leading characters preceding the first HTTP request line. According to the HTTP/1.1 specification outlined in RFC 9112 §2.2, a robust HTTP parser is permitted to tolerate empty lines before a request. Specifically, the specification states that a server expecting to parse a request line should ignore at least one empty line (CRLF) received prior to that request line. This allowance is restricted strictly to carriage return and line feed characters.

In vulnerable versions of Netty, the parser implements a broader robustness logic that goes far beyond the RFC mandate. The HttpObjectDecoder class attempts to skip what it classifies as control characters and whitespace before beginning the extraction of the request method, URI, and version. To identify these bytes, Netty utilizes the static array ISO_CONTROL_OR_WHITESPACE initialized using Java's Character.isISOControl(b) helper method.

The application of Character.isISOControl introduces a major security deviation. In the Java language specification, this method evaluates to true for any byte value within the range of 0x00 through 0x1F, as well as 0x7F. This range includes characters such as NUL (0x00), SOH (0x01), STX (0x02), and other control sequences that are completely distinct from standard CRLF whitespace characters. When Netty encounters these bytes preceding an HTTP request line, it silently discards them instead of rejecting the stream as malformed.

Code Analysis & Fix Verification

To understand the architectural defect, we must examine the implementation of LineParser.skipControlChars in the vulnerable versions. The method utilizes a ByteProcessor to loop over the inbound buffer, advancing the reader index past any byte that matches the ISO_CONTROL_OR_WHITESPACE map. This processing logic effectively ignores illegal bytes, shifting the starting index of the actual HTTP request line forward.

// Vulnerable logic in HttpObjectDecoder.java
private static void skipControlChars(ByteBuf buffer) {
    for (;;) {
        int i = buffer.forEachByte(SKIP_CONTROL_CHARS_BYTES);
        if (i == -1) {
            buffer.readerIndex(buffer.writerIndex());
            break;
        }
        buffer.readerIndex(i);
        // Arbitrary control characters (0x00-0x1F) are silently consumed
    }
}

The patch introduced in versions 4.1.135.Final and 4.2.15.Final addresses this behavior by replacing the generic ISO control check with a strict validation routine. The updated logic verifies that only valid CRLF sequences are bypassed. Any occurrence of non-CRLF control characters preceding the request line now immediately terminates the parsing sequence and registers a decoder failure, preventing the smuggling of subsequent requests.

By ensuring that non-CRLF bytes trigger an immediate protocol violation, the updated parser aligns with RFC 9112 §2.2. The fix effectively eliminates the semantic gap between the proxy and Netty. Because the backend now rejects any leading bytes that are not CRLF, the proxy's view of the request stream remains synchronized with the backend's interpretation.

Exploitation & Attack Methodology

Exploitation of CVE-2026-50020 relies on establishing a desynchronized state between the front-end reverse proxy and the backend Netty server. An attacker begins by crafting an HTTP pipelined payload containing two logical requests. The first request is a standard, syntactically valid HTTP POST request containing a body, while the second is a smuggled request prefixed with an arbitrary non-CRLF control character like SOH (0x01).

The front-end proxy inspects the initial POST request, reads the Content-Length header, and maps the entire body (including the smuggled request and its leading SOH byte) as payload data. It does not parse the payload as an independent HTTP request because it is contained within the POST request boundary. The proxy then routes the combined byte stream to the Netty backend over a shared, persistent connection.

When the Netty backend receives the stream, it processes the first POST request and executes the associated application handler. Once completed, Netty looks for the next request on the same TCP channel. It encounters the SOH byte, identifies it as an ISO control character, and silently ignores it. Netty then processes the immediate subsequent bytes as a brand new, independent HTTP request, allowing the attacker to bypass the proxy's routing restrictions.

Impact Assessment

The direct impact of CVE-2026-50020 is a complete bypass of front-end security controls. In modern architectures, reverse proxies are frequently used to enforce authentication, inspect authorization headers, and restrict access to administrative endpoints. By smuggling requests, an attacker can query these restricted endpoints directly because the proxy only validates the outer POST request.

Beyond access control bypasses, this request smuggling flaw can lead to cache poisoning if the front-end proxy caches responses based on request URIs. An attacker can orchestrate a scenario where a smuggled request causes the backend to return a malicious response, which the proxy then associates with a public URI. Consequently, subsequent legitimate users requesting that public URI are served the poisoned cache content.

The CVSS v3.1 base score is calculated at 5.3 (Medium) with the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N. While the technical severity is medium because the vulnerability requires a specific proxy-backend configuration, the operational risk is high due to the ubiquity of Netty in cloud-native Java environments. Organizations employing Netty backends behind load balancers must prioritize patching to maintain boundary integrity.

Remediation & Mitigation Guidance

Remediation requires upgrading Netty components to secure versions. For environments utilizing the 4.1.x release line, teams must update netty-codec-http to version 4.1.135.Final or higher. For applications built on the 4.2.x release line, the dependency must be updated to version 4.2.15.Final or higher. Transitive dependency resolution tools should be configured to enforce these versions globally.

In scenarios where immediate upgrading is unfeasible, several defense-in-depth mitigations can reduce the threat vector. The most effective workaround is to disable connection keep-alive or pipeline reuse between the proxy and the Netty backend. If the proxy establishes a fresh TCP socket for every individual backend request, the boundary desynchronization necessary for request smuggling cannot occur.

Additionally, migrating the backend connection protocol from HTTP/1.1 to HTTP/2 offers robust protection. HTTP/2 utilizes binary framing to separate requests, rendering the protocol immune to text-delimited parsing errors like leading-byte smuggling. Finally, security teams can configure their front-end proxies or WAFs to detect and reject any request payloads containing raw binary control characters in the body of HTTP/1.1 requests.

Official Patches

Netty ProjectNetty 4.1.135.Final Release Notes
Netty ProjectNetty 4.2.15.Final Release Notes

Technical Appendix

CVSS Score
5.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
EPSS Probability
0.23%
Top 86% most exploited

Affected Systems

io.netty:netty-codec-http

Affected Versions Detail

Product
Affected Versions
Fixed Version
netty-codec-http
Netty Project
>= 4.1.0, < 4.1.135.Final4.1.135.Final
netty-codec-http
Netty Project
>= 4.2.0, < 4.2.15.Final4.2.15.Final
AttributeDetail
CWE IDCWE-444
Attack VectorNetwork
CVSS v3.1 Score5.3 (Medium)
EPSS Score0.00232 (0.23%)
EPSS Percentile13.85%
Exploit StatusProof of Concept (PoC)
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
CWE-444
Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')

The application fails to properly parse or validate incoming HTTP requests in a uniform manner, leading to request boundary confusion.

Vulnerability Timeline

Vulnerability published and GitHub Security Advisory GHSA-hvcg-qmg6-jm4c released
2026-06-12
Netty versions 4.1.135.Final and 4.2.15.Final released containing fixes
2026-06-12
NVD assigns official CVSS v3.1 severity metrics
2026-06-15

References & Sources

  • [1]GitHub Security Advisory GHSA-hvcg-qmg6-jm4c
  • [2]CVE Record on CVE-2026-50020
  • [3]NVD Vulnerability Detail
  • [4]Wiz Vulnerability Database

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-11748
6.9

CVE-2026-11748: Unauthenticated LDAP Injection in Central Dogma Server Authentication

An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.

Alon Barad
Alon Barad
9 views•6 min read
•1 day ago•CVE-2026-11746
9.4

CVE-2026-11746: Use of Hard-coded ZooKeeper Replication Secret 'ch4n63m3' in Central Dogma Server

CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.

Amit Schendel
Amit Schendel
7 views•6 min read
•1 day ago•CVE-2026-56665
4.2

CVE-2026-56665: Logical Validation Bypass in ZITADEL External JWT Identity Provider

A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.

Alon Barad
Alon Barad
7 views•7 min read
•1 day ago•CVE-2026-59149
6.5

CVE-2026-59149: Sibling Directory Path Traversal in Mockoon Backend Server

CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.

Amit Schendel
Amit Schendel
9 views•5 min read
•1 day ago•CVE-2026-59148
8.8

CVE-2026-59148: Unauthenticated Administrative API and CORS Misconfiguration in Mockoon

An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.

Alon Barad
Alon Barad
11 views•6 min read
•1 day ago•CVE-2026-56666
4.8

CVE-2026-56666: Account Takeover via Improper Email Verification in ZITADEL Federated Identity Handler

An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.

Amit Schendel
Amit Schendel
7 views•7 min read