IPBUF安全漏洞报告
English
CVE-2026-43929 CVSS 8.2 高危

CVE-2026-43929 ssrfcheck库存在SSRF漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-43929
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
8.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ssrfcheck

相关标签

SSRFssrfcheckNode.jsCVE-2026-43929IPv6 Bypass信息泄露

漏洞概述

ssrfcheck是一个旨在检测字符串中是否包含潜在服务器端请求伪造(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)发起敏感请求,从而造成信息泄露或内网渗透。

攻击链分析

STEP 1
1. 侦察阶段
攻击者识别目标应用程序使用了ssrfcheck库来验证用户提供的URL,并确定该库版本在1.3.0或以下。
STEP 2
2. 构造Payload
攻击者将想要访问的内网私有IP(例如127.0.0.1或169.254.169.254)转换为IPv4映射的IPv6地址格式(如[::ffff:127.0.0.1])。
STEP 3
3. 发送恶意请求
攻击者向目标应用程序提交包含特殊格式IPv6地址的URL参数。
STEP 4
4. 绕过检测
Node.js解析器将URL规范化为十六进制格式,ssrfcheck的正则表达式因无法匹配十六进制格式而判断该URL安全。
STEP 5
5. 执行攻击
应用程序认为URL安全,进而向内网目标发起请求,导致SSRF攻击成功,可能泄露元数据或内部敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-43929 // Demonstrating bypass of ssrfcheck using IPv4-mapped IPv6 const { isSSRFSafeURL } = require('ssrfcheck'); // Targeting localhost (127.0.0.1) // Standard IPv4 would be blocked, but IPv6 mapped bypasses the regex const maliciousUrl = 'http://[::ffff:127.0.0.1]:8080/admin'; console.log(`Checking URL: ${maliciousUrl}`); // The vulnerability causes this to return true (safe) when it should be false const isSafe = isSSRFSafeURL(maliciousUrl); if (isSafe) { console.log('[!] VULNERABLE: URL was deemed safe by the library.'); // Application would proceed to make the request: // fetch(maliciousUrl); } else { console.log('[+] Safe: URL was blocked.'); }

影响范围

ssrfcheck <= 1.3.0

防御指南

临时缓解措施
在升级官方库之前,开发者应修改输入验证逻辑。建议在调用`isSSRFSafeURL`之前,手动解析URL中的主机名,并检测是否包含IPv6括号。如果存在,应使用专门的IP解析库将其展开并转换为二进制或标准格式进行比对,确保能够识别IPv4映射的IPv6地址属于私有范围,从而阻断此类攻击。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表