CORS(跨域资源共享)安全漏洞与防护(进阶篇)
字数 1851 2025-11-13 10:12:37
CORS(跨域资源共享)安全漏洞与防护(进阶篇)
知识点描述
CORS是一种W3C标准,允许服务器声明哪些外部源(域名、协议、端口)可以访问其资源。错误配置会导致敏感数据泄露或未授权操作。进阶篇将深入探讨复杂场景下的漏洞模式、预检请求绕过、凭据泄露等风险。
1. CORS基础机制回顾
- 同源策略限制:浏览器默认禁止跨域读取响应,但
<script>、<img>等标签的跨域请求可发送(响应内容不可读)。 - CORS核心头字段:
Access-Control-Allow-Origin(ACAO):指定允许访问的源(如https://example.com或通配符*)。Access-Control-Allow-Credentials(ACAC):为true时允许携带Cookie等凭据。Access-Control-Allow-Methods:允许的HTTP方法(如POST、PUT)。
- 预检请求:对非简单请求(如带自定义头或Content-Type非
application/x-www-form-urlencoded),浏览器先发送OPTIONS请求验证权限。
2. 常见漏洞模式与攻击场景
-
场景1:过度宽松的ACAO配置
- 问题:设置
ACAO: *且同时设置ACAC: true。此时浏览器会拒绝请求(安全机制)。但若仅设置ACAO: *,攻击者可在恶意网站读取无凭据保护的敏感数据。 - 攻击示例:
// 恶意网站https://attacker.com的代码 fetch('https://api.victim.com/user/data') .then(response => response.text()) .then(data => exfiltrate(data)); // 窃取数据
- 问题:设置
-
场景2:动态Origin反射漏洞
- 问题:服务器盲目将
Origin请求头值反射到ACAO头,且未验证来源合法性。 - 攻击步骤:
- 诱骗用户访问
https://attacker.com。 - 在该页面发起跨域请求至
https://api.victim.com,请求头自动包含Origin: https://attacker.com。 - 服务器返回
ACAO: https://attacker.com,浏览器判定合法,返回数据。
- 诱骗用户访问
- 问题:服务器盲目将
-
场景3:预检请求验证缺陷
- 问题:服务器对OPTIONS请求的验证不严格,但实际请求处理存在漏洞。
- 示例:
- 服务器允许任意源的
OPTIONS请求(返回ACAO: *)。 - 实际POST请求检查Origin,但攻击者可通过Flash或旧浏览器绕过预检(如IE9)。
- 服务器允许任意源的
3. 进阶攻击技术:子域接管与DNS重绑定
- 子域漏洞链:
- 假设
api.victim.com设置ACAO: *.victim.com。 - 攻击者注册子域
evil.victim.com,并托管恶意页面,即可读取api.victim.com的数据。
- 假设
- DNS重绑定攻击:
- 用户访问
evil.com,页面内请求api.victim.com。 - 恶意DNS服务器首次解析
api.victim.com返回攻击者控制的IP(通过TTL控制)。 - 浏览器发送请求后,DNS迅速重绑定到真实
api.victim.com的IP,绕过同源检查。
- 用户访问
4. 防护措施详解
- 严格校验Origin头:
- 维护白名单列表,拒绝非预期源(如正则匹配
^https://([a-z0-9]+\.)?victim\.com$)。 - 避免使用正则漏洞(如
.*\.victim.com可能匹配attacker.victim.com.evil.com)。
- 维护白名单列表,拒绝非预期源(如正则匹配
- 避免动态反射Origin:除非业务需公开API,否则固定ACAO为可信源。
- 凭据保护:
- 若需ACAC: true,则ACAO不能为
*,必须指定具体源。 - 结合SameSite Cookie属性限制跨站请求。
- 若需ACAC: true,则ACAO不能为
- 预检请求强化:
- 对OPTIONS请求实施与主请求相同的认证/授权检查。
- 限制允许的方法和头部,避免冗余权限(如
Access-Control-Max-Age不宜过长)。
- 监控异常CORS请求:记录Origin头异常(如包含特殊字符或非预期域名)的访问日志。
5. 实战检测方法
- 手工测试:
- 修改请求中的Origin头,观察ACAO是否反射或宽松匹配。
- 尝试通配符测试(如将Origin改为
null、attacker.com、victim.com.attacker.com)。
- 工具辅助:使用Burp Suite的"CORS Scanner"扩展或自定义脚本批量检测。
通过以上步骤,可系统理解CORS漏洞的深层成因及防护关键,避免在复杂业务场景中误配置。