CVE-2026-93565: Io.netty/netty-codec-http: netty rtspdecoder method-token smuggling via trailing control byte
Summary RtspMethods.valueOf() silently strips trailing control bytes (any character with code point <= 0x20, the full range that String.trim() removes) before performing a cache lookup against its ten pre-populated method constants. A wire-delivered RTSP request whose method token ends with a trailing control byte — for example PLAY\x00 or PLAY\r, immediately before the separating space — is decoded by RtspDecoder as a fully successful PLAY request, with decoderResult().isSuccess() == true and request.method() == RtspMethods.PLAY (same object reference as the cached singleton). The application layer cannot distinguish this from a clean PLAY request. This is the same root cause as #16723 and #16971, in a sibling that those fixes did not reach. The fix for HttpMethod hardened HttpMethod.valueOf() directly, but RtspMethods.valueOf() has its own independent checkNonEmptyAfterTrim() call that runs before the cache lookup — meaning a trailing-control-byte token hits the cache before the hardened HttpMethod constructor ever sees it. Reproduction Minimal wire-level reproduction Send the following raw bytes to any Netty-based RTSP server using R
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
maven:io.netty:netty-codec-httpto a version that resolves this vulnerability.Fixed in 4.2.0.Final - Upgrade
Upgrade
maven:io.netty:netty-codec-httpto a version that resolves this vulnerability.Fixed in 4.2.17.Final - Upgrade
Upgrade
maven:io.netty:netty-codec-httpto a version that resolves this vulnerability.Fixed in 4.1.137.Final - Compensating control
If a Netty-based RTSP server/proxy makes authorization/routing decisions based on request.method(), add a compensating control upstream of Netty (e.g., reject or normalize RTSP method tokens containing trailing control bytes such as NUL (0x00) or CR (0x0D) immediately before the space).
Event History
Frequently Asked Questions
What traffic and deployment conditions make this relevant?
The issue is relevant to Netty-based RTSP servers that use RtspDecoder to process wire-delivered RTSP requests. An attacker can send a method token with a trailing control byte immediately before the separating space, such as PLAY followed by a null byte or carriage return.
Does exploitation require authentication or user interaction?
No. The supplied severity vector indicates network reachability, low attack complexity, no privileges required, and no user interaction.
How would a malformed request appear to the application?
A request such as PLAY followed by a trailing control byte is decoded as a successful request with decoderResult().isSuccess() true. Its method is RtspMethods.PLAY, using the same cached singleton reference as a clean PLAY request, so the application layer cannot distinguish it from a normal PLAY request.