安服水洞系列|CORS跨域资源共享漏洞
字数 2473 2025-08-11 08:36:16

CORS跨域资源共享漏洞详解与防御指南

一、CORS基础概念

1.1 什么是CORS

CORS(Cross-Origin Resource Sharing)是一种浏览器安全机制,允许Web应用程序从不同源加载所需的Web资源。由于浏览器的同源策略限制,Web应用程序只能访问与其自身源相同的资源,因此需要CORS来解决跨域资源访问的问题。

1.2 同源策略(Same-Origin Policy)

同源策略用于限制应用程序之间的资源共享,确保一个应用里的资源只能被本应用的资源所访问。同源是指协议、域名、端口三个都相同。

同源示例(以http://test.com/a/123.html为基准):

源URL 是否同源 不同之处
http://test.com/a/asd.html 同源 路径不同
http://test.com/abcvb/123.html 同源 路径不同
https://test.com/a/1234.html 不同源 协议不同
http://test.com:88/a/1234.html 不同源 端口不同
http://bbb.test.com/a/1234.html 不同源 域名不同(子域名不算同源)

二、CORS相关HTTP头部

CORS通过HTTP头进行控制,主要涉及以下头部:

  1. Access-Control-Allow-Origin:授权访问的源站
  2. Access-Control-Allow-Credentials:是否允许发送Cookie等凭据信息
  3. Access-Control-Allow-Methods:授权访问的HTTP方法
  4. Access-Control-Allow-Headers:授权访问的自定义头部

三、CORS漏洞产生原因

当目标站点配置不当,没有对请求源的域做严格限制,导致任意源都可以访问时,就存在CORS跨域漏洞问题。

四、CORS漏洞主要类型

4.1 未正确设置Access-Control-Allow-Origin

如果Access-Control-Allow-Origin头未正确设置,攻击者可以构造特定请求,绕过同源策略获取数据。

4.2 Access-Control-Allow-Origin设置为*

设置为*表示所有站点都可以访问该资源,可能导致安全问题。攻击者可以伪造HTTP请求头中Origin字段的值获取数据。

4.3 未正确设置Access-Control-Allow-Credentials

如果未正确设置该头部,攻击者可以伪造HTTP请求头中的Origin和Cookie字段,绕过同源策略获取数据。

4.4 使用不安全的HTTP方法和头部

如果未正确设置Access-Control-Allow-Methods和Access-Control-Allow-Headers,攻击者可以构造特定请求,使用不安全的HTTP方法和头部获取数据。

4.5 CSRF与CORS结合

由于CORS的存在,攻击者可以利用CSRF漏洞发起跨域请求,绕过同源策略获取数据。

五、CORS漏洞危害

  1. 窃取用户敏感信息:如cookie等身份认证信息
  2. 执行未授权操作:如POST请求修改数据、DELETE请求删除数据
  3. 数据篡改:通过跨域POST请求篡改数据库数据
  4. 资源耗尽:发起大量跨域请求占用服务器资源

六、CORS漏洞检测方法

使用BurpSuite抓包,添加Origin: http://www.attacker.com进行测试:

  1. 存在漏洞

    Access-Control-Allow-Origin: https://www.attacker.com
    Access-Control-Allow-Credentials: true
    

    Access-Control-Allow-Origin: null
    Access-Control-Allow-Credentials: true
    
  2. 不存在漏洞

    Access-Control-Allow-Origin: Null  // Null必须是小写才存在漏洞
    Access-Control-Allow-Credentials: true
    

    Access-Control-Allow-Origin: *
    Access-Control-Allow-Credentials: true
    

七、CORS漏洞复现

7.1 Java复现

参考:https://mp.weixin.qq.com/s/PSU8T-IO3mAz4MEVvAeUug中的part3

7.2 PHP复现

参考:https://mp.weixin.qq.com/s/ViSR-l41Z9qsazxI2MAhTA

使用dorabox靶场,搭建方式参考:https://mp.weixin.qq.com/s/juseXiuKATSTRUwoMjLI-Q

八、CORS工具化检测

  1. Burp插件

  2. 扫描工具

  3. Xray扫描

    • 可扫描这类漏洞,但需人工判断响应数据是否敏感
  4. POC生成工具

九、防御措施

  1. 严格限制Access-Control-Allow-Origin

    • 避免使用通配符*
    • 明确指定允许的域名
  2. 谨慎使用Access-Control-Allow-Credentials

    • 当需要发送凭据时,确保Origin严格限制
  3. 限制HTTP方法和头部

    • 明确指定允许的方法和头部
  4. 使用CSRF Token

    • 防止CSRF与CORS结合攻击
  5. 服务器端验证

    • 验证Origin头是否在允许列表中
    • 避免仅依赖客户端验证

十、参考链接

  1. https://mp.weixin.qq.com/s/PSU8T-IO3mAz4MEVvAeUug
  2. https://mp.weixin.qq.com/s/ViSR-l41Z9qsazxI2MAhTA
  3. https://mp.weixin.qq.com/s/21jwvrWhbkVdE5EUovvNZQ
  4. https://mp.weixin.qq.com/s/u-Eysz8vn9UszdnJuCowPA
CORS跨域资源共享漏洞详解与防御指南 一、CORS基础概念 1.1 什么是CORS CORS(Cross-Origin Resource Sharing)是一种浏览器安全机制,允许Web应用程序从不同源加载所需的Web资源。由于浏览器的同源策略限制,Web应用程序只能访问与其自身源相同的资源,因此需要CORS来解决跨域资源访问的问题。 1.2 同源策略(Same-Origin Policy) 同源策略用于限制应用程序之间的资源共享,确保一个应用里的资源只能被本应用的资源所访问。同源是指协议、域名、端口三个都相同。 同源示例 (以http://test.com/a/123.html为基准): | 源URL | 是否同源 | 不同之处 | |-------|---------|---------| | http://test.com/a/asd.html | 同源 | 路径不同 | | http://test.com/abcvb/123.html | 同源 | 路径不同 | | https://test.com/a/1234.html | 不同源 | 协议不同 | | http://test.com:88/a/1234.html | 不同源 | 端口不同 | | http://bbb.test.com/a/1234.html | 不同源 | 域名不同(子域名不算同源) | 二、CORS相关HTTP头部 CORS通过HTTP头进行控制,主要涉及以下头部: Access-Control-Allow-Origin :授权访问的源站 Access-Control-Allow-Credentials :是否允许发送Cookie等凭据信息 Access-Control-Allow-Methods :授权访问的HTTP方法 Access-Control-Allow-Headers :授权访问的自定义头部 三、CORS漏洞产生原因 当目标站点配置不当,没有对请求源的域做严格限制,导致任意源都可以访问时,就存在CORS跨域漏洞问题。 四、CORS漏洞主要类型 4.1 未正确设置Access-Control-Allow-Origin 如果Access-Control-Allow-Origin头未正确设置,攻击者可以构造特定请求,绕过同源策略获取数据。 4.2 Access-Control-Allow-Origin设置为* 设置为 * 表示所有站点都可以访问该资源,可能导致安全问题。攻击者可以伪造HTTP请求头中Origin字段的值获取数据。 4.3 未正确设置Access-Control-Allow-Credentials 如果未正确设置该头部,攻击者可以伪造HTTP请求头中的Origin和Cookie字段,绕过同源策略获取数据。 4.4 使用不安全的HTTP方法和头部 如果未正确设置Access-Control-Allow-Methods和Access-Control-Allow-Headers,攻击者可以构造特定请求,使用不安全的HTTP方法和头部获取数据。 4.5 CSRF与CORS结合 由于CORS的存在,攻击者可以利用CSRF漏洞发起跨域请求,绕过同源策略获取数据。 五、CORS漏洞危害 窃取用户敏感信息 :如cookie等身份认证信息 执行未授权操作 :如POST请求修改数据、DELETE请求删除数据 数据篡改 :通过跨域POST请求篡改数据库数据 资源耗尽 :发起大量跨域请求占用服务器资源 六、CORS漏洞检测方法 使用BurpSuite抓包,添加 Origin: http://www.attacker.com 进行测试: 存在漏洞 : 或 不存在漏洞 : 或 七、CORS漏洞复现 7.1 Java复现 参考: https://mp.weixin.qq.com/s/PSU8T-IO3mAz4MEVvAeUug 中的part3 7.2 PHP复现 参考: https://mp.weixin.qq.com/s/ViSR-l41Z9qsazxI2MAhTA 使用dorabox靶场,搭建方式参考: https://mp.weixin.qq.com/s/juseXiuKATSTRUwoMjLI-Q 八、CORS工具化检测 Burp插件 : JSONP-Hunter: https://github.com/p1g3/JSONP-Hunter 自动搜集CORS与JSONP请求 扫描工具 : CORS-SCAN: https://github.com/p1g3/CORS-SCAN 使用: python3 cors_test.py url_file.txt Xray扫描 : 可扫描这类漏洞,但需人工判断响应数据是否敏感 POC生成工具 : PoCBox: https://github.com/0verSp4ce/PoCBox Docker启动: 九、防御措施 严格限制Access-Control-Allow-Origin : 避免使用通配符 * 明确指定允许的域名 谨慎使用Access-Control-Allow-Credentials : 当需要发送凭据时,确保Origin严格限制 限制HTTP方法和头部 : 明确指定允许的方法和头部 使用CSRF Token : 防止CSRF与CORS结合攻击 服务器端验证 : 验证Origin头是否在允许列表中 避免仅依赖客户端验证 十、参考链接 https://mp.weixin.qq.com/s/PSU8T-IO3mAz4MEVvAeUug https://mp.weixin.qq.com/s/ViSR-l41Z9qsazxI2MAhTA https://mp.weixin.qq.com/s/21jwvrWhbkVdE5EUovvNZQ https://mp.weixin.qq.com/s/u-Eysz8vn9UszdnJuCowPA