频道栏目
首页 > 安全 > 系统安全 > 正文

针对Youtube中高级Flash漏洞bug的研究

2017-09-08 09:19:15      个评论      
收藏   我要投稿

一、媒介

Flash至今还是一个活泼的威逼起源。在2017年,我分离向Facebook、Youtube、WordPress、Yahoo、Paypal和Stripe提交了Flash破绽。在过去的3年中,我向破绽嘉奖名目提交了跨越50个Flash破绽,得到了跨越80k美元的嘉奖。由于精神无限,另有许多破绽我来不及提交,也有些破绽在我提交后还没有被修复。

与此同时,Flash曾经被新推出的javascript/html5所代替。这些功效引入了新的更加繁杂的破绽,好比差错的CORS实现办法、经由过程postMessage或XHR哀求触发DOM XSS、自动混杂的数据内容等等。咱们可以或许从Flash破绽中吸取经验,以实现加倍平安的javascript利用程序。新推出的Youtube html5 Api看上去更像是Youtube Flash Api移植到javascript上的实现版本,是以是一个异常抱负的研讨工具。实际上,利用我在Flash Api中积聚的履历,我切实其实在Youtube html5 Api中找到了多个XSS破绽。

在本文中,我会先容我在Youtube Flash Api中找到的一些高档Flash破绽,同时我也会趁便提到html/javascript平安性方面的内容。这些内容的技巧细节比较多,以是假如有甚么看法或许倡议可以或许随时经由过程Twitter接洽我(@opnsec)。你也能够或许拜访此链接以懂得Flash平安模子的详细信息。

二、逆向阐发Youtube Flash Api

开发者可以或许利用Youtube Flash Api在内部网站中拔出Youtube视频。

Api的工作流程以下图所示:

\

作为进口点,Youtube Wrapper其实是一个Flash文件,文件的详细门路为youtube.com/v/[VIDEO_ID],该文件其实是HTML页面和Main App(主利用)之间的一个封装器。

主利用(Main Application)是一个大型Flash文件,大约有100k行代码,地点位于s.ytimg.com这个沙箱域名中。

Modules(模块)用来处置可选功效,好比字幕或许告白功效。这些模块不是自力的Flash文件,只能由Main App来加载。

别的,另有一个Flash转Javascript的Api,html页面可以或许经由过程这个Api向Youtube Api发送敕令,这些敕令包含play()、pause()等等。Flash文件也会履行ajax作风(ajax style)的跨站哀求,以加载配置文件和视频数据。

三、用户信息泄漏破绽

起首,咱们先来阐发一个简略的破绽。以下这段Flash ActionScript3(AS3)代码是一段简化版的Youtube Wrapper实现代码:

\

这段代码会及时天生Youtube Wrapper,此中“username”属性包含Google用户的用户名(假如用户已连接到Google),“userpicture”包含用户小我资料图片的详细链接。在这个破绽中,进击者可以或许盗取这些属性的值。

开发者可以或许从自己的Flash文件(咱们可以或许称之为Evil Wrapper)中加载Youtube Wrapper。在这类环境下,这两种Wrapper都邑在另一个Flash平安沙箱中履行。

备注:

在Flash中加载内部Flash文件有点类似于在html中加载一个。假如iframe的起源与其父节点分歧,由于同源战略(Same-Origin Policy,SOP),这二者无奈拜访相互的属性。

Youtube Wrapper中包含Security.allowDomain("*")如许的代码,以便宿主网页中的javascript可以或许向Flash利用发送诸如play()、pause()等敕令。这也意味着Evil Wrapper可以或许拜访Youtube Wrapper的任何地下属性,由于这二者处于同一个平安沙箱中。但是,Evil Wrapper无奈拜访公有属性。

由于user_name属性为公有属性,是以Evil Wrapper无奈拜访它。

