CVE-2026-43929ssrfcheck是一个旨在检测字符串中是否包含潜在服务器端请求伪造(SSRF)攻击的Node.js库。在1.3.0及更早版本中,该库存在严重的安全缺陷,无法有效阻止利用IPv4映射IPv6地址格式的SSRF攻击。当攻击者将目标私有IP地址(如127.0.0.1)编码为IPv6格式(例如http://[::ffff:127.0.0.1]/)时,Node.js内置的WHATWG URL解析器会在库的正则表达式校验执行前,将其静默规范化为压缩的十六进制形式。由于ssrfcheck库的正则表达式仅设计用于匹配点分十进制记法,无法识别经过规范化的十六进制IPv6地址,导致所有IANA私有IPv4范围(包括云厂商元数据地址169.254.169.254)的检测均被绕过。任何依赖`isSSRFSafeURL()`函数来防护用户提交URL请求的应用程序,都将完全暴露在SSRF攻击风险之下。
该漏洞的成因在于URL解析过程中的规范化处理与正则表达式匹配逻辑的冲突。Node.js环境中的`new URL()`解析器严格遵循WHATWG标准,当遇到IPv4映射的IPv6地址时(如`[::ffff:127.0.0.1]`),会自动将其转换为压缩的十六进制表示形式(`[::ffff:7f00:1]`)。ssrfcheck库试图通过正则表达式匹配主机名部分来识别私有IP,但其正则规则仅包含对点分十进制IPv4地址的匹配逻辑。因此,当经过Node.js解析后的十六进制IPv6地址传入校验函数时,正则匹配失败,函数错误地返回“安全”结果。这使得攻击者可以通过构造特殊的IPv6格式URL,绕过安全检查,诱导后端服务器向内网地址、本地回环地址或云元数据服务(169.254.169.254)发起敏感请求,从而造成信息泄露或内网渗透。