Android WebView 安全漏洞解决方案

最近发现公司的应用的WebView存在安全漏洞,找到了一些解决方案和大家一起分享一下,有什么理解不对的地方请多多指教。平时比较懒惰,有写博客的想法,但是懒动手,今天下了狠心想写写东西。WebView我们平时在应用里用的比较多,经常用来展示WEB页面WebView功能非常强大,但是在最近几年也暴露出很多漏洞,我们一起来看看WebView的漏洞和解决方案。

一 CVE(通用漏洞与披露)中记录WebView的4个漏洞

1.CVE-2012-6636
[原文]The Android API before 17 does not properly restrict the WebView.addJavascriptInterface method, which allows remote attackers to execute arbitrary methods of Java objects by using the Java Reflection API within crafted JavaScript code that is loaded into the WebView component in an application targeted to API level 16 or earlier, a related issue to CVE-2013-4710.
[CNNVD]Google Android API 安全漏洞(CNNVD-201403-027)
Android API 16.0及之前的版本中存在安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法。远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法。

2.CVE-2013-4710
[原文]Android 3.0 through 4.1.x on Disney Mobile, eAccess, KDDI, NTT DOCOMO, SoftBank, and other devices does not properly implement the WebView class, which allows remote attackers to execute arbitrary methods of Java objects or cause a denial of service (reboot) via a crafted web page, as demonstrated by use of the WebView.addJavascriptInterface method, a related issue to CVE-2012-6636.
[CNNVD]Android 安全漏洞(CNNVD-201403-029)
Disney Mobile、eAccess、KDDI、NTT DOCOMO、SoftBank设备上的Android 3.0至4.1.x版本中存在安全漏洞,该漏洞源于程序没有正确实现WebView类。远程攻击者可借助特制的网页利用该漏洞执行任意Java对象的方法或造成拒绝服务(重启)

3.CVE-2014-1939
[原文]java/android/webkit/BrowserFrame.java in Android before 4.4 uses the addJavascriptInterface API in conjunction with creating an object of the SearchBoxImpl class, which allows attackers to execute arbitrary Java code by leveraging access to the searchBoxJavaBridge_ interface at certain Android API levels.
[CNNVD]Google Android 代码注入漏洞(CNNVD-201403-037)
Google Android 4.3.1及之前的版本中java/android/webkit/BrowserFrame.java文件中存在安全漏洞,该漏洞源于程序使用addJavascriptInterface API并创建SearchBoxImpl类的对象。攻击者可通过访问searchBoxJavaBridge_接口利用该漏洞执行任意Java代码。

4.CVE-2014-7224
[原文]* RESERVED * This candidate has been reserved by an organization or individual that will use it when announcing a new security problem. When the candidate has been publicized, the details for this candidate will be provided.
[CNNVD]Google Android API WebView组件远程代码执行漏洞(CNNVD-201410-1225)
Google Android中存在远程代码执行漏洞。攻击者可利用该漏洞在受影响应用程序上下文中执行任意代码,控制应用程序或底层设备。WebView 内置导出“accessibility”和“accessibilityTraversa”l 两个JavaObject 接口,可被利用实现远程任意代码执行。

二 漏洞场景复现

在webView 下有一个非常特殊的接口函数addJavascriptInterface。能实现本地java和js的交互。利用addJavascriptInterface这个接口函数可实现反射穿透webkit控制android 本机。通过JavaScript,可以访问当前设备的SD卡上面的任何东西,甚至是联系人信息,短信等。
JS中可以遍历window对象,找到存在“getClass”方法的对象的对象,然后再通过反射的机制,得到Runtime对象,然后调用静态方法来执行一些命令,比如访问文件的命令.再从执行命令后返回的输入流中得到字符串,就可以得到文件名的信息了。

   function execute(cmdArgs)
   {
    for (var obj in window) {
        console.log(obj);
        if ("getClass" in window[obj]) {
            alert(obj);
            return window[obj].getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);
         }
     }
   } 

漏洞在Android 4.2以下系统会复现。我在 小米1s(系统4.1.2) 和 oppoR811(系统4.0.4)上有复现。
漏洞源码下载 http://download.csdn.net/detail/zhangqilugrubby/9652047
这里写图片描述
图1 展示读取手机SD数据

这里写图片描述
图2 webview 密码明文存储漏洞

     webView.setSavePassword(true);                           

