fast-xml-builder 漏洞 CVE-2026-44664 通过三连破折号序列实现 XML 注入
CVE-2026-44664(CVSS 6.1)在 fast-xml-builder 中允许攻击者突破 XML 注释并注入任意内容;在版本 1.1.6 中修复。

执行摘要
在 npm 包 fast-xml-builder 中发现了一个中等严重性的 XML 注入漏洞,跟踪编号为 CVE-2026-44664(CVSS 6.1),这是一个从 JSON 输入构建 XML 文档的实用工具。该漏洞允许攻击者通过提供包含三个连续破折号(---)的输入来突破 XML 注释边界,从而在生成的输出中注入任意 XML 或 HTML 内容。维护者已发布版本 1.1.6 来解决这个问题。该漏洞源于与 fast-xml-parser 库(CVE-2026-41650)相关的先前注释清理缺陷的不完整修复。
技术分析
fast-xml-builder 是一个 JavaScript 库,它将 JSON 对象转换为格式良好的 XML 字符串。它在 Node.js 应用程序中广泛用于生成 XML 有效载荷、配置文件和数据交换格式。在版本 1.1.5 中,该库采用了最初为 fast-xml-parser 开发的清理例程,以防止通过 -- 序列进行 XML 注释注入。修复将 XML 注释中的 -- 替换为 - -(在破折号之间插入空格),根据 XML 规范(W3C XML 1.0,第 2.5 节),禁止在注释中使用字面字符串 --。
然而,清理逻辑存在一个关键的疏忽:它只替换了确切的两个字符序列 --。攻击者可以通过包含第三个破折号,形成序列 --- 来绕过此过滤器。当输入包含三个连续的破折号时,前两个被转换为 - -,但第三个破折号保持不变,结果为序列 - --。这仍然包含一个 -- 子字符串(转换后的第二个和第三个字符),XML 解析器将其解释为注释结束标记(-->)。攻击者的有效载荷中的尾随 > 完成了注释关闭,允许任意 XML 内容跟随。
例如,控制一个值被放置在 XML 注释内的攻击者可以提供:
---><malicious-element>injected</malicious-element>
清理后,注释变为:
<!-- - --><malicious-element>injected</malicious-element> -->
解析器将第一个三个字符后的 --> 视为关闭注释,然后处理注入的 <malicious-element> 作为合法 XML。这可能导致:
- XML 结构注入:更改预期的文档结构,可能会破坏下游解析器或启用 XML 外部实体(XXE)攻击,如果输出被具有实体解析功能的 XML 解析器使用。
- HTML 注入:如果生成的 XML 在浏览器上下文中呈现(例如,作为网页或 XSLT 转换的一部分),注入的内容可以包括任意 HTML 或 JavaScript,导致跨站脚本(XSS)。
- 数据损坏:畸形或注入的 XML 可以损坏依赖于生成的 XML 的日志、配置文件或数据管道。
该漏洞通过 GitHub 安全咨询计划报告。维护者确认了问题,并发布了版本 1.1.6,实现了更健壮的清理例程:它替换任何三个或更多连续破折号的等效空格分隔版本,确保评论内容中没有 -- 或 --- 序列。
缓解措施与建议
使用 fast-xml-builder 的组织应采取以下步骤:
- 立即升级:更新到版本 1.1.6 或更高版本。运行
npm update fast-xml-builder或在您的package.json中将版本固定为^1.1.6。 - 审计依赖项:运行
npm audit以识别依赖于fast-xml-builder易受攻击版本的任何包。该库可能被间接包含;检查您的锁文件(package-lock.json或yarn.lock)以确定解析的版本。 - 审查 XML 输出:如果无法立即升级,请检查库生成的任何 XML 输出中是否有意外内容,特别是如果用户数据包含在注释字段中。考虑在处理前根据模式验证输出。
- 评估暴露:严重性(CVSS 6.1)反映了中等风险,但实际影响取决于如何使用生成的 XML。如果输出被具有 DTD/实体扩展功能的 XML 解析器解析,或在浏览器中呈现,风险增加。防御者应评估他们的特定用例。
除了升级外,没有其他解决方法;清理逻辑嵌入在库的注释写入函数中。
订阅更新
将最新的网络安全资讯直接发送到您的邮箱。

