利用SSRF漏洞泄露秘密API密钥
服务器端请求伪造(SSRF)是一种安全漏洞类型,其本质是诱骗服务器向非预期的主机发送网络请求。在某些情况下(例如Scott Helme的安全头工具),允许用户触发从某些后端到任意主机的HTTP请求是一项功能。但在许多其他情况下,这是一个严重的安全漏洞,可能使攻击者对易受攻击服务器背后的组织造成严重破坏。
代理端点的发现
为了便于钱包操作,该应用为用户提供当前汇率信息,这些汇率会在UI中定期刷新。通过Burp代理工具观察网络流量时,发现了以下形式的请求:
|
|
URL路径中包含另一个URL的格式引起了注意,这看起来是潜在的漏洞点。
代理的角色解析
查阅CoinMarketCap API文档后发现,该服务禁止在客户端使用JavaScript发起HTTP请求,这是为了保护API密钥不被用户窃取。因此目标网站需要通过自己的后端服务来路由API调用。
|
|
意外的绕过方法
测试发现,当提交以https://pro-api.coinmarketcap.com开头的URL时,代理会返回502 Bad Gateway响应,而不是400 Bad Request。这表明代理仅检查用户提供的URL是否具有预期前缀。
利用RFC 3986规范中@字符在URL授权部分的作用,可以通过以下方式绕过验证:
|
|
成功利用与信息泄露
攻击成功后,服务器日志显示请求包含以下头部信息:
- 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