CVE-2026-22036CVE-2026-22036是Node.js生态中广泛使用的HTTP/1.1客户端库Undici的一个中高危拒绝服务漏洞。该漏洞存在于Undici 7.18.0之前和6.23.0之前的版本中,由于解压缩链(decompression chain)的链接数量无限制,且默认的maxHeaderSize允许恶意服务器插入数千个压缩步骤。当客户端连接到一个恶意服务器时,攻击者可以构造特殊的响应头,利用解压缩机制的缺陷,在解压缩过程中产生高CPU占用和过度的内存分配,最终导致服务崩溃或拒绝服务。由于Undici被众多Node.js应用和框架作为HTTP客户端依赖,此漏洞可能影响大量基于Node.js的服务端应用。攻击者无需认证即可利用此漏洞,只需诱导受害者客户端连接恶意服务器即可触发。
该漏洞的根本原因在于Undici库在处理HTTP响应解压缩时,对解压缩链的深度没有进行有效限制。当服务器响应包含多个嵌套的压缩层(如Content-Encoding链:gzip, deflate, br等)时,客户端会递归解压缩每一层。正常情况下,这种设计用于支持代理服务器的多重压缩场景。然而,攻击者可以利用默认maxHeaderSize配置(通常为16384字节),通过构造包含数千个压缩步骤的长压缩链来耗尽客户端资源。恶意服务器可以在响应头中注入大量Content-Encoding字段,迫使客户端执行大量无意义的解压缩操作。具体而言,当Content-Encoding包含超过1000个压缩层时,会导致CPU使用率急剧上升,同时每次解压缩都会分配新的缓冲区,造成内存快速膨胀,最终触发内存溢出或系统资源耗尽。攻击者还可以利用Transfer-Encoding: chunked配合分块传输,进一步延长攻击时间窗口。