天下漏洞,尽知其名
MEDIUM

CVE-2026-102277 brace-expansion 拒绝服务漏洞

影响可导致 Node.js 事件循环阻塞,造成可恢复的 CPU 拒绝服务

AI 研判

brace-expansion 是一个用于生成含公共前后缀字符串的 JavaScript 库,广泛作为 npm 依赖被间接引入。该漏洞源于 expand 函数在处理不可信的 {a},b} 形式且带大量尾部右花括号的输入时,会针对每个尾部右花括号重新扫描整个输入,导致 CPU 时间与内存呈二次方增长。攻击者可借此阻塞 Node.js 事件循环,形成可恢复的 CPU 拒绝服务。

影响范围

brace-expansion

brace-expansion 1.1.21、2.1.7、3.0.9、5.0.12 之前的版本受影响,官方已在上述版本中修复。

漏洞详情

漏洞类型为算法复杂度问题导致的拒绝服务(ReDoS 类)。当 expand 函数接收到形如 {a},b} 且包含大量尾部右花括号的不可信模式时,每遇到一个尾部右花括号就会重新从头扫描整个输入,同时工作字符串线性增长,使整体耗时与内存占用呈二次方上升。攻击者只需提交构造好的恶意模式即可触发,进程最终会恢复,因此属于可恢复的 CPU 拒绝服务。

利用条件与风险

利用前提是应用将不可信输入传入 brace-expansion 的 expand 函数,常见于依赖该库进行 glob 匹配或路径展开的场景。实战中可造成服务响应变慢或短暂不可用,CVSS 5.3 属中危,需结合具体调用链评估。

修复建议

官方修复方案为升级至 1.1.21、2.1.7、3.0.9 或 5.0.12 及更高版本。临时缓解措施包括对传入 expand 的输入长度和花括号数量进行限制与校验,或避免将不可信输入直接用于该库。

原始情报

The brace-expansion library generates arbitrary strings containing a common prefix and suffix. Prior to 1.1.21, 2.1.7, 3.0.9, and 5.0.12, the expand function handles untrusted {a},b}-shaped patterns with many trailing closing braces by restarting its scan once for each trailing closing brace. The successive full-input rescans with linear working-string growth cause quadratic CPU time and memory pressure that can block the Node.js event loop. The process eventually recovers, making the impact a recoverable CPU denial of service. This issue is fixed in versions 1.1.21, 2.1.7, 3.0.9, and 5.0.12.