Android WebView 安全漏洞解决方案

来源:互联网 发布:java 余弦相似度算法 编辑:程序博客网 时间:2024/05/16 17:38

最近发现公司的应用的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 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 无法连线到服务器1~1怎么办? 数控车床车角度不亮怎么办 超市存包柜的票不见了怎么办 交货期来不及导致船期延误怎么办 跑1000米中途累怎么办 手指被机器压烂怎么办 机械手不能回归原点该怎么办 前缘送纸纸板翘怎么办 三菱AL 1R.2报警怎么办 工作好但领导不好伺候怎么办 孕妇憋尿憋的小腹疼怎么办 怀孕憋尿憋的小腹疼怎么办 半夜憋尿憋的小腹疼怎么办 新生儿大便次数较多怎么办 母猎生下三天没有奶怎么办 孩孑大便干不爱喝水怎么办 发那科1050报警怎么办 plc模块bf亮了怎么办 plc模块df亮了怎么办 西门子触摸屏进不了主画面怎么办 pos机显示白屏怎么办 洗衣机的门坏了怎么办 西门子洗衣机门坏了怎么办 拆线线断在肉里怎么办 总线绝对值编码器方向反了怎么办 台达伺服报警009怎么办 台达plc禁止上传怎么办? 潜水泵电机启动绕组断线了怎么办? 永磁电机磁没了怎么办 热水器热水管坏了怎么办 松下伺服驱动器坏了怎么办 步进电机功率小了怎么办 电三轮电机坏了怎么办 电动车钢圈撞变形了怎么办 电动车后轮钢圈变形了怎么办 软油管接头渗油怎么办 一只单眼皮一只双眼皮怎么办 儿童轻轻泥干了怎么办 5d轻轻泥干了怎么办 手机炉石一直闪退怎么办 鸟之羽任务失败怎么办