错误配置CORS的3种利用方法
字数 1557 2025-08-26 22:11:34
错误配置CORS的3种利用方法 - 详细教学文档
0x00 概要
在Web环境中,同源策略(SOP)限制不同应用之间的信息共享,只允许同源应用共享信息。但随着Web应用和微服务的发展,跨域信息共享成为必要需求。HTML5引入的跨域资源共享(CORS)机制旨在安全地实现这一目标,但错误配置会导致严重安全问题。
0x01 CORS简介
跨域资源共享(CORS)是Web浏览器使用XMLHttpRequest API执行跨域请求的机制。跨域请求包含Origin头标识请求来源域,CORS定义了浏览器和服务端之间的协议来确定是否允许跨域请求。
0x02 CORS关键头部
1. Access-Control-Allow-Origin
- 功能:指定哪些域可以访问当前域资源
- 示例:允许requester.com访问provider.com的资源
2. Access-Control-Allow-Credentials
- 功能:指定浏览器是否在请求中发送cookie
- 注意:仅当值为true时浏览器才会发送cookie
3. Access-Control-Allow-Methods
- 功能:指定允许的HTTP请求方法(GET、PUT、DELETE等)
- 用途:限制跨域请求可用的HTTP方法
0x03 三种攻击场景
1. 利用CORS头部中错误配置的通配符(*)
漏洞描述:
当Access-Control-Allow-Origin设置为通配符(*)时,任何域都能访问该站点资源。
攻击示例:
GET /api/userinfo.php
Host: www.victim.com
Origin: www.victim.com
响应:
HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
利用步骤:
- 攻击者创建恶意网站(如https://testing.aaa.com)
- 在网站中嵌入JavaScript代码向victim.com发起请求
- 由于CORS配置错误,victim.com返回敏感数据
- 恶意网站将数据发送到攻击者控制的服务器
防御措施:
- 避免使用通配符(*)
- 明确指定允许的域名
- 验证Origin头部的值
2. 利用错误匹配的不完整域名
漏洞描述:
后端验证策略存在缺陷,如仅检查域名结尾部分,导致attackerrequester.com可访问requester.com的资源。
攻击示例:
GET /api/userinfo.php
Host: example.com
Origin: attackerrequester.com
响应:
HTTP/1.0 200 OK
Access-Control-Allow-Origin: attackerrequester.com
Access-Control-Allow-Credentials: true
后端错误代码示例:
if ($_SERVER['HTTP_HOST'] == '*requester.com') {
//Access data
} else {
// unauthorized access
}
利用步骤:
- 注册包含白名单域名字符串的域名(如attackerrequester.com)
- 在该域名下创建恶意网站
- 利用CORS配置缺陷获取目标站点数据
防御措施:
- 严格验证完整域名
- 使用白名单机制而非部分匹配
- 实施精确的域名验证逻辑
3. 使用XSS请求跨域站点
漏洞描述:
当白名单中的子域存在XSS漏洞时,攻击者可利用该漏洞绕过CORS限制。
攻击示例:
- 主域:testingcors.com
- 存在XSS的子域:pavan.testingcors.com
利用步骤:
- 在存在XSS的子域注入恶意JavaScript payload
- 当页面加载时,脚本执行并访问主域资源
- 窃取主域的敏感信息
防御措施:
- 确保所有子域的安全性
- 定期进行安全审计
- 实施内容安全策略(CSP)
- 对敏感操作实施额外验证
0x04 总结
CORS是OWASP TOP 10中的安全性错误配置问题。开发者和安全专家必须:
- 理解CORS配置的重要性
- 避免使用通配符(*)
- 实施严格的域名验证
- 确保白名单中所有域名的安全性
- 定期审计CORS配置
- 结合其他安全措施如CSP
最佳实践:
- 生产环境中禁用Access-Control-Allow-Credentials除非绝对必要
- 明确指定Access-Control-Allow-Origin的值而非使用通配符
- 限制Access-Control-Allow-Methods到最小必要集合
- 对所有跨域请求实施严格的输入验证
- 记录和监控跨域请求活动