insecure-cors-configuration: 不安全的 CORS 配置漏洞

日期: 2025-09-01 | 影响软件: 未知 | POC: 已公开

漏洞描述

1. HTTP头只能说明请求来自一个特定的域,但是并不能保证这个事实。因为HTTP头可以被伪造。所以未经身份验证的跨域请求应该永远不会被信任。如果一些重要的功能需要暴露或者返回敏感信息,应该需要验证SessionID。 2. 恶意跨域请求,即便页面只允许来自某个信任网站的请求,但是它也会收到大量来自其他域的跨域请求。这些请求有时可能会被用于执行应用层面的DDOS攻击,并不应该被应用来处理。 3. 内部信息泄漏,假定一个内部站点开启了CORS,如果内部网络的用户访问了恶意网站,恶意网站可以通过CORS(跨域请求)来获取到内部站点的内容. 修补建议 1. 配置白名单,只允许特定的Access-Control-Allow-Origin头,并拒绝白名单以外的域名进行访问; 2. 配置Access-Control-Allow-Origin为*号,此时虽然允许任意域名访问,但是设置为*号后,会导致cors漏洞无法造成实际危害; 3. 通过多种条件屏蔽掉非法的请求,例如HTTP头、参数等;如果使用了反向代理等功能,则需要配置在最里层的中间件;

PoC代码[已公开]

id: insecure-cors-configuration

info:
  name: 不安全的 CORS 配置漏洞
  author: daffainfo
  severity: medium
  verified: false
  description: |-
    1.	HTTP头只能说明请求来自一个特定的域,但是并不能保证这个事实。因为HTTP头可以被伪造。所以未经身份验证的跨域请求应该永远不会被信任。如果一些重要的功能需要暴露或者返回敏感信息,应该需要验证SessionID。
    2.	恶意跨域请求,即便页面只允许来自某个信任网站的请求,但是它也会收到大量来自其他域的跨域请求。这些请求有时可能会被用于执行应用层面的DDOS攻击,并不应该被应用来处理。
    3.	内部信息泄漏,假定一个内部站点开启了CORS,如果内部网络的用户访问了恶意网站,恶意网站可以通过CORS(跨域请求)来获取到内部站点的内容.
    修补建议
    1. 配置白名单,只允许特定的Access-Control-Allow-Origin头,并拒绝白名单以外的域名进行访问;
    2. 配置Access-Control-Allow-Origin为*号,此时虽然允许任意域名访问,但是设置为*号后,会导致cors漏洞无法造成实际危害;
    3. 通过多种条件屏蔽掉非法的请求,例如HTTP头、参数等;如果使用了反向代理等功能,则需要配置在最里层的中间件;
  tags: cors,configuration,security
  created: 2024/01/16

set:
  hosturl: request.url
rules:
  r0:
    request:
      method: GET
      path: /js/
      body: |
        Origin: https://www.example.com
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
        Accept-Encoding: gzip,deflate,br
        Host: "{{hosturl}}"
        Connection: Keep-alive
    expression: response.status == 404 && response.headers["content-type"].contains("text/plain") && response.headers["access-control-allow-credentials"].contains("true") && response.headers["access-control-allow-origin"].contains("https://www.example.com")
expression: r0()