|
风险评级
D
风险分 72 · 高
|
| 范围 | 指定检查 1 次 · 1 个资产 |
| 数据截止 | 2026-10-16 18:03 (Asia/Shanghai) |
| 生成时间 | 2026-10-16 18:03 |
| 报告编号 | SR-20261016-LFNGDQ |
| 受众 | 研发修复 |
| 密级 | 内部 |
1 个资产中有 1 个存在高危及以上风险,共发现 2 个严重、59 个高危问题(安全问题合计 120 个)。1 个资产的门禁未通过。
|
D
72 · 高
|
|
严重级别分布(安全问题)
|
依赖漏洞 120 许可证 1,187 |
能力 × 严重级别 |
资产类型
|
引擎
|
安全问题只含代码漏洞、密钥泄露、依赖漏洞;许可证和代码质量单独统计。
| # | 标题 | 级别 | EPSS | CVSS | 资产数 | 原因 |
|---|---|---|---|---|---|---|
| 1 |
CVE-2026-102422
shell-quote:换行符处理不当导致任意命令执行
组件:shell-quote@1.8.4
修复版本:1.11.0
|
严重 | – | 8.1 | 1 | 严重级别问题 |
| 2 |
CVE-2026-9277
shell-quote:未转义的换行符导致命令注入,可任意执行代码
组件:shell-quote@1.8.3
修复版本:1.8.4
|
严重 | – | 8.1 | 1 | 严重级别问题 |
| 3 |
CVE-2026-45623
PostCSS:特制 CSS 输入导致信息泄露与拒绝服务
组件:postcss@8.5.10
修复版本:8.5.12
|
高危 | – | 9.1 | 1 | CVSS 9.1 |
| 4 |
CVE-2026-59869
js-yaml:特制 YAML 文档导致拒绝服务
组件:js-yaml@3.14.2, js-yaml@4.1.1
修复版本:3.15.0, 4.3.0
|
高危 | – | 7.5 | 2 | 影响 2 个资产;直接依赖,升级成本低 |
| 5 |
CVE-2026-84375
js-yaml:YAML 解析存在拒绝服务漏洞
组件:js-yaml@3.14.2, js-yaml@4.1.1
修复版本:4.3.2, 3.15.2
|
高危 | – | 7.5 | 2 | 影响 2 个资产;直接依赖,升级成本低 |
| 6 |
GHSA-5P4M-2WFM-XMQJ
JS-YAML:!!omap 解析消耗二次方 CPU(3.x 与 4.x),CVE-2026-59870 的修复未回移植
组件:js-yaml@3.14.2, js-yaml@4.1.1
修复版本:4.3.1, 3.15.1
|
高危 | – | 7.5 | 2 | 影响 2 个资产;直接依赖,升级成本低 |
| 7 |
CVE-2026-67214
nanoid:非安全模块函数接受负数长度导致拒绝服务
组件:nanoid@3.3.11, nanoid@3.3.12, nanoid@5.1.11, nanoid@5.1.9
修复版本:3.3.16, 5.1.16
|
高危 | – | 7.5 | 4 | 影响 4 个资产 |
| 8 |
CVE-2026-101898
axios:HTTP/2 代理与 DNS 设置未生效,安全控制被绕过
组件:axios@1.19.0
修复版本:1.20.0
|
高危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 9 |
CVE-2026-101901
Axios:HTTP/2 会话初始化未处理错误导致拒绝服务
组件:axios@1.19.0
修复版本:1.20.0
|
高危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 10 |
CVE-2026-101903
Axios:畸形 data URL 导致拒绝服务
组件:axios@1.19.0
修复版本:1.20.0
|
高危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 11 |
CVE-2026-101905
axios:继承的 createConnection 属性导致请求套接字被劫持
组件:axios@1.19.0
修复版本:1.20.0
|
高危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 12 |
CVE-2026-101906
axios:特制重定向主机名导致拒绝服务
组件:axios@1.19.0
修复版本:1.20.0
|
高危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 13 |
CVE-2026-101907
Axios:fetch 适配器绕过重定向限制,导致服务端请求伪造
组件:axios@1.19.0
修复版本:1.20.0
|
高危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 14 |
CVE-2026-101909
axios:表单序列化中的原型污染利用链导致拒绝服务
组件:axios@1.19.0
修复版本:0.34.0, 1.20.0
|
高危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 15 |
CVE-2026-13311
shell-quote:输入解析效率过低导致拒绝服务
组件:shell-quote@1.8.3, shell-quote@1.8.4
修复版本:1.9.0
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 16 |
CVE-2026-13676
fast-uri:Unicode 主机名规范化不当,安全策略被绕过
组件:fast-uri@3.1.0, fast-uri@3.1.2
修复版本:4.0.1, 3.1.3, 2.4.2
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 17 |
CVE-2026-16221
fast-uri:URL 解析不一致,安全策略被绕过
组件:fast-uri@3.1.0, fast-uri@3.1.2
修复版本:2.4.3, 3.1.4, 4.1.1
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 18 |
CVE-2026-18446
fast-uri:URI 授权部分中的反斜杠导致主机混淆
组件:fast-uri@3.1.0, fast-uri@3.1.2
修复版本:2.4.4, 3.1.5, 4.1.2
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 19 |
CVE-2026-67213
nanoid:随机 ID 生成陷入无限循环导致拒绝服务
组件:nanoid@3.3.11, nanoid@3.3.12
修复版本:3.3.18, 5.1.6
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 20 |
CVE-2026-73646
PostCSS:源映射自动加载存在路径遍历,导致信息泄露
组件:postcss@8.5.10, postcss@8.5.15
修复版本:8.5.18
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 21 |
CVE-2026-75975
fast-uri:畸形 IPv6 规范化导致服务端请求伪造
组件:fast-uri@3.1.0, fast-uri@3.1.2
修复版本:2.4.5, 3.1.6, 4.1.3
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 22 |
CVE-2026-76172
fast-uri:URI 解析缺陷可导致服务端请求伪造与重定向
组件:fast-uri@3.1.0, fast-uri@3.1.2
修复版本:2.4.5, 3.1.6, 4.1.3
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 23 |
CVE-2026-84292
fast-uri:端口序列化未校验导致授权注入
组件:fast-uri@3.1.0, fast-uri@3.1.2
修复版本:2.4.6, 3.1.7, 4.1.4
|
高危 | – | 7.5 | 2 | 影响 2 个资产 |
| 24 |
CVE-2026-73086
nanoid:整数溢出导致生成的 ID 可预测
组件:nanoid@3.3.11, nanoid@5.1.9
修复版本:3.3.12, 5.1.11
|
高危 | – | 7.4 | 2 | 影响 2 个资产 |
| 25 |
GHSA-G2V6-RQMX-R4W6
@vue/server-renderer:属性名黑名单遗漏回车符,导致跨站脚本
组件:@vue/server-renderer@3.5.33, @vue/server-renderer@3.5.38
修复版本:3.5.42, 3.6.0-rc.6
|
高危 | – | 7.2 | 2 | 影响 2 个资产 |
| 26 |
CVE-2025-71329
image-size:尺寸字段为零的特制图像缓冲区导致拒绝服务
组件:image-size@2.0.2
修复版本:2.0.3
|
高危 | – | 7.5 | 1 | 高危级别问题 |
| 27 |
CVE-2025-71330
image-size:特制 ICNS 图像缓冲区导致拒绝服务
组件:image-size@2.0.2
修复版本:2.0.3
|
高危 | – | 7.5 | 1 | 高危级别问题 |
| 28 |
CVE-2026-55685
React Router:未认证访问 manifest 端点导致拒绝服务
组件:react-router@7.17.0
修复版本:7.18.0
|
高危 | – | 7.5 | 1 | 高危级别问题 |
| 29 |
CVE-2026-6321
fast-uri:路径遍历可绕过安全策略
组件:fast-uri@3.1.0
修复版本:3.1.1, 2.4.1
|
高危 | – | 7.5 | 1 | 高危级别问题 |
| 30 |
CVE-2026-6322
fast-uri:分隔符处理不当导致 URI 授权被绕过
组件:fast-uri@3.1.0
修复版本:3.1.2, 2.4.1
|
高危 | – | 7.5 | 1 | 高危级别问题 |
| 31 |
CVE-2026-75899
fast-uri:主机名被重复百分号解码,导致服务端请求伪造
组件:fast-uri@3.1.2
修复版本:2.4.5, 3.1.6, 4.1.3
|
高危 | – | 7.5 | 1 | 高危级别问题 |
| 32 |
CVE-2026-93749
source-map-js:畸形索引源映射导致拒绝服务
组件:source-map-js@1.2.1
修复版本:1.2.2
|
高危 | – | 7.5 | 1 | 高危级别问题 |
| 33 |
GHSA-QWWW-VCR4-C8H2
React Router:RSC 模式可绕过 CSRF 校验,在返回 400 之前执行动作
组件:react-router@7.17.0
修复版本:7.18.2, 8.3.0
|
高危 | – | 0 | 1 | 高危级别问题 |
| 34 |
CVE-2026-53550
js-yaml:特制 YAML 合并键导致拒绝服务
组件:js-yaml@3.14.2, js-yaml@4.1.1
修复版本:4.2.0, 3.15.0
|
中危 | – | 5.3 | 2 | 影响 2 个资产;直接依赖,升级成本低 |
| 35 |
CVE-2026-50159
Mermaid:通过图表输入注入 CSS,可改动页面元素
组件:mermaid@11.14.0, mermaid@11.15.0
修复版本:11.16.1, 10.9.8
|
中危 | – | 0 | 2 | 影响 2 个资产;直接依赖,升级成本低 |
| 36 |
CVE-2026-71436
Mermaid XY 图:无效的 X 轴参数导致拒绝服务
组件:mermaid@11.14.0, mermaid@11.15.0
修复版本:10.9.8, 11.16.1
|
中危 | – | 0 | 2 | 影响 2 个资产;直接依赖,升级成本低 |
| 37 |
CVE-2026-71437
Mermaid:原型污染可能导致任意代码执行
组件:mermaid@11.14.0, mermaid@11.15.0
修复版本:11.16.1
|
中危 | – | 0 | 2 | 影响 2 个资产;直接依赖,升级成本低 |
| 38 |
CVE-2026-71439
Mermaid:雷达图 ticks 参数导致拒绝服务
组件:mermaid@11.14.0, mermaid@11.15.0
修复版本:11.16.1
|
中危 | – | 0 | 2 | 影响 2 个资产;直接依赖,升级成本低 |
| 39 |
CVE-2026-41150
Mermaid:特制甘特图导致拒绝服务
组件:mermaid@11.14.0
修复版本:11.15.0, 10.9.6
|
中危 | – | 5.3 | 1 | 直接依赖,升级成本低 |
| 40 |
CVE-2026-41159
Mermaid:CSS 注入导致信息泄露与页面篡改
组件:mermaid@11.14.0
修复版本:11.15.0, 10.9.6
|
中危 | – | 5.3 | 1 | 直接依赖,升级成本低 |
| 41 |
CVE-2026-101899
Axios:CIDR 代理绕过处理不当导致信息泄露
组件:axios@1.19.0
修复版本:1.20.0
|
中危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 42 |
CVE-2026-101900
Axios:fetch 适配器中的原型污染导致出站 HTTP 头注入
组件:axios@1.19.0
修复版本:1.20.0
|
中危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 43 |
CVE-2026-101902
axios:原型污染利用链导致 HTTP 方法被意外覆盖
组件:axios@1.19.0
修复版本:0.34.0, 1.20.0
|
中危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 44 |
CVE-2026-101904
Axios:继承的原型属性导致 HTTP 头注入
组件:axios@1.19.0
修复版本:1.20.0
|
中危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 45 |
CVE-2026-101908
Axios:fetch 适配器原型污染导致出站 HTTP 请求被篡改
组件:axios@1.19.0
修复版本:1.20.0
|
中危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 46 |
CVE-2026-41148
Mermaid:CSS 注入可导致页面篡改与信息泄露
组件:mermaid@11.14.0
修复版本:11.15.0, 10.9.6
|
中危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 47 |
CVE-2026-41149
Mermaid:状态图 classDef 指令导致 HTML 注入
组件:mermaid@11.14.0
修复版本:11.15.0, 10.9.6
|
中危 | – | 0 | 1 | 直接依赖,升级成本低 |
| 48 |
CVE-2026-69153
PostCSS:特制 sourceMappingURL 导致信息泄露
组件:postcss@8.5.10, postcss@8.5.15
修复版本:8.5.23
|
中危 | – | 5.3 | 2 | 影响 2 个资产 |
| 49 |
CVE-2026-86472
fast-uri:主机名大小写规范化不一致,导致安全控制被绕过
组件:fast-uri@3.1.0, fast-uri@3.1.2
修复版本:2.4.7, 3.1.8, 4.1.5
|
中危 | – | 4.8 | 2 | 影响 2 个资产 |
| 50 |
CVE-2026-65898
DOMPurify:永久属性白名单被污染,导致跨站脚本
组件:dompurify@3.4.1, dompurify@3.4.10
修复版本:3.4.11
|
中危 | – | 0 | 2 | 影响 2 个资产 |
共 70 条,展示前 50 条;完整数据见 CSV / JSON。
按 CVE 或规则跨资产合并,排序依据见附录中的优先级公式。
| # | 资产 | 风险分 | 严重 | 高危 | 中危 | 低危 | 门禁 | 最近检查 | |
|---|---|---|---|---|---|---|---|---|---|
| 1 |
https://git.anguskit.com/anguskit/AngusKit.git
代码仓库
|
72 | 2 | 59 | 46 | 13 | 未通过 | 2026-10-16 18:03 |
门禁通过率 0% |
阻断次数 1 |
资产覆盖率 – |
能力覆盖率 100% |
已知资产 1
| 结论 | 期间全部检查的门禁结果 | 资产当前门禁 | 许可证门禁 |
|---|---|---|---|
| 通过 | 0 | 0 | 1 |
| 未通过 | 1 | 1 | 0 |
| 异常 | 0 | 0 | 0 |
| 跳过 | 0 | 0 | 0 |
| 资产 | 门禁 | 密钥泄露 | 依赖漏洞 | 许可证 | 代码质量 |
|---|---|---|---|---|---|
| https://git.anguskit.com/anguskit/AngusKit.git | 未通过 | 完成 | 完成 | 完成 | 完成 |
资产 × 能力覆盖
| 资产 | 门禁 | 原因 | 时间 |
|---|---|---|---|
| https://git.anguskit.com/anguskit/AngusKit.git | 未通过 | 超过门禁阈值(低危):严重 2、高危 59、中危 46 | 2026-10-16 18:03 |
代码质量问题不计入安全门禁。
| 组件 | 建议版本 | 级别 | 漏洞数 | 直接依赖 | 建议期限 |
|---|---|---|---|---|---|
| shell-quote@1.8.3 | 1.9.0 | 严重 | 2 | 否 | 2026-10-23 |
| shell-quote@1.8.4 | 1.11.0 | 严重 | 2 | 否 | 2026-10-23 |
| axios@1.19.0 | 1.20.0 | 高危 | 12 | 是 | 2026-11-15 |
| fast-uri@3.1.0 | 3.1.8 | 高危 | 9 | 否 | 2026-11-15 |
| fast-uri@3.1.2 | 3.1.8 | 高危 | 8 | 否 | 2026-11-15 |
| react-router@7.17.0 | 7.18.2 | 高危 | 5 | 否 | 2026-11-15 |
| js-yaml@3.14.2 | 3.15.2 | 高危 | 4 | 否 | 2026-11-15 |
| js-yaml@4.1.1 | 4.3.2 | 高危 | 4 | 是 | 2026-11-15 |
| nanoid@3.3.11 | 3.3.18 | 高危 | 3 | 否 | 2026-11-15 |
| postcss@8.5.10 | 8.5.23 | 高危 | 3 | 否 | 2026-11-15 |
另有 17 项未列出。
建议完成日期按 SLA 从数据截止时间起算。
按规则分组,共 70 组。
严重 1 依赖漏洞
| 级别 | 标题 | 资产 | 位置 | 优先级 |
|---|---|---|---|---|
| 严重 |
shell-quote:换行符处理不当导致任意命令执行
依赖漏洞
· CVE-2026-102422
· CVE-2026-102422
· CVSS 8.1
shell-quote@1.8.4
→ 1.11.0
详情描述
shell-quote 的 `quote()` 会把 `{ comment }` 令牌输出为 `#` 加上注释文本,从而把该行剩余内容(包括后面字符串令牌的起始引号)注释掉。若后面的字符串含有换行符(\n、\r、U+2028、U+2029),注释会在此处结束,剩余内容被当作 shell 输入解析。例如 `quote(['echo', 'ok', { comment: 'x' }, 'a\nid;#'])` 会在 sh、bash、dash、ksh 和 zsh 中执行 `id`。`parse()` 会把单词中间的 `#`(例如 `http://example.com/#frag`)解析成注释令牌,因此把 `parse()` 的结果再与另一段不可信字符串拼接的调用(如 `quote(parse(untrustedCommand).concat(untrustedArg))`)也会受影响。CVE-2026-9277 的修复只拒绝了注释自身文本中的换行符,没有处理它之后令牌里的换行符。1.11.0 已修复:当 `{ comment }` 之后的字符串含有换行符时,`quote()` 会抛出 `TypeError`。 修复建议
升级到 1.11.0 |
https://git.anguskit.com/anguskit/AngusKit.git | website/package-lock.json:shell-quote | 100 |
严重 1 依赖漏洞
| 级别 | 标题 | 资产 | 位置 | 优先级 |
|---|---|---|---|---|
| 严重 |
shell-quote:未转义的换行符导致命令注入,可任意执行代码
依赖漏洞
· CVE-2026-9277
· CVE-2026-9277
· CVSS 8.1
shell-quote@1.8.3
→ 1.8.4
详情描述
shell-quote 的 `quote()` 原先没有按 `parse()` 的操作符模型校验对象令牌。`.op` 字段用 `/(.)/g` 逐字符加反斜杠转义,而 JavaScript 中该正则不匹配换行符(\n、\r、U+2028、U+2029)。因此 `.op` 中的换行符会原样进入输出。POSIX shell 把字面换行当作命令分隔符,其后的内容会作为第二条命令执行。有两条路径可以触发:一是外部输入直接构造 `{ op: '...\n...' }`;二是调用 `parse(cmd, envFn)`,且 `envFn` 返回的对象令牌中 `.op` 受攻击者影响。两者都是文档中的 API。修复改为严格的形状校验:`.op` 必须属于解析器的控制操作符白名单;`{ op: 'glob', pattern }` 会校验 `pattern` 并禁止换行符;`{ comment }` 会校验 `comment` 并禁止换行符;其他对象形状抛出 `TypeError`。 修复建议
升级到 1.8.4 |
https://git.anguskit.com/anguskit/AngusKit.git | packages/docx/package-lock.json:shell-quote | 100 |
高危 1 依赖漏洞
| 级别 | 标题 | 资产 | 位置 | 优先级 |
|---|---|---|---|---|
| 高危 |
PostCSS:特制 CSS 输入导致信息泄露与拒绝服务
依赖漏洞
· CVE-2026-45623
· CVE-2026-45623
· CVSS 9.1
postcss@8.5.10
→ 8.5.12
详情描述
PostCSS 读取 CSS 文件,并把规则转换成抽象语法树,供调用方分析和修改。在 8.5.11 及更早版本中,PreviousMap 会解析传给 process() 的任意 CSS 字符串里的 /*# sourceMappingURL=PATH */ 注释,并在本地文件系统上打开 PATH,没有协议限制、白名单或路径遍历检查。控制 CSS 输入的攻击者可以让宿主进程读取 Node 进程可读的任意文件,并通过随后 JSON.parse 的 SyntaxError 信息泄露该文件开头约 10 个字节。该缺陷还可以精确判断文件是否存在,并与大文件组合造成拒绝服务。使用 PostCSS 默认选项即可触发,不需要 from、map 或插件,因此任何把不可信 CSS 交给 PostCSS 的流程都会受影响,例如 CMS 主题、用户上传的样式、浏览器扩展或用户样式处理、第三方包的构建流水线、博客评论渲染。8.5.12 已修复。 修复建议
升级到 8.5.12 |
https://git.anguskit.com/anguskit/AngusKit.git | packages/docx/package-lock.json:postcss | 80 |
高危 4 依赖漏洞
| 级别 | 标题 | 资产 | 位置 | 优先级 |
|---|---|---|---|---|
| 高危 |
JS-YAML:!!omap 解析消耗二次方 CPU(3.x 与 4.x),CVE-2026-59870 的修复未回移植
依赖漏洞
· GHSA-5p4m-2wfm-xmqj
· GHSA-5p4m-2wfm-xmqj
· CVSS 7.5
js-yaml@4.1.1
→ 4.3.1, 3.15.1
详情描述
# `!!omap` 解析消耗二次方 CPU(js-yaml 3.x 与 4.x)
## 摘要
`resolveYamlOmap()` 在逐项循环里用线性扫描(`objectKeys.indexOf(...)`)检查 `!!omap` 序列的键是否唯一,使解析复杂度随条目数达到 **O(n²)**。因此一份体积不大的 YAML 文档也会在 `yaml.load()` 中消耗不成比例的 CPU,对任何解析不可信 YAML 的程序造成拒绝服务。
`!!omap` 注册在**默认 schema**中(`lib/schema/default.js` → `require('../type/omap')`)。不带选项调用 `yaml.load(untrustedInput)` 就会受影响,不需要自定义 schema 或非默认配置。
**这与 CVE-2026-59870 / GHSA-724g-mxrg-4qvm 是同一缺陷。** 5.x 在 5.2.1 中已修复,但没有回移植到仍在维护的 3.x 和 4.x,这两条线仍是原来的实现。
## 受影响版本
| 版本线 | 已测最新版 | 状态 |
|---|---|---|
| 3.x | **3.15.0** | 受影响 — `lib/type/omap.js:29` 的 `objectKeys.indexOf(pairKey)` |
| 4.x | **4.3.0** | 受影响 — `lib/type/omap.js:30` 的 `objectKeys.indexOf(pairKey)` |
| 5.x | 5.2.2 | **不受影响** — 5.2.1 已改为使用 `Set` |
两处版本号都是撰写时各版本线的最新发行版,因此这不是「还在用旧版本」的问题。
## 细节
`lib/type/omap.js`(js-yaml 4.3.0):
```js
if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey)
else return false
```
`objectKeys` 每增加一条就多一个元素,而 `Array.prototype.indexOf` 是线性扫描。解析含 `n` 条的 `!!omap` 大约要做 `1 + 2 + … + n` 次比较,复杂度相对 `n` 是二次方。这些工作在 `yaml.load()` 中同步执行,并在整个期间阻塞事件循环。
5.x 已用 `Set` 记录见过的键来解决同一问题(`src/tag/sequence/omap.ts`):
```ts
if (carrier.seen.has(key)) return 'duplicate key in ordered map'
carrier.seen.add(key)
```
## 证明节选已截断… 修复建议
升级到 4.3.1、3.15.1 |
https://git.anguskit.com/anguskit/AngusKit.git | website/package-lock.json:js-yaml | 75 |
| 高危 |
JS-YAML:!!omap 解析消耗二次方 CPU(3.x 与 4.x),CVE-2026-59870 的修复未回移植
依赖漏洞
· GHSA-5p4m-2wfm-xmqj
· GHSA-5p4m-2wfm-xmqj
· CVSS 7.5
js-yaml@3.14.2
→ 4.3.1, 3.15.1
详情描述
# `!!omap` 解析消耗二次方 CPU(js-yaml 3.x 与 4.x)
## 摘要
`resolveYamlOmap()` 在逐项循环里用线性扫描(`objectKeys.indexOf(...)`)检查 `!!omap` 序列的键是否唯一,使解析复杂度随条目数达到 **O(n²)**。因此一份体积不大的 YAML 文档也会在 `yaml.load()` 中消耗不成比例的 CPU,对任何解析不可信 YAML 的程序造成拒绝服务。
`!!omap` 注册在**默认 schema**中(`lib/schema/default.js` → `require('../type/omap')`)。不带选项调用 `yaml.load(untrustedInput)` 就会受影响,不需要自定义 schema 或非默认配置。
**这与 CVE-2026-59870 / GHSA-724g-mxrg-4qvm 是同一缺陷。** 5.x 在 5.2.1 中已修复,但没有回移植到仍在维护的 3.x 和 4.x,这两条线仍是原来的实现。
## 受影响版本
| 版本线 | 已测最新版 | 状态 |
|---|---|---|
| 3.x | **3.15.0** | 受影响 — `lib/type/omap.js:29` 的 `objectKeys.indexOf(pairKey)` |
| 4.x | **4.3.0** | 受影响 — `lib/type/omap.js:30` 的 `objectKeys.indexOf(pairKey)` |
| 5.x | 5.2.2 | **不受影响** — 5.2.1 已改为使用 `Set` |
两处版本号都是撰写时各版本线的最新发行版,因此这不是「还在用旧版本」的问题。
## 细节
`lib/type/omap.js`(js-yaml 4.3.0):
```js
if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey)
else return false
```
`objectKeys` 每增加一条就多一个元素,而 `Array.prototype.indexOf` 是线性扫描。解析含 `n` 条的 `!!omap` 大约要做 `1 + 2 + … + n` 次比较,复杂度相对 `n` 是二次方。这些工作在 `yaml.load()` 中同步执行,并在整个期间阻塞事件循环。
5.x 已用 `Set` 记录见过的键来解决同一问题(`src/tag/sequence/omap.ts`):
```ts
if (carrier.seen.has(key)) return 'duplicate key in ordered map'
carrier.seen.add(key)
```
## 证明节选已截断… 修复建议
升级到 4.3.1、3.15.1 |
https://git.anguskit.com/anguskit/AngusKit.git | website/package-lock.json:js-yaml | 70 |
| 高危 |
JS-YAML:!!omap 解析消耗二次方 CPU(3.x 与 4.x),CVE-2026-59870 的修复未回移植
依赖漏洞
· GHSA-5p4m-2wfm-xmqj
· GHSA-5p4m-2wfm-xmqj
· CVSS 7.5
js-yaml@4.1.1
→ 4.3.1, 3.15.1
详情描述
# `!!omap` 解析消耗二次方 CPU(js-yaml 3.x 与 4.x)
## 摘要
`resolveYamlOmap()` 在逐项循环里用线性扫描(`objectKeys.indexOf(...)`)检查 `!!omap` 序列的键是否唯一,使解析复杂度随条目数达到 **O(n²)**。因此一份体积不大的 YAML 文档也会在 `yaml.load()` 中消耗不成比例的 CPU,对任何解析不可信 YAML 的程序造成拒绝服务。
`!!omap` 注册在**默认 schema**中(`lib/schema/default.js` → `require('../type/omap')`)。不带选项调用 `yaml.load(untrustedInput)` 就会受影响,不需要自定义 schema 或非默认配置。
**这与 CVE-2026-59870 / GHSA-724g-mxrg-4qvm 是同一缺陷。** 5.x 在 5.2.1 中已修复,但没有回移植到仍在维护的 3.x 和 4.x,这两条线仍是原来的实现。
## 受影响版本
| 版本线 | 已测最新版 | 状态 |
|---|---|---|
| 3.x | **3.15.0** | 受影响 — `lib/type/omap.js:29` 的 `objectKeys.indexOf(pairKey)` |
| 4.x | **4.3.0** | 受影响 — `lib/type/omap.js:30` 的 `objectKeys.indexOf(pairKey)` |
| 5.x | 5.2.2 | **不受影响** — 5.2.1 已改为使用 `Set` |
两处版本号都是撰写时各版本线的最新发行版,因此这不是「还在用旧版本」的问题。
## 细节
`lib/type/omap.js`(js-yaml 4.3.0):
```js
if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey)
else return false
```
`objectKeys` 每增加一条就多一个元素,而 `Array.prototype.indexOf` 是线性扫描。解析含 `n` 条的 `!!omap` 大约要做 `1 + 2 + … + n` 次比较,复杂度相对 `n` 是二次方。这些工作在 `yaml.load()` 中同步执行,并在整个期间阻塞事件循环。
5.x 已用 `Set` 记录见过的键来解决同一问题(`src/tag/sequence/omap.ts`):
```ts
if (carrier.seen.has(key)) return 'duplicate key in ordered map'
carrier.seen.add(key)
```
## 证明节选已截断… 修复建议
升级到 4.3.1、3.15.1 |
https://git.anguskit.com/anguskit/AngusKit.git | packages/docx/package-lock.json:js-yaml | 70 |
原文 HTML 在 64KB 处截断。本文件到问题明细的第 4 组中部为止,「漏洞组件与 CVE」「密钥泄露」「许可证合规」「行动建议」「附录」以及其余问题明细未包含。