三种对CORS错误配置的利用方法
字数 1885 2025-08-18 11:38:28
跨域资源共享(CORS)错误配置的利用方法详解
1. CORS基础概念
1.1 同源策略(SOP)的限制
- 同源策略限制应用程序之间的信息共享
- 仅允许在相同协议、域名和端口下的应用程序间共享信息
- 防止系统机密信息泄露,但也带来了跨域通信的挑战
1.2 CORS的作用
- W3C标准,全称"跨域资源共享"(Cross-origin resource sharing)
- 允许浏览器向跨源服务器发出XMLHttpRequest请求
- 克服AJAX只能同源使用的限制
- 通信过程由浏览器自动完成,对用户透明
1.3 关键CORS响应头
-
Access-Control-Allow-Origin
- 指定哪些域可以访问资源
- 例如:
Access-Control-Allow-Origin: requester.com
-
Access-Control-Allow-Credentials
- 指定浏览器是否发送cookie
- 仅当设置为true时发送cookie
- 例如:
Access-Control-Allow-Credentials: true
-
Access-Control-Allow-Methods
- 指定允许的HTTP请求方法(GET, PUT, DELETE等)
- 例如:
Access-Control-Allow-Methods: GET, POST
2. CORS错误配置的三种利用方法
2.1 利用通配符(*)配置错误
漏洞特征:
- 服务器响应中包含
Access-Control-Allow-Origin: * - 同时
Access-Control-Allow-Credentials: true
示例请求:
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) - 在该域名下嵌入利用代码
- 当受害者访问恶意站点时,代码会:
- 向目标站点发送请求
- 获取敏感信息(用户名、ID、邮箱等)
- 将信息发送到攻击者控制的服务器
防御措施:
- 避免使用通配符(*),特别是当需要发送凭据时
- 明确指定允许的源域
2.2 信任域通配符作为Origin
漏洞特征:
- 服务器对Origin头部进行部分验证
- 例如白名单仅验证域名结尾(如
requester.com)
示例请求:
GET /api/userinfo.php
Host: provider.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') {
// 允许访问数据
} else {
// 未授权访问
}
利用方法:
- 攻击者注册包含白名单域名的子域(如
attackerrequester.com) - 创建恶意站点并嵌入利用代码
- 利用部分匹配的域名绕过CORS限制
- 获取目标站点的敏感信息
防御措施:
- 实施严格的域名验证,避免部分匹配
- 使用完整域名匹配而非通配符匹配
2.3 利用XSS实现CORS利用
漏洞特征:
- 主域配置了CORS白名单(如
requester.com) - 白名单中的子域存在XSS漏洞(如
sub.requester.com)
后端配置示例:
if ($_SERVER['HTTP_HOST'] == 'requester.com') {
// 允许访问数据
} else {
// 未授权访问
}
利用方法:
- 识别白名单域中易受XSS攻击的子域
- 通过XSS注入恶意JavaScript payload
- 利用子域的XSS漏洞向主域发送请求
- 获取主域的敏感信息
示例场景:
- CORS应用托管在
testingcors.com - XSS漏洞存在于
pavan.testingcors.com - 在"Name"参数中注入JavaScript payload
- 页面加载时执行脚本,从
testingcors.com获取信息
防御措施:
- 对所有子域实施相同的安全标准
- 定期检查白名单域中的XSS漏洞
- 考虑使用更严格的CORS策略
3. 防御建议
-
避免使用通配符:
- 特别是当需要发送凭据时
- 明确指定允许的源域
-
严格验证Origin头部:
- 实施完整的域名匹配
- 避免部分匹配或通配符匹配
-
限制HTTP方法:
- 使用
Access-Control-Allow-Methods明确允许的方法 - 仅开放必要的方法
- 使用
-
凭据控制:
- 谨慎使用
Access-Control-Allow-Credentials - 仅在必要时启用
- 谨慎使用
-
定期安全审计:
- 检查CORS配置
- 测试白名单域的安全性
-
子域安全:
- 确保所有子域符合安全标准
- 防止通过子域漏洞绕过CORS限制
4. 总结
CORS是OWASP TOP 10中的安全漏洞,错误配置可能导致严重的信息泄露。开发人员和安全专家必须:
- 充分理解CORS机制和安全影响
- 避免常见的配置错误(如通配符使用)
- 实施严格的源验证
- 定期审计和测试CORS配置
- 保持对相关漏洞的警惕性
通过正确配置和持续监控,可以在保持跨域通信功能的同时确保应用程序的安全性。