Node-forge库ASN.1验证器同步冲突漏洞深度解析

本文详细分析了node-forge库中编号为CVE-2025-12816的高危漏洞。该漏洞源于ASN.1验证器存在解释冲突,攻击者可构造特定的ASN.1结构使验证器在可选字段边界处发生不同步,从而绕过下游加密验证与安全决策。

node-forge 存在通过其 ASN.1 验证器不同步导致的解释冲突漏洞 · CVE-2025-12816 · GitHub Advisory Database

漏洞详情 Dependabot 警报: 0

  • npm: node-forge (npm)

受影响版本: < 1.3.2 已修复版本: 1.3.2

描述

摘要 CVE-2025-12816 已由 CERT/CC 预留。

详细描述 node-forge 1.3.1 及更早版本中存在一个解释冲突(CWE-436)漏洞,使得远程、未经身份验证的攻击者能够构造 ASN.1 结构以使模式验证不同步,导致语义分歧,从而可能绕过下游加密验证和安全决策。

详情 node-forge 的 asn1.validate 函数(位于 forge/lib/asn1.js)中存在一个关键的 ASN.1 验证绕过漏洞。ASN.1 是一种定义数据结构的模式语言,例如 X.509、PKCS#7、PKCS#12 等中使用的类型化记录模式。DER(可辨别编码规则)是 ASN.1 的严格二进制编码,是加密代码在验证签名时期望的格式,并且确切的字节和结构必须与用于计算和验证签名的模式匹配。在反序列化 DER 之后,Forge 使用静态 ASN.1 验证模式来定位签名数据或公钥,计算所需确切字节的摘要,并将摘要和签名字段送入加密原语。

此漏洞允许一个特制的 ASN.1 对象在可选边界上使验证器不同步,导致格式错误的可选字段在语义上被重新解释为后续的强制性结构。这表现为在具有可选安全功能的加密算法和协议中(例如 PKCS#12,其中 MAC 被视为不存在)存在逻辑绕过,以及在严格协议(例如 X.509,其中字段被读取为错误的类型)中存在语义解释冲突。

影响 此缺陷允许攻击者使验证器不同步,从而导致数字签名或完整性检查等关键组件被跳过或被针对攻击者控制的数据进行验证。

此漏洞影响了 1.3.2 修补版本之前的 node-forge 中的 asn1.validate 函数。 代码位置:https://github.com/digitalbazaar/forge/blob/main/lib/asn1.js

node-forge 中受影响的组件如下:

  • lib/asn1.js
  • lib/x509.js
  • lib/pkcs12.js
  • lib/pkcs7.js
  • lib/rsa.js
  • lib/pbe.js
  • lib/ed25519.js 任何使用这些组件的下游应用程序都会受到影响。 这些组件可能被下游应用程序以可能导致完整性完全受损的方式利用,进而可能导致可用性和机密性受损。

参考链接

  • GHSA-5gfm-wpxj-wjgq
  • digitalbazaar/forge#1124
  • https://github.com/digitalbazaar/forge/blob/2bb97afb5058285ef09bcf1d04d6bd6b87cffd58/lib/asn1.js#L1153
  • https://github.com/digitalbazaar/forge/blob/2bb97afb5058285ef09bcf1d04d6bd6b87cffd58/lib/ed25519.js#L81
  • https://github.com/digitalbazaar/forge/blob/2bb97afb5058285ef09bcf1d04d6bd6b87cffd58/lib/pbe.js#L363
  • https://github.com/digitalbazaar/forge/blob/2bb97afb5058285ef09bcf1d04d6bd6b87cffd58/lib/pkcs12.js#L328
  • https://github.com/digitalbazaar/forge/blob/2bb97afb5058285ef09bcf1d04d6bd6b87cffd58/lib/pkcs7.js#L90
  • https://github.com/digitalbazaar/forge/blob/2bb97afb5058285ef09bcf1d04d6bd6b87cffd58/lib/rsa.js#L1167
  • https://github.com/digitalbazaar/forge/blob/2bb97afb5058285ef09bcf1d04d6bd6b87cffd58/lib/x509.js#L667
  • https://kb.cert.org/vuls/id/521113
  • https://www.kb.cert.org/vuls/id/521113
  • https://www.npmjs.com/package/node-forge

时间线

  • davidlehn 发布到 digitalbazaar/forge:2025年11月25日
  • 由国家漏洞数据库发布:2025年11月25日
  • 发布到 GitHub Advisory Database:2025年11月26日
  • 已审核:2025年11月26日
  • 最后更新:2025年11月26日

严重程度

  • 严重等级: 高
  • CVSS 总体评分: 8.7 / 10

CVSS v4 基础指标

  • 攻击向量: 网络
  • 攻击复杂度: 低
  • 攻击要求: 无
  • 所需权限: 无
  • 用户交互: 无
  • 受影响系统机密性影响: 无
  • 受影响系统完整性影响: 高
  • 受影响系统可用性影响: 无
  • 后续系统机密性影响: 无
  • 后续系统完整性影响: 无
  • 后续系统可用性影响: 无

CVSS v4 向量字符串: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N

EPSS 分数

  • 分数: 0.055%
  • 说明: 此分数估计此漏洞在未来30天内被利用的概率。数据由 FIRST 提供。(第17百分位)

弱点

  • 弱点: CWE-436
  • 名称: 解释冲突
  • 描述: 产品A处理输入或步骤的方式与产品B不同,这导致A根据其对B状态的感知执行不正确的操作。在 MITRE 上了解更多。

标识符

  • CVE ID: CVE-2025-12816
  • GHSA ID: GHSA-5gfm-wpxj-wjgq

源代码

  • 仓库: digitalbazaar/forge

致谢

  • 报告者: wodzen
  • 协调员: sei-vsarvepalli
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计