Ywc's blog

深入理解CORS漏洞

Word count: 986Reading time: 3 min
2020/11/20

漏洞原理

  • CORS,即跨源资源共享(Cross-Origin Resource Sharing)。同源策略(Same OriginPolicy)要求不同源之间是无法通信的,而CORS则是放宽同源策略以通过浏览器实现网站之间通信的机制。
  • CORS全称为Cross-Origin Resource Sharing即跨域资源共享,用于绕过SOP(同源策略)来实现跨域资源访问的一种技术。
    CORS漏洞则是利用CORS技术窃取用户敏感数据,CORS漏洞的成因是服务端配置的规则不当所导致的,服务器端没有配置Access-Control-Allow-Origin等字段

漏洞危害

1、获取用户数据
2、客户端缓存中毒:这种配置允许攻击者利用其他的漏洞,更改没有验证的字段,看是否正常回显。比如,一个应用返回数据报文头部中包含“X-User”这个字段,这个字段的值没有经过验证就直接输出到返回页面上,此时就可以结合XSS漏洞来利用。
3、服务端缓存中毒:利用CORS的错误配置注入HTTP头部,这可能会被服务器端缓存下来,比如制造存储型xss

测试方法

修复建议

1、仔细评估是否开启CORS,如果不必要就不要开启CORS。
2、如果是绝对必要的话,要定义“源”的白名单。尽量不使用正则表达式配置,不要配置“Access-Contol-Allow-Origin”为通配符“*”,同时严格校验来自请求的Origin值。
3、仅仅允许安全的协议,有必要验证协议以确保不允许来自不安全通道(HTTP)的交互,否则中间人(MitM)将绕过应用是所使用的HTTPS。
4、要尽可能的返回”Vary: Origin”这个头部,以避免攻击者利用浏览器缓存。
5、如果可能的话避免使用“Credentials”头,由于“Access-Control-Allow-Credentials”标头设置为“true”时允许跨域请求中带有凭证数据,因此只有在严格必要时才应配置它。此头部也增加了CSRF攻击的风险;因此,有必要对其进行保护。
6、限制使用的方法,通过“Access-Control-Allow-Methods”头部,还可以配置允许跨域请求的方法,这样可以最大限度地减少所涉及的方法。
7、限制缓存的时间,通过“Access-Control-Allow-Methods”和“Access-Control-Allow-Headers”头部,限制浏览器缓存信息的时间。可以通过使用“Access-Control-Max-Age”标题来完成,该头部接收时间数作为输入,该数字是浏览器保存缓存的时间。配置相对较低的值(例如大约30分钟),确保浏览器在短时间内可以更新策略(比如允许的源)。
8、仅配置所需要的头,仅在接收到跨域请求的时候才配置有关于跨域的头部,并且确保跨域请求是合法的(只允许来自合法的源)。

Reference

CORS配置不当—挖掘技巧及实战案例全汇总
cors安全完全指南

CATALOG
  1. 1. 漏洞原理
  2. 2. 漏洞危害
  3. 3. 测试方法
  4. 4. 修复建议
  5. 5. Reference