CVE-2025-22870 – Go语言中通过IPv6区域解析实现代理绕过 🔐
🧠 描述:
Go语言的HTTP库(net/http
、x/net/proxy
、httpproxy
)在处理NO_PROXY
规则时,错误解析了主机名中的IPv6区域标识符(如%25
)。
这使得攻击者能够构造类似[::1%25.example.com]:80
的主机名,错误地匹配.example.com
,从而绕过配置的代理,直接发送请求。
⚠️ 严重性:
- CVSS 3.1:4.4(中等)
- 某些发行版(如Amazon Linux)由于远程利用潜力,将其评级提高至6.5。
🎯 受影响组件:
- Go编程语言:1.24.1和1.23.7之前的版本
- golang.org/x/net模块(如
httpproxy
):v0.36.0之前 - 打包这些版本的Linux发行版,例如Ubuntu、Debian、Alpine、Amazon Linux、SUSE
🧨 利用场景:
攻击者可以:
- 利用代理匹配中的不匹配
- 执行SSRF(服务器端请求伪造)
- 访问本应受代理保护的内部服务
✅ 缓解步骤:
- 升级Go至至少1.24.1或1.23.7
- 更新x/net库至v0.36.0或更新版本
- 重建使用旧版Go的容器或软件
- 审计代理绕过设置(
NO_PROXY
)以检测%25
和区域标识符的滥用
🧩 技术洞察:
%25
是%
的URL编码形式,用于IPv6区域标识符,如[fe80::1%eth0]
。- Go未能清理此内容,导致主机名匹配逻辑中的错误分类。
📌 总结:
尽管评级为“中等”,但在依赖严格代理规则的环境(如云环境、零信任网络)中,此漏洞变得更为严重。强烈建议立即修补并审查NO_PROXY
行为。
🕷️ 漏洞详情:
PoC利用了golang.org/x/net/http/httpproxy
包中的漏洞,特别是在匹配NO_PROXY
规则时解析IPv6区域标识符的方式。
使用的负载为:
|
|
⚠️ 免责声明:
此内容仅用于教育和信息目的 🧠。 提供的任何演示、示例或技术描述旨在帮助开发人员、系统管理员和安全专业人员了解漏洞的性质以及如何防范 🛡️。 请勿将此信息用于未经授权或恶意的活动。 滥用此类知识可能违反法律并导致严重后果 🚫。 始终在道德和法律界限内行事 ⚖️。