ernative Names (SAN) 的不当处理造成的。接受任意 SAN 类型,除非PKI 被制定使用特殊的 SAN 类型,则可导致限制名称的中间体遭绕过。Node.js 接受 URI SAN 类型,而PKI 通常无法使用这些类型。另外,当协议允许 URI SANs 时,Node.js 不会正确匹配 URI。
该漏洞由谷歌研究团队报告,已通过在检查证书的主机名过程中禁用 URI SAN 类型的方式在Node.js 的新版本中修复。博客指出,该行为可通过命令行选项 –security-revert 还原。
第二个漏洞 (CVE-2021-44532) 是通过字符串注入bug的证书认证绕过漏洞。当 Node.js 将 SANs 还原为字符串格式时,会在验证连接时使用该字符串检查同等证书中的主机名问题。当证书链中使用了名称限制时会触发触发字符串格式中的注入漏洞,导致这些名称限制被绕过。
该漏洞同样由谷歌报告,目前已修复。新版本逃逸了包含有问题字符的SANs,从而阻止注入漏洞。该行为可通过命令行选项 –security-revert 还原。
第三个漏洞同样由谷歌报告,和不正确地处理证书主题和发布人字段有关 (CVE-2021-44533)。
文章解释称,Node.js 未正确处理多值 Relative Distinguished Names,“攻击者可构造包含单值 Relative Distinguished Name 的被解释为多值Relative Distinguished Name 的证书主题,注入 Common Name,从而绕过证书主题验证“。然而,受影响的 Node.js 并不接受多值 Relative Distinguished Names,因此不受此类攻击影响。然而,开发人员提醒称,使用 Node.js 的证书主题有歧义表示的第三方代码可能受影响。
低危漏洞
Node.js 修复的第四个漏洞是低危漏洞 (CVE-2022-21824),可导致攻击者通过 console.table 属性污染原型。鉴于Console.table() 函数的格式化逻辑,以下做法并不安全:允许受用户控制的输入被传递给属性参数,同时将具有至少一个属性的对象当作第一个参数 (_proto_) 进行传递。
该原型污染漏洞产生的影响有限,因为它仅允许将空白字符串分配给对象原型的数字键。
Node.js 最新版本为得到这些属性分配的对象使用了 null 属性,修复该漏洞。
所有这些漏洞均已在 Node.js 版本12.x、14.x、16.x 和17.x 中修复。