A.WebView跨域访问漏洞:
在Android应用中,WebView开启了file域访问,允许file域访问http域,且未对file域的路径进行严格限制。攻击者通过URL Scheme的方式,可远程打开并加载恶意HTML文件,远程获取用户隐私数据(包括手机应用数据、照片、文档等敏感信息),还可窃取用户登录凭证,在受害者毫无察觉的情况下实现对APP用户账户的完全控制。
- 若file域访问为非功能需求时,手动配置setAllowFileAccessFromFileURLs或setAllowUniversalAccessFromFileURLs两个API为false。(Android4.1版本之前这两个API默认是true,需要显式设置为false)
WebView.getSettings.setAllowFileAccessFromFileURLs(false);
WebView.getSettings.setAllowUniversalAccessFromFileURLs(false);
- 若需要开启file域访问,则设置file路径的白名单,严格控制file域的访问范围,具体如下:
1)固定不变的HTML文件可以放在assets或res目录下,file:///android_asset和file:///android_res在不开启API的情况下也可以访问。
2)可能会更新的HTML文件放在/data/data/(app) 目录下,避免被第三方替换或修改。
3)对file域请求做白名单限制时,需要对"../../"特殊情况进行处理,避免白名单被绕过。 - 避免App内部的WebView被不信任的第三方调用。排查内置WebView的Activity是否被导出、必须导出的Activity是否会通过参数传递调起内置的WebView等。
B.有风险的WebView系统隐藏接口漏洞
根据CVE披露的WebView远程代码执行漏洞信息(CVE-2012-663、CVE-2014-7224),Android系统中存在一共三个有远程代码执行漏洞的隐藏接口。分别是位于android/webkit/webview中的"searchBoxJavaBridge"接口、android/webkit/AccessibilityInjector.java中的"accessibility"接口和"accessibilityTraversal"接口。调用此三个接口的APP在开启辅助功能选项中第三方服务的Android系统上将面临远程代码执行漏洞。
开发者自查,如果使用了WebView,那么使用WebView.removeJavascriptInterface(String name)API时,显示的移除searchBoxJavaBridge_、accessibility、accessibilityTraversal这三个接口。
WebView.removeJavascriptInterface("searchBoxJavaBridge_");
WebView.removeJavascriptInterface("accessibility");
WebView.removeJavascriptInterface("accessibilityTraversal");
C.WebView File域同源策略绕过风险检测
应用程序一旦使用WebView,同时支持File域,并打开了对JavaScript的支持,就能利用JavaScript的延时执行,绕过File协议的同源检查,并能够访问应用程序的私有文件,导致敏感信息泄露。
1.对于不需要使用File协议的应用,禁用File协议,显式设置WebView.getSettings().setAllowFileAccess(false)
WebView.getSettings().setAllowFileAccess(false);
2.对于需要使用File协议的应用,禁止File协议调用JavaScript,显式设置WebView.getSettings().setJavaScriptEnabled(false)
WebView.getSettings().setJavaScriptEnabled(false);
网友评论