漏洞
应用克隆漏洞
漏洞发现
由腾讯玄武实验室发现支付宝存在该漏洞
漏洞特征
攻击流程
漏洞攻击原理
该漏洞主要利用了Android系统WebView控件的同源策略漏洞来进行攻击,Android应用内部分可导出的Activity组件中,WebView允许通过file url对http域进行访问,并且并未对file域的路径进行严格校验所导致的。
该漏洞会打破Android应用的沙箱隔离机制,即A应用可以通过B应用导出的Activity让B应用加载一个恶意file协议的url,从而获取B应用的内部私有文件。
当APP出现以下两种情况时,即受该漏洞的影响:
- WebView中setAllowFileAccessFromFileURLs 或**setAllowUniversalAccessFromFileURLsAPI配置为true;
- WebView可以直接被外部调用,并能够加载外部可控的HTML文件。
漏洞的初步修复建议
file域访问为非功能需求时,手动在Activity中配置setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLs两个API为false。(Android4.1版本之前这两个API默认是true,需要显式设置为false)
若需要开启file域访问,则设置file路径的白名单,严格控制file域的访问范围,具体如下:
- 固定不变的HTML文件可以放在assets或res目录下,file:///android_asset和file:///android_res 在不开启API的情况下也可以访问;
- 可能会更新的HTML文件放在/data/data/(app) 目录下,避免被第三方替换或修改;
- 对file域请求做白名单限制时,需要对“../../”特殊情况进行处理,避免白名单被绕过。
避免App内部的WebView被不信任的第三方调用。排查内置WebView的Activity是否被导出、必须导出的Activity是否会通过参数传递调起内置的WebView等。
建议进一步对APP目录下的敏感数据进行保护。客户端APP应用设备相关信息(如IMEI、IMSI、Android_id等)作为密钥对敏感数据进行加密。使攻击者难以利用相关漏洞获得敏感信息。
简单复现及处理
将一下内容保存为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<!DOCTYPE>
<html>
<head>
<meta charset="utf-8" />
<title>webview</title>
<style></style>
<script type="text/javascript">
<!--alert("1");-->
function loadData(){
var arm="file:///mnt/sdcard/abc.txt";
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4) {
alert("3");
alert(xmlhttp.responseText);
}
}
xmlhttp.open("GET",arm);
xmlhttp.send(null);
}
<!--alert("2");-->
</script>
</head>
<body>
<input type="button" name="btn" value="触发漏洞" onclick="loadData()" />
</body>将该文件放到assets目录下,在手机sd卡目录下,新建一个abc.txt,键入部分文字。
使用webview加载该文件,点击触发漏洞按钮,如果弹出内容为空,则说明加载不到(在该手机上无此漏洞);如果弹出了文件中的内容,则说明在该手机上需要进行处理
如果存在该漏洞,并且app不需要进行文件域操作,那么,设置为false即可。
1
2
3WebSettings wSet = wView.getSettings();
wSet.setAllowFileAccessFromFileURLs(false);
wSet.setAllowUniversalAccessFromFileURLs(false);如果因为需求需要,那么我们可以在该方法中拦截url,对非法或者不符合预期的url进行拦截,不让其加载。
1
2
3
4@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
漏洞的危害
在备份旧手机应用数据,恢复到新手机的过程中。
认出来我换设备的APP有且只有一款:
Lastpass–密码安全应用,果然是专业的,克隆后启动,显示设备被禁用。给我发了提醒邮件,让我确认新设备登录。
其他支付宝,微博,微信,QQ,工行,建行,招行等的客户端,百度安全中心,YY安全中心,QQ安全中心,google身份验证器等一票涉及金融,涉及密保的APP都没发现,他们在新设备里运行。
支付宝,微博,微信,QQ,工行,建行,招行–这些还好一点,毕竟关闭小额免密后还只是个人信息的泄露。
这里对我认为危害最大的是谷歌的原生应用,也是最核心安全应用——–(google)身份验证器,和各种XX安全中心,还有微信
百度安全中心,YY安全中心,QQ安全中心虽然也可以实现克隆动态令牌,但是我可以在这些APP里给他们设置启动密码,克隆出来的APP也需要输入密码才能进去。而(google)身份验证器、微信是无法设置启动密码的。他就不支持设置启动密码。
身份验证器是google的密保,是lastpass的密保,是teamviewer的密保,是博客后台的密保,是VPS的密保。Gmail邮箱是很多账号的密保邮箱。
而现在很多应用也在使用微信验证码。
这意味着,如果身份验证器、微信被克隆。整个账号安全防御体系都可能整体崩溃。
转自知乎 Happy Ennding 的回答
更详细的漏洞复现
https://www.cnblogs.com/goodhacker/p/8748681.html
检测方法
暂时没有查询到任何自动化的检测方法, 百度百科表示该漏洞的检测无法自动化进行必须要人工检测。360提出有自动化检测方法,但网上没有任何自动化检测的方法以及方向