forked from Trietptm-on-Security/WooYun-2
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathAndroid WebView File域攻击杂谈.html
119 lines (77 loc) · 117 KB
/
Android WebView File域攻击杂谈.html
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<html>
<head>
<title>Android WebView File域攻击杂谈 - 路人甲</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>原文地址:<a href="http://drops.wooyun.org/mobile/11263">http://drops.wooyun.org/mobile/11263</a></h1>
<p>
<h1>0x00 前言</h1>
<hr />
<p>现在越来越多Android App使用了WebView,针对WebView的攻击也多样化。这里简单介绍下目前的WebView File域攻击一些常用的方法,并重点举例说明下厂商修复后依然存在的一些问题。(影响Android 4.4及以下)</p>
<h1>0x01 WebView中的file协议</h1>
<hr />
<p>我们知道,在Android JELLY_BEAN以下版本中,如果WebView没有禁止使用file域,并且WebView打开了对JavaScript的支持,我们就能够使用file域进行攻击。</p>
<p>在File域下,能够执行任意的JavaScript代码,同源策略跨域访问能够对私有目录文件进行访问等。APP中如果使用的WebView组件未对file协议头形式的URL做限制,会导致隐私信息泄露。针对IM类软件会导致聊天信息、联系人等等重要信息泄露,针对浏览器类软件,则更多的会是cookie等信息泄露。</p>
<!--more-->
<p>譬如之前Wooyun上爆了一个利用file域攻击的漏洞( <a target="_blank" href="http://www.wooyun.org/bugs/wooyun-2013-037836">WooYun: 360手机浏览器缺陷可导致用户敏感数据泄漏</a> )</p>
<p>代码如下:</p>
<pre><code>var request = false;
if(window.XMLHttpRequest) {
request = new XMLHttpRequest();
if(request.overrideMimeType) {
request.overrideMimeType('text/xml');
}
}
xmlhttp = request;
var prefix = "file:////data/data/com.qihoo.browser/databases";
var postfix = "/webviewCookiesChromium.db"; //取保存cookie的db
var path = prefix.concat(postfix);
// 获取本地文件代码
xmlhttp.open("GET", path, false);
xmlhttp.send(null);
</code></pre>
<h1>0x02 使用符号链接同源策略绕过</h1>
<hr />
<p>WebKit 有跨域访问的检查,它的规则是 ajax 访问相同 path 的文件就 allow,否则 deny。利用符号链接,把相同文件名指向了隐私文件,会造成同源策略检查失效。攻击者通过本地文件使用符号链接和File URL结合,利用该漏洞绕过同源策略,进而进行跨站脚本攻击或获得密码和cookie信息。</p>
<p>在JELLY_BEAN及以后的版本中不允许通过File url加载的Javascript读取其他的本地文件,不允许通过File url加载的Javascript可以访问其他的源,包括其他的文件和http,https等其他的源。那么我们要在通过File url中的javascript仍然有方法访问其他的本地文件,即通过符号链接攻击可以达到这一目的,前提是允许File url执行javascript。</p>
<p>目前所知,通过使用符号链接同源策略绕过可以使file域攻击影响到Android 4.4,进一步扩大了攻击范围。</p>
<p>这个典型的漏洞分析可以看下参考栏中的【2】</p>
<h1>0x03 依然存在问题</h1>
<hr />
<p>自13年file域导致的安全问题受到关注后,一些厂商进行了相应的修复。因为一些开发者的认识程度以及可能产品实际需求,虽然各种厂商针对性做了不少patch的工作,但是仍然出现了各种问题。当然,这里的前提是WebView 没有禁用file协议也没有禁止调用javascript,即WebView中setAllowFileAccess(true)和setJavaScriptEnabled(true)。我们举几个例子说明如下:</p>
<p>A、某app修复的时候,在某个过程中判断url是否以<code>file:///</code>开头,如果是的话就返回,不是的话,再loadUrl</p>
<p><img src="http://static.wooyun.org//drops/20151211/2015121108354531693130.png" alt="p1" /></p>
<p><img src="http://static.wooyun.org//drops/20151211/2015121108354745051213.png" alt="p2" /></p>
<p>乍看这个修复,认为已经能够防止file域攻击问题了。但是,忽略了一个问题,如果我们在<code>file:///</code>前面添加空格,是否还仍然能够正常loadUrl。尝试后发现会修正下协议头,也就是说file域前面添加空格,是能够正常访问的。于是我们构造了如下POC就能够绕过这个限制:</p>
<pre><code>Intent i = new Intent();
i.setClassName("xxx.xxx.xxx","xxx.xxx.xxx.xxxxxx");
i.putExtra("url", " file:///mnt/sdcard/filedomain.html"); //file域前面增加空格
startActivity(i);
</code></pre>
<p>B、很自然,有些开发者就想trim去空格就可以修复了,于是我们又看到下面这个例子</p>
<p><img src="http://static.wooyun.org//drops/20151211/201512110835492602734.jpg" alt="p3" /></p>
<p>这种修复方式,一般认为已经解决了前面说明的问题了。但是,这里头存在一个技巧,即协议头不包括<code>///</code>,还是仍然能够正常loadUrl。看下我们构造了如下POC就能够绕过这个限制:</p>
<pre><code>Intent i = new Intent();
i.setClassName("xxx.xxx.xxx","xxx.xxx.xxx.xxxxxx");
i.putExtra("url", "file:mnt/sdcard/filedomain.html"); //file域跟mnt之间没有空格的情况
startActivity(i);
</code></pre>
<p>通过这两个简单的例子,从细节可以看到虽然现在越来越多的开发者注意到file域攻击的一些问题,也进行了相应的对抗措施,但是仍然还有不少因修复不善导致的绕过的方法,根源还是在于要获取协议头的问题。</p>
<h1>0x04 参考</h1>
<hr />
<ul>
<li>【1】<a href="http://blogs.360.cn/360mobile/2014/09/22/webview%E8%B7%A8%E6%BA%90%E6%94%BB%E5%87%BB%E5%88%86%E6%9E%90/">http://blogs.360.cn/360mobile/2014/09/22/webview%E8%B7%A8%E6%BA%90%E6%94%BB%E5%87%BB%E5%88%86%E6%9E%90/</a></li>
<li>【2】<a href="http://jaq.alibaba.com/blog.htm?spm=0.0.0.0.OK100r&id=62">http://jaq.alibaba.com/blog.htm?spm=0.0.0.0.OK100r&id=62</a></li>
</ul>
<h1>0x05 总结</h1>
<hr />
<p>总结一下这类问题的修复</p>
<ol>
<li>对于不需要使用file协议的应用,禁用file协议</li>
<li>对于需要使用file协议的应用,禁止file协议调用javascript</li>
<li>将不必要导出的组件设置为不导出</li>
</ol>
<p>File域下攻击的问题,现在已经算是老生常谈了,但是依然还存在很多猥琐的手段来利用。这里不一一说明了,总之思想有多远,攻击面就有多宽!Have Fun!</p> </p>
</body>
</html>