MEDIUM 5.3

CVE-2026-50020: Netty HTTP Request Smuggling via Control Character Stripping

Netty, a widely-used Java network framework, has a flaw in how it processes incoming HTTP requests. Before reading the first line of an HTTP request, Netty discards control characters (like NUL bytes and other non-printable characters) along with whitespace. While the HTTP specification allows servers to ignore blank lines before a request, Netty goes much further by silently accepting non-standard control bytes that RFC 9112 never intended servers to strip. In architectures where multiple components handle the same traffic—such as when requests flow through a front-end proxy to a back-end Netty service—this difference in character handling can create confusion about where one request ends and another begins, potentially allowing attackers to smuggle malicious requests or bypass security controls.

Source data · NVD / CISA · public domain

CVSS
3.1 · 5.3 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Weaknesses (CWE)
CWE-444
Affected products
1 configuration(s)
Published / Modified
2026-06-12 / 2026-06-17

NVD description (verbatim)

Netty is a network application framework for development of protocol servers and clients. Prior to versions 4.1.135.Final and 4.2.15.Final, before reading the first request-line, `HttpObjectDecoder` skips every byte for which `Character.isISOControl(b)` is `true` (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. Versions 4.1.135.Final and 4.2.15.Final patch the issue.

4 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability resides in HttpObjectDecoder's request-line parsing logic. Prior to the patched versions, the decoder invokes Character.isISOControl(b) to filter bytes 0x00–0x1F and 0x7F before reading the request-line, discarding them along with all whitespace characters. RFC 9112 §2.2 prescribes a narrower robustness allowance: servers should ignore only empty CRLF sequences (CR LF pairs with no intervening bytes) preceding the request-line, a provision designed for HTTP/1.0 POST workarounds. By consuming non-CRLF control characters, Netty deviates from this specification. When an HTTP request flows through multiple processing stages—particularly in pipelined HTTP/1.1 or multiplexed scenarios—a front-end component and the Netty back-end may disagree on request boundaries. An attacker can craft a request containing embedded control bytes; the front-end parses it as one request, but Netty strips the control bytes and parses it as a different request, creating an opportunity for request-smuggling or cache-poisoning attacks.

Business impact

This vulnerability enables request-smuggling attacks, which can lead to security-control bypass, cache poisoning, or unauthorized access to backend resources. In multi-tier architectures—common in modern cloud deployments—an attacker may craft a request that appears safe to a front-end web application firewall or load balancer but is reinterpreted by the Netty backend after control-byte stripping. The consequence ranges from credential theft (via request smuggling to steal authentication tokens) to website defacement or unauthorized data access. Organizations relying on Netty for HTTP service delivery, especially those positioned behind proxies or WAFs, face elevated risk of request-routing manipulation.

Affected systems

Netty versions prior to 4.1.135.Final and 4.2.15.Final are affected. Any application or service that (1) uses Netty as its HTTP server framework, (2) processes HTTP requests in pipelined or multiplexed transports, and (3) is positioned behind a front-end component (proxy, load balancer, WAF) that does not strip ISO control characters, is at risk. This includes microservice architectures, API gateways, and REST service backends built on Netty. Java applications in cloud or containerized environments are particularly relevant.

Exploitability

The CVSS 3.1 score of 5.3 (MEDIUM, network-accessible, no authentication required) reflects that exploitation requires network access and careful crafting of HTTP requests but does not require user interaction or elevated privileges. However, practical exploitation depends on the presence of a multi-tier architecture: the attack only works if a front-end component behaves differently from Netty with respect to control characters. In deployments where Netty is the sole HTTP entry point, the attack surface is reduced. In typical cloud architectures with proxies or load balancers, the conditions for exploitation are likely present. No public exploit code is known to be widely available, but the technique is conceptually straightforward for skilled attackers.

Remediation

Upgrade Netty to version 4.1.135.Final or later for the 4.1.x line, or 4.2.15.Final or later for the 4.2.x line. These releases modify HttpObjectDecoder to strictly adhere to RFC 9112, accepting only empty CRLF sequences before the request-line and rejecting other control characters. Verify against the official Netty release notes and your dependency management tool to confirm the upgrade path. Organizations unable to patch immediately should prioritize architectural review: if possible, ensure that front-end proxies are configured to reject or normalize requests containing control characters before they reach Netty, reducing the window for smuggling attacks.

Patch guidance

1. Identify all applications and services in your environment using Netty. Check your Maven pom.xml, Gradle build.gradle, or equivalent dependency files for netty-codec-http versions. 2. For 4.1.x users: upgrade to 4.1.135.Final or later. 3. For 4.2.x users: upgrade to 4.2.15.Final or later. 4. After upgrading, rebuild, test in a staging environment, and deploy to production. 5. Verify that the patched version is in use by checking classpath or running version-detection tooling. 6. Consider using dependency-management tools (e.g., Maven Enforcer, Gradle constraint) to prevent accidental downgrades.

Detection guidance

Monitor HTTP request logs for unusual byte sequences or control characters in request paths or headers. While legitimate HTTP should not contain 0x00–0x1F or 0x7F characters (except CR, LF, and TAB in specific contexts), attackers may embed them to exploit the control-character stripping. Implement WAF or proxy rules that detect and block requests containing non-standard control bytes. Additionally, compare request boundaries as seen by front-end components versus backend logs: discrepancies may indicate smuggling attempts. Intrusion-detection systems should flag HTTP requests containing NUL, SOH, STX, or other non-printable control bytes.

Why prioritize this

Although the CVSS score is MEDIUM, the vulnerability warrants prompt attention because (1) it is network-accessible with no authentication, (2) request-smuggling attacks can undermine multiple layers of security infrastructure, (3) Netty is widely deployed in microservice and cloud architectures where the multi-tier conditions for exploitation are common, and (4) the patch is straightforward to apply. Organizations should prioritize Netty upgrades in their patch schedule, especially for internet-facing services and those behind proxies or WAFs.

Risk score, explained

CVSS 3.1 assigns a score of 5.3 (MEDIUM) based on: Attack Vector = Network (exploitable remotely), Attack Complexity = Low (no special conditions beyond crafting malicious HTTP), Privileges Required = None, User Interaction = None, Scope = Unchanged (impact is limited to the Netty service, not system-wide), Confidentiality = None (no data disclosure), Integrity = Low (request smuggling can modify behavior or contents), and Availability = None (no denial-of-service component). The MEDIUM rating appropriately reflects the need for a multi-tier architecture and careful request crafting, but does not diminish the practical risk in common deployments.

Frequently asked questions

Does Netty used as a client (not a server) pose any risk?

The vulnerability is specific to HttpObjectDecoder's server-side request-line parsing. Netty clients are not affected, as they do not parse incoming HTTP responses in the same way. However, if your application acts as both a server and a client, the server component should still be patched.

If I am behind a WAF or proxy, am I protected?

Not necessarily. A WAF or proxy that does not explicitly filter or reject control characters will pass them through to Netty, where they are silently stripped. You cannot rely on the WAF alone; upgrading Netty remains essential. That said, a WAF configured to block requests containing NUL and other control bytes will reduce risk until patches are deployed.

Will the patch break any legitimate HTTP clients?

No. The patch brings Netty into compliance with RFC 9112, which is the standard that well-behaved HTTP clients already follow. Legitimate clients do not send NUL bytes or non-CRLF control characters in HTTP requests, so the stricter parsing should not affect normal traffic.

How do I know if my application is vulnerable?

Check your project's dependency manifest (pom.xml for Maven, build.gradle for Gradle, etc.) for the Netty version. If you are using netty-codec-http version 4.1.134.Final or earlier, or 4.2.14.Final or earlier, your application is vulnerable. Verify against the official Netty repository or your package manager.

This analysis is provided for informational and educational purposes. The information herein is based on the CVE record and supporting documentation available at the time of publication. Organizations should verify all patch versions against official vendor advisory documentation before deploying updates. This vulnerability does not appear on the CISA Known Exploited Vulnerabilities (KEV) catalog, but absence from KEV does not imply that exploitation in the wild is unlikely. Security teams should assess their specific architectural context and deploy patches according to their own risk management policies. No exploit code or weaponized proof-of-concept is provided herein. Source: NVD (public-domain), retrieved 2026-07-20. Analysis generated by SEC.co (claude-haiku-4-5).