绕过Edge、Chrome和Safari的内容安全策略

概述

Web应用中有许多基本的安全机制,其中一个是同源(same-origin)策略机制,该机制规定了应用程序代码可以访问的资源范围。同源策略的基本思想是,源自于某台服务器上的代码只能访问同一台服务器上的web资源。

比如,在Web浏览器上下文中执行的某个脚本,如果其来源服务器为good.example.com,那么它就可以访问同一台服务器上的数据资源。另一方面,根据同源策略的思想,来自evil.example.com的另一个脚本不能访问good.example.com上的任何数据。

然而,web应用中存在许多漏洞,利用这些漏洞,攻击者可以绕过同源策略的限制,这一点已经被许多事实证明。其中最为典型也最为有效的一种攻击技术是跨站脚本(Cross Site Scripting,XSS)技术。利用XSS技术,攻击者可以在浏览器正在执行的原始服务器代码的上下文中插入远程代码。从浏览器角度来看,插入的代码看起来与合法应用一样,都源自同一个服务器,因此就会允许这些代码访问本地资源,最终将隐私数据泄露给攻击者,甚至会出现应用会话劫持现象。

内容安全策略(Content Security Policy,CSP)是防御XSS攻击的一种安全机制,其思想是以服务器白名单的形式来配置可信的内容来源,客户端Web应用代码可以使用这些安全来源。Cisco研究人员找到了绕过CSP的一种方法,攻击者可以利用这种方法,注入被禁止的代码,从而窃取隐私数据。

技术细节:Talos-2017-0306(CVE-2017-2419, CVE-2017-5033)


CSP定义了一个HTTP头部:Content-Security-Policy,这个头部可以创建一个白名单源,使浏览器只会从策略指定的可信源来执行资源。即使攻击者找到某种方法完成恶意脚本注入,通过在远程脚本源中插入一段<script>标签成功发起XSS攻击,在CSP的限制下,远程源仍然不会与可信源清单匹配,因此也不会被浏览器执行。

Content-Security-Policy头中定义了一条“script-src”指令,这条指令用来配置脚本代码所对应的CSP。举个例子,头部中某一行如下所示:

Content-Security-Policy: script-src 'self' https://good.example.com

根据这一行,浏览器只能从当前访问的服务器或者good.example.com这个服务器才能加载脚本资源。

然而,我们发现Microsoft Edge浏览器(40.15063版仍未修复)、Google Chrome浏览器(已修复)以及Safari浏览器(已修复)中存在一个信息泄露漏洞。利用这个漏洞,攻击者可能绕过Content-Security-Policy头指定的策略,导致信息泄露问题。

漏洞利用由三个主要模块构成:(a)在Content-Security-Policy中使用“unsafe-inline”指令,使浏览器支持内联(inline)脚本代码;(b)使用window.open()打开一个空白的新窗口;(3)调用document.write函数将代码写入新创建的空白窗口对象中,以绕过文档上的CSP限制策略。

这个问题会影响Microsoft Edge浏览器、老版本的Google Chrome浏览器以及Firefox浏览器,原因在于“about:blank”页面与加载该页面的文档属于同一个源,但不受CSP策略限制,基于这些事实,攻击者就可以完成漏洞利用。

想了解更多信息的话,读者可以参考TALOS的漏洞报告:TALOS-2017-0306。该报告部分内容摘抄如下:

“ 攻击者可以使用window.open("","_blank")创建一个新页面,然后使用document.write将恶意脚本写入该页面,由于攻击者处于about:blank页面中,因此可以绕过原始页面上的CSP限制策略,成功访问其他站点。有人可能会说,这是因为CSP头中使用了不安全内联方式来加载代码才导致这个问题,但即便如此,浏览器也应该阻止任何形式的跨站通信行为(比如使用1x1像素大小的跟踪图片等行为)。

about:blank页面与其加载文档属于同一个源,但却不受CSP限制策略影响。在CSP规范文档中,早已明确指出CSP限制策略应该被页面所继承。大家可以参考此规范文档。”

相关讨论


攻击者可以利用某些漏洞执行远程代码、逃逸浏览器沙箱实现对目标系统的访问及控制,与这些漏洞比起来,信息泄露漏洞可能没那么严重。

然而,攻击者可以利用XSS攻击窃取隐私数据甚至最终控制用户账户,这样问题就会变得非常严重。内容安全策略正是为了防御XSS攻击而设计的,可以让服务器将可信资源添加到白名单中,使浏览器能安全执行这些资源。

许多开发者依赖CSP来使自己免受XSS以及其他信息泄露攻击影响,他们非常信任浏览器能支持这种安全标准。然而,我们发现不同浏览器所对CSP的具体实现有所不同,这样一来,攻击者可以针对特定的浏览器编写特定的代码,以绕过内容安全策略的限制,执行白名单之外的恶意代码。

我们建议用户使用对CSP机制提供更完整支持的那些浏览器,也建议用户保持浏览器处于最新版本,以防御新发现的所有安全漏洞(比如本文描述的信息泄露等漏洞)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Seebug漏洞平台

DeDeCMS v5.7 密码修改漏洞分析

织梦内容管理系统(DedeCms)以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的...

48780
来自专栏个人分享

RPC远程过程调用协议

  最近学习Hadoop、Hbase、Spark及Storm原理,经常会出现RPC这样的传输术语,为了更好地理解,将知识点详细的整理下吧~

50740
来自专栏JAVA高级架构

高并发解决方案--负载均衡

28820
来自专栏容器云生态

heartbeat+lvs构建高可用负载均衡集群

heartbeat+lvs实现高可用负载均衡原理: 两台heartbeat(ldirectord)主机构成高可用集群,同时监管着lvs(负载均衡集群)整体构成了...

256100
来自专栏信安之路

轻松理解 X-XSS-Protection

首先我们来理解一下什么是“X-XSS-Protection”,从字面意思上看,就是浏览器内置的一种 XSS 防范措施。

15000
来自专栏子勰随笔

iMac(OS X)不可或缺的套件管理器 —— Homebrew

17950
来自专栏后端技术探索

Nginx如何做流量控制

英文原文:https://www.nginx.com/blog/rate-limiting-nginx/

62840
来自专栏Flutter入门到实战

开发工具总结(3)之Git及GitHub快速入门图文全面详解

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/3f12bd3ccf2a

11830
来自专栏决胜机器学习

高性能网站架构方案(二)——优化网站响应时间

高性能网站架构方案(二)——优化网站响应时间 (原创内容,转载请注明来源,谢谢) 一、概述 优化网站响应时间是保证网站受用户关注的要点,主要方案有: 1、减...

32160
来自专栏耕耘实录

CentOS7.X的系统管理、安全设置及系统优化思路

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

28020

扫码关注云+社区

领取腾讯云代金券