Android系统 默认开启密码保存功能。在用户输入密码时会弹出提示框如图2所示,当我们选择“记住“,密码会被直接保存到/data/data/com.package.name/databases/webview.db(没有加密)

我再来看一下另外一个漏洞 WebView File域同源策略绕过漏洞
2013年10月份,外部爆出FireFox Android版存在file域同源策略绕过漏洞,可造成cookie等敏感信息泄露,黑客可利用该漏洞获取FireFox的所有文件。低版本的Android系统WebView组件也存在同样的漏洞,应用程序一旦使用WebView并支持File域,就会受到该漏洞的攻击。该漏洞源于:JavaScript的延时执行能够绕过file协议的同源检查,并能够访问受害应用的所有私有文件,即通过WebView对Javascript的延时执行和将当前Html文件删除掉并软连接指向其他文件就可以读取到被符号链接所指的文件,然后通过JavaScript再次读取HTML文件,即可获取到被符号链接所指的文件。大多数使用WebView的应用都会受到该漏洞的影响,恶意应用通过该漏洞,可在无特殊权限下盗取应用的任意私有文件,尤其是浏览器,可通过利用该漏洞,获取到浏览器所保存的密码、Cookie、收藏夹以及历史记录等敏感信息,从而造成敏感信息泄露;
这里写图片描述
图3 File域同源策略绕过漏洞 查看应用私有文件“databases/webview.db”

在 Android 4.2(JELLY_BEAN)之前版本默认

setting.setAllowFileAccessFromFileURLs(true);
setting.setAllowUniversalAccessFromFileURLs(true);

通过 file 域 url 中的Javascript 读取应用和手机的所有私有文件.

在Android 系统默认可以使用file域

setting.setAllowFileAccess(true);

通过WebView对Javascript的延时执行和将当前Html文件删除掉并软连接指向其他文件就可以读取到被符号链接所指的文件,然后通过JavaScript再次读取HTML文件,即可获取到被符号链接所指的文件。

三 解决漏洞

1.解决 CVE-2014-1939 漏洞

Android 4.4 之前的版本 webkit 中内置了”searchBoxJavaBridge_”接口。攻击者可通过访问searchBoxJavaBridge_接口利用该漏洞执行任意Java代码。
解决方案:

webView.removeJavascriptInterface("searchBoxjavaBridge_");//解决 CVE-2014-1939 漏洞         

2.解决 CVE-2014-7224 漏洞

Android 4.4 之前的版本 WebView 内置导 出“accessibility”“accessibilityTraversal”
两个JavaObject 接口,可被利用实现远程任意代码执行。
解决方案:

    webView.removeJavascriptInterface("accessibility");//解决  CVE-2014-7224漏洞
    webView.removeJavascriptInterface("accessibilityTraversal");//解决  CVE-2014-7224漏洞

3.解决 WebView File域同源策略绕过漏洞

应用程序一旦使用WebView并支持File域,就会受到该漏洞的攻击。该漏洞源于:JavaScript的延时执行能够绕过file协议的同源检查,并能够访问受害应用的所有私有文件。
解决方案:

    setting.setAllowFileAccess(false);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        setting.setAllowFileAccessFromFileURLs(false);
        setting.setAllowUniversalAccessFromFileURLs(false);
    }

4.解决 WebView 密码存储漏洞
Android 系统 WebView 默认开启密码保存功能 mWebView.setSavePassword(true)
密码没有加密被保存到/data/data/com.package.name/databases/webview.db。
解决方案:关闭密码保存提醒功能,不保存密码。

setting.setSavePassword(false);//关闭密码保存提醒功能

5.解决CVE-2012-6636漏洞
远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法。
解决方案:
Google 在 4.2 版本之后,规定允许被调用的函数必须以@JavascriptInterface 进行注解.
低于4.2版本,我们不能再调用addJavascriptInterface方法。我们通过 JS中的prompt与Android应用进行通信。Android对应的prompt数据接收。

    public final boolean onJsPrompt(WebView view, String url, String message,
            String defaultValue, JsPromptResult result) {             
        return super.onJsPrompt(view, url, message, defaultValue, result);
    }

WebView安全漏洞解决源码下载: http://download.csdn.net/detail/zhangqilugrubby/9652595

【扩展阅读】

  1. http://blog.csdn.net/leehong2005/article/details/11808557
  2. http://www.52pojie.cn/thread-322022-1-1.html
  3. http://www.2cto.com/Article/201503/382569.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值