# Undici 内容编码资源耗尽漏洞
## 概述
Undici 是一个用于 Node.js 的 HTTP/1.1 客户端。在版本 7.18.0 和 6.23.0 之前,解压缩链中的链接数量无上限限制,攻击者可通过恶意服务器利用此问题导致高内存占用和 CPU 使用率升高。
## 影响版本
- Undici < 7.18.0
- Undici < 6.23.0
## 细节
当响应使用压缩编码(如 gzip、deflate)时,Undici 会递归处理压缩层。在受影响版本中,未限制解压缩链的最大链接数,且默认的 `maxHeaderSize` 无法有效防范深层嵌套的压缩结构。恶意服务器可构造包含数千层压缩的响应,触发大量内存分配和持续的解压操作。
## 影响
- 高 CPU 使用率
- 过度内存分配
- 潜在的拒绝服务(DoS)
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Unbounded decompression chain in HTTP responses via Content-Encoding leads to resource exhaustion · Advisory · nodejs/undici · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 漏洞关键信息
- **漏洞标题**
- Unbounded decompression chain in HTTP responses via Content-Encoding leads to resource exhaustion
- **漏洞严重性**
- 低
- **CVE ID**
- CVE-2026-22036
- **影响的版本**
- < 6.23.0
- > 7.0.0 < 7.18.2
- **修复版本**
- 7.18.2
- 6.23.0
- **CVSS v3 base metrics**
- 严重性:3.7 / 10
- 攻击向量: 网络
- 攻击复杂性: 高
- 所需权限: 无
- 用户交互: 无
- 范围: 不变
- 机密性影响: 无
- 完整性影响: 无
- 可用性影响: 低
- **漏洞描述**
- `fetch()` API支持RFC 9110(如:Content-Encoding: gzip, br)定义的HTTP编码链算法。undici decompress拦截器也支持该算法。
- 但是,解压缩链中的链接数量是无界的,而默认的maxHeaderSize设置允许恶意服务器插入数千个压缩步骤,导致高CPU使用率和过度内存分配。
- **修复措施**
- 升级至7.18.2或6.23.0。
- **变通方法**
- 可以手动应用undici拦截器并过滤长`Content-Encoding`序列。
- **引用**
- [HackerOne报告](https://hackerone.com/reports/3456148)
- [GHSA报告](GHSA-gm62-xv2j-4w53)
- [curl文档](https://curl.se/docs/CVE-2022-32206.html)
标题: fix(decompress): limit Content-Encoding chain to 5 to prevent resourc… · nodejs/undici@b04e3cb · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息
- **漏洞类型**: 资源耗尽(Resource Exhaustion)
- **对应的CVE编号**: CWE-770
- **描述**:
- **问题**: 恶意服务器可能发送包含数千个 `Content-Encoding` 层次的响应,导致在生成解压缩器时出现高 CPU 使用率和内存分配问题。
- **修复措施**: 将 `Content-Encoding` 链的层数限制为 5,以防止资源耗尽。
- **相关修复参考**:
- `GHSA-gm62-xv2j-4w53`
- `CVE-2022-32206`
- **实现细节**:
- 引入了常量 `MAX_CONTENT_ENCODINGS = 5`,用于限制 `Content-Encoding` 层数。
- 在 `createDecompressionChain` 方法中添加检查,如果 `Content-Encoding` 层数超过 5,则抛出错误。
Zaproxy alias impedit expedita quisquam pariatur exercitationem. Nemo rerum eveniet dolores rem quia dignissimos.