# h3 v1 请求走私漏洞
## 概述
H3 是一个为高性能和可移植性设计的极简 H(TTP) 框架。在版本 1.15.5 之前存在一个关键的 HTTP 请求走私漏洞。
## 影响版本
版本 < 1.15.5
## 细节
`readRawBody` 函数在处理 Transfer-Encoding 头部时执行严格区分大小写的检查,仅识别 "chunked",而根据 RFC 规范,该头部值应不区分大小写。
## 影响
攻击者可利用该漏洞进行 HTTP 请求走私,可能导致绕过安全控制、缓存投毒或对后端系统发起进一步攻击。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Request Smuggling (TE.TE) in h3 v1 · Advisory · h3js/h3 · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键信息
- **漏洞类型**: HTTP Request Smuggling (TE.TE)
- **受影响的版本**: <= v1.15.4
- **修复版本**: >= v1.15.5
- **漏洞描述**: `readRawBody` 在检查 Transfer-Encoding 头时使用了严格的大小写敏感检查,导致在接收 `Transfer-Encoding: ChuNked`(大小写混合)时未能正确识别 "chunked",从而错误地认为请求体为空并立即处理请求。这使得实际请求体保留在套接字上,触发经典 TE.TE 错位(Request Smuggling),如果应用运行在 L4 代理或不标准化头的任何东西(如 AWS NLB 或 Node 代理)之后。
- **漏洞代码位置**: `src/utils/body.ts`
- **具体问题**: `ChuNkEd` 返回 False,导致未正确处理请求体。
- **验证**: 本地测试确认,发送 `Transfer-Encoding: ChuNked` 请求且没有结束的 0 chunk 时,Express 会挂起等待数据,而 h3 立即响应(漏洞,认为请求体长度为 0)。
- **影响**: 由于 H3/Nuxt/Nitro 经常用于容器化设置后面的 TCP 负载均衡器,攻击者可以利用此漏洞将请求走私到 WAF 之后或使套接字失同步以污染其他用户的连接。
- **修复建议**: 在检查之前规范化头值:`.map((e) => e.trim().toLowerCase())`
### 其他信息
- **严重性**: 高,CVSS v3 评分 8.9/10
- **CVE ID**: CVE-2026-23527
- **弱点**: CWE-444
- **报告者**: simonkoeck
标题: fix(readRawBody): fix case-sensitive `Transfer-Encoding` check causin… · h3js/h3@618ccf4 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
**关键信息:**
- **漏洞类型:** HTTP Request Smuggling via Transfer-Encoding desynchronization attacks (因Transfer-Encoding头部检查大小写敏感导致请求走私风险)
- **修复细节:**
- 调整了`readRawBody`函数,使其对于Transfer-Encoding头部的检查不区分大小写。
- 修改前通过`.toLowerCase()`检查"chunked",修改后直接检查\`!String(event.node.req.headers["transfer-encoding"] ?? "").includes("chunked")\`,以保证 Transfer-Encoding 头部检查的大小写不敏感性。
- **安全影响:**
- 防止了因Transfer-Encoding头部大小写不一致导致的HTTP Request Smuggling攻击。
- 更好地遵循了RFC 7230规范。
- **测试用例:**
- 增加了测试用例验证Transfer-Encoding头部检查的大小写不敏感性。
暂无评论