【技术分享】CVE-2016-4271:Flash本地文件系统沙箱绕过

阅读量112732

|

发布时间 : 2016-09-30 15:56:26

x
译文声明

本文是翻译文章,文章来源:安全客

原文地址:http://lab.truel.it/flash-sandbox-bypass/

译文仅供参考,具体内容表达以及含义原文为准。

http://p4.qhimg.com/t018912a1b4126e5b95.jpg

2016年9月13日,Adobe关闭了本地文件系统沙箱沙箱。

本地文件系统沙箱在存在了二十年之后的今天,终于被Adobe关闭,使得几乎所有的使用这一功能的Flash文件都需要更新。

我们会具体解释这一改变到底为什么这么重要,为什么说对于Adobe来说这是一种巨大的飞跃。但是在这之前,还是需要解释一下本地文件系统沙箱是什么,以及现代网页浏览器是如何处理本地文件的。


什么是本地文件系统沙箱?为什么值得关注?

如果你喜欢使用ActionScript编程,但又不是开发人员,那你应该听说过Adobe Flash 安全沙箱。

简单来说,安全沙箱控制了SWF可以加载哪些外部资源。最著名的一个就是“远程安全沙箱”,其任务是判定远程主机上的一个Flash文件可以加载哪些文件:每次通过HTTP加载一个SWF时都会通过它来操作。相反的,如果在 file:// URI 上加载一个flash文件,SWF文件就会被存放在以下安全沙箱中:本地文件系统沙箱、本地网络沙箱、本地信任沙箱,或是AIR应用程序沙箱。

本地网络沙箱是最常见、也是默认设置中的沙箱:它禁止FLASH文件加载本地文件系统上的资源。

这种做法保证了本地文件不受远程主机的安全威胁,它可以防止某些恶意攻击者偷取用户的私人文件、密码或是信用卡信息等。

同样的,本地文件系统沙箱(编译 ActionScript 代码时可以选择)的目的是让远程主机远离本地文件,但是设计原理是相反的:SWF可以访问本地文件系统上的每一个文件,但是它不能访问远程网络。值得注意的是, 此功能无法在Javascript中启用——因为Javascript 会在这种类似的沙箱中“卡住”。

出于安全考虑,FLASH播放器将所有的本地SWF文件都默认存放在了本地文件系统沙箱中。SWF可以通过此沙箱读取本地文件,但是不能以任何方式连接到网络,这可以确保用户信息不会以不当方式被泄露。——adobe.com


理论上来说——为什么这种安全手段不管用?

理论上说,该安全模型是好用的。但是在实际操作中很难正确达到预期效果。这就是Adobe选择关闭沙箱的原因。

正如先前所说,本地文件系统沙箱中的SWF不论在何种情况下都不能连接到网络。在一个HTML文档中,SWF被各种不遵守这一原则的技术所包围:这类似于 Javascript。本文所报告的每一个漏洞背后的真正原因都是无法确保与远程网络通信的技术都不能读取FLASH文件。

总结来说,当我们使用URI方案文件时:

FLASH可以连接到本地文件系统

Javascript可以将数据发送到远程主机中

很明显,攻击者和用户本地文件之间的唯一障碍就是Javascript无法读取FLASH。FLASH会试图阻止每一个可能会泄露信息给Javascript的功能,但是它失败了。

我们将会讨论3个相互关联的不同事件,都是关于从本地文件系统中提取数据的。前两个利用网页浏览器RFC 3986 向navigateToURL() 传递恶意指令,并从本地文件中提取数据。最后一个的设计初衷是为了在谷歌浏览器中运行,但是却被Clickjacking 这样的老旧手段利用来泄露数据。


实际操作中——为什么无法实现?

A)navigateToURL()——通过URI%编码绕过本地沙箱(不可信指数达到100%)

正如前文所说,即使SWF是在本地文件系统沙箱中,也是可以使用navigateToURL() 的。显然,如果我们尝试从远程网络中获取文件,将会弹出一个安全异常,但是仍然可以访问本地文件。考虑到Javascript可以读取URL中的信息,navigateToURL()就是在FLASH和Javascript交互信息的最佳选择了。Adobe在发现这一情况之后采取很多方法来修改,但是却忽视了%编码,让我们来看看这种情况可能出现的后果。

RFC 3986, 2.1之后,这个URI:

navigateToURL(new URLRequest("file:///tmp/attack-this-sandbox.html"));

还可以是这样:

navigateToURL(new URLRequest("file:///tmp/%61ttack%2Dthis-sandbox.html"));