别的,Flash还供给了一个Api以便Loader(加载者)与被加载文件之间可以或许经由过程loaderInfo.sharedEvents互相通讯。Youtube Wrapper利用这个api来与Main App停止通讯。当Main App将一个变乱(event)发送给sharedEvents Api时,Youtube Wrapper会收到这个变乱,而后利用event.data这个属性来前往用户信息。不只Loader和被加载文件可以或许拜访loaderInfo.sharedEvents,只需援用了这个loaderInfo工具,其余任何Flash文件都可以或许拜访loaderInfo.sharedEvents。

备注:

这类环境类似于javascript的postMessage Api,这个Api异样可以或许容许跨域iframe之间的通讯交换。不只iframe及其父窗口可以或许拜访postMessage Api,只需利用window.open和window.frames,任何域名都可以或许拜访这些援用,这类环境不受SOP限定。

假如Evil Loader可以或许拜访这个loaderInfo工具,那末它就可以或许向Youtube Wrapper发送变乱,盗取用户信息。

由于loaderInfo是appLoader的一个属性,而appLoader是Youtube Wrapper的一个公有属性,是以Evil Wrapper无奈拜访这个属性。

但是,当利用Loader时,假如咱们想要表现已加载的文件,就必须将其增加为Display Container的子节点。平日环境下,咱们会利用this.addChild(this.loader)来实现这个义务,这也恰是Youtube Wrapper采用的办法。

成绩在于,Youtube Wrapper另有一个内置的大众办法,名为getChildAt(),这个办法可以或许前往Youtube Wrapper的子节点。这意味着Evil Wrapper可以或许挪用YoutubeWrapper.getChildAt(0),如许就可以或许前往Loader工具,绕过Loader属性的隐衷限定战略。

备注:

将属性设为“公有(private)”是一种封装办法。但是,这类环境下,只要援用自己是公有的,援用所指向的谁人工具并非公有工具。

如许一来,Evil Wrapper就可以或许拜访YoutubeWrapper.getChildAt(0).loaderInfo.sharedEvents,而这恰是Youtube Wrapper和Main App之间的接口。Evil Wrapper可以或许往Youtube Wrapper发送变乱,Youtube Wrapper会在event.data属性中供给用户信息,是以Evil Wrapper就可以或许从event.data中读取用户信息。

3.1 PoC代码

Evil Wrapper代码以下所示:

\

3.2 PoC工作流程

PoC代码的工作流程以下图所示:

\

3.3 进击场景

进击的条件是,受害者的Google处于已登录状况,而且受害者已装置Flash player。

进击场景以下:

(1)受害者拜访进击者的网站(evil.com/evil.html),这个网站包含一个歹意的Flash工具(evil.com/evil.swf)。

(2)evil.swf加载Youtube wrapper(https://www.youtube.com/v/[VIDEO_ID]),获得用户的Google用户名(4-5-6),而后evil.com就可以或许得悉拜访该站点的用户名。别的,由于小我资料的图片链接具备独一特性,是以进击者有可能辨认出用户的Google账户。

3.4 影响规模

假如网站用户已登录Google,那末任何网站都可以或许利用这类办法来提取网站拜访用户的身份。设想一下,假如咱们随机拜访一个网站,而后这个网站竟然会表现咱们的姓名和照片,惊不欣喜?意不不测?

3.5 减缓步伐

为了办理这个成绩,Youtube Wrapper曾经结束往event.data属性中写入用户信息,如今会将用户信息间接发往Main App。如许处置后,纵然Evil Wrapper往Youtube Wrapper发送新闻,它也不会收到用户信息,由于相干信息会间接发送到Main App。

3.6 光阴线

08/27/2015 – 向Google VRP提交破绽

09/09/2015 – 破绽被修复,得到嘉奖(1星,满分4星)。

四、总结

这是一个简略的破绽,盼望你能经由过程这个破绽懂得根本的道理。你可以或许进一步浏览第二篇文章,在那篇文章中,咱们利用另一个破绽实现了在youtube.com上履行随意率性Flash代码。

上一篇:Apache Struts2–052 漏洞研究警示
下一篇:Oracle Java及Apache Xerces PDF/Docx服务器端DDOS漏洞
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站