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()