尽管这两个都是有效的,但还是不一样。 Mozilla Firefox和Safari中的  Javascript 只要简单地读取文档就可以发现两者的不同。在这种方式下,FLASH就会与Javascript交互:也就是说可以绕过本地文件系统沙箱到达外部网络。下面这种PoC就是利用了这一概念窃取信用卡号码的。

概念证明

我创建了一个PoC漏洞,既是HTML 文件,也是 SWF 文件。

在VIM中看起来似乎不错:

http://p7.qhimg.com/t013c0a7d4e439262e3.png

具体代码可以在此处下载:

http://lab.truel.it/wp-content/uploads/2016/09/Fun-with-percent-encoding.zip

下面是缓解之前的动态展示:

下面是缓解之后的动态展示:

B)navigateToURL() — — 滥用空格来绕过本地沙箱

类似于上面的例子,windows系统的本地URI有一个鲜为人知的功能被navigateToURL()忽视了。这个URI

navigateToURL(new URLRequest("file:///C:/attack-this-sandbox.html"));

也可以是这样:

navigateToURL(new URLRequest("file:///C:/attack-this-sandbox.html%20%20%20"));

正如你看到的这样,在URI的末尾有一些空格,在这种情况下,FLASH可以与 Javascript交换数据,违反本地文件系统沙箱原则。事实上, Javascript可以检测出这两个URI的不同,这就使得FLASH可以在每一次navigateToURL()调用时传输一部分数据。在这种情况下,我们之前已经讨论过的缓解警告对话框似乎大大限制了这一问题的影响范围,因为需要执行多次navigateToURL()调用才能传输与A事件中等量的数据。乍一看这一漏洞似乎无法在实际操作时使用。在下一部分中,我们将会做出反驳,再一次证明任何缓解措施都不是解决安全漏洞的好办法。

C)Adobe Flash——针对navigateToURL() 警告对话框的Clickjacking

这一问题出现以来,Adobe Flash一直都是Clickjacking最喜欢的攻击对象。讽刺的是,同样的攻击手段还可以用来攻击Adobe在谷歌浏览器上的navigateToURL()。

在下面的链接中是一个利用B部分所提漏洞的PoC,和一个可以在谷歌浏览器中提取信用卡数据的 Clickjacking(只要用户在玩一个无聊的Javascript游戏)。

概念证明

你可以下载这部分代码:

http://lab.truel.it/wp-content/uploads/2016/09/Pull-ups-With-Mr.-Sandy-Box.zip

下面是动态演示:


Adobe Flash 现在安全吗?

这个不好说。FLASH永远也无法修复这些问题,但是可以通过编辑配置文件选择性地启用本地文件系统沙箱。所以说,FLASH还是存在这些漏洞代码,但是只有在启用小部分设置时才会起作用,其他时候这部分漏洞都是“冻结”状态。在日后的新版本中也可能会有新变化,但是在实践操作中再次利用这些漏洞似乎是不太可能的,至少就现在来说。

                                                                                                                      – @lpontorieri


披露时间轴:

2015年4月4日:将漏斗报告给Adobe PSIRT。

2015年4月6日:Adobe承认漏洞存在并分配了标识号(PSIRT-3562)。

2015年4月17日:联系Adobe有关更新事宜,未得到回复。

2015年4月23日:再次尝试联系,仍未得到回复。

2015年4月29日:再次联系;Adobe表示他们还在研究漏洞报告。

2015年6月20日:发送CVE的ID请求。

2015年6月23日:Adobe回复称由于警告对话框缓解,不会修复A、B两个漏洞,他们正在试图修复C漏洞。

2016年9月9日:Adobe PSIRT 预警称他们会在下一次更新中更改安全沙箱政策。

2016年9月26日:公布漏洞。

【1】在本篇文章中,我们将重点关注本地文件系统沙箱和本地网络沙箱。更多详情请关注adobe.com

【2】前段时间,这里描述的漏洞由于警告对话框的出现得到了一定的缓解,最近一次FLASH更新之后这个漏洞几乎无关痛痒。该警告对话框要求用户提供“连接到互联网”的授权,并由navigateToURL() 调用触发。(这句话具有一定的误导性,因为在本地文件系统沙箱中用户并不能连接到远程主机)

【3】Mozilla Firefox 和Safari都证实了漏洞的存在。

【4】谷歌浏览器、Mozilla Firefox 和在Windows OS上运行的Opera都证实存在该漏洞。

本文翻译自安全客 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
默白
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66