AngusKit 安全检查报告(示例)

研发修复报告
风险评级
D
风险分 72 · 高
范围指定检查 1 次 · 1 个资产
数据截止2026-10-16 18:03 (Asia/Shanghai)
生成时间2026-10-16 18:03
报告编号SR-20261016-LFNGDQ
受众研发修复
密级内部

1. 执行摘要

1 个资产中有 1 个存在高危及以上风险,共发现 2 个严重、59 个高危问题(安全问题合计 120 个)。1 个资产的门禁未通过。

D 72 · 高
受影响资产
1
严重 + 高危
61
已在野利用(KEV)
0
门禁通过率
0%

严重级别分布

严重 2高危 59中危 46低危 13信息 0 合计 120
统计口径:按所选检查统计 SAST、密钥、SCA 问题,与检查详情页一致。

优先行动

  1. 处理 1 个资产的门禁阻断问题,恢复发布
  2. 升级处理 55 个超过 SLA 的告警
  3. 将 axios 升级到 1.20.0,可修复 12 个漏洞(1 个资产)

2. 风险态势

严重级别分布(安全问题)

严重 2高危 59中危 46低危 13信息 0 合计 120

严重级别分布(安全问题)

能力 × 严重级别

依赖漏洞 120
许可证 1,187
能力严重高危中危低危信息合计
依赖漏洞 2 59 46 13 0 120
许可证 0 0 0 1,183 4 1,187

能力 × 严重级别

资产类型

类型资产数问题数
代码仓库1120

引擎

引擎严重高危中危低危信息合计
TRIVY25946130120

安全问题只含代码漏洞、密钥泄露、依赖漏洞;许可证和代码质量单独统计。

3. 重点风险

# 标题 级别 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 或规则跨资产合并,排序依据见附录中的优先级公式。

4. 资产风险排行

# 资产 风险分 严重 高危 中危 低危 门禁 最近检查
1
https://git.anguskit.com/anguskit/AngusKit.git
代码仓库
72 2 59 46 13 未通过 2026-10-16 18:03

5. 门禁与覆盖

门禁通过率
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

代码质量问题不计入安全门禁。

6. 修复计划

https://git.anguskit.com/anguskit/AngusKit.git 代码仓库 · 问题数 120

依赖升级

组件 建议版本 级别 漏洞数 直接依赖 建议期限
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 从数据截止时间起算。

7. 问题明细

按规则分组,共 70 组。

shell-quote:换行符处理不当导致任意命令执行 CVE-2026-102422 1 项 · 1 个资产

严重 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

shell-quote:未转义的换行符导致命令注入,可任意执行代码 CVE-2026-9277 1 项 · 1 个资产

严重 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

PostCSS:特制 CSS 输入导致信息泄露与拒绝服务 CVE-2026-45623 1 项 · 1 个资产

高危 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

JS-YAML:!!omap 解析消耗二次方 CPU(3.x 与 4.x),CVE-2026-59870 的修复未回移植 GHSA-5p4m-2wfm-xmqj 4 项 · 1 个资产

高危 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」「密钥泄露」「许可证合规」「行动建议」「附录」以及其余问题明细未包含。