您的位置:首页 > 移动开发 > Android开发

Android静态安全检测 -> WebView组件远程代码执行漏洞检测

2016-06-21 17:50 1176 查看

WebView组件远程代码执行漏洞检测 - addJavascriptInterface方法

一、API


1. 继承关系


【1】java.lang.Object

【2】android.view.View

【3】android.view.ViewGroup

【4】android.widget.AbsoluteLayout

【5】android.webkit.WebView


2. 主要方法


【1】addJavascriptInterface(Object obj, String interfaceName)

  网页中的Javascript代码可以利用接口定义的名字,来调用应用中的Java代码


【2】getSettings( )

  返回一个WebSettings对象


【3】其他方法

  参考链接:http://www.apihome.cn/api/android/WebView.html

二、触发条件


1. 使用addJavascriptInterface方法注册可供JavaScript调用的Java对象


【1】对应到smali语句中的特征:Landroid/webkit/WebView;->addJavascriptInterface(


2. Android系统版本低于4.2


【1】对应到smali语句中的特征:

  Landroid/os/Build$VERSION;->SDK_INT 获取当前系统的Android版本号

  Android版本号大于等于17(0x11)

三、漏洞原理


【1】WebView组件中的addJavascriptInterface方法用于实现本地Java和JavaScript的交互,但是该函数并没有对方法调用进行限制,导致攻击者可以调用任何JAVA类,最终导致JavaScript代码对设备进行任意攻击


【2】详细的原理&POC


https://jaq.alibaba.com/community/art/show?spm=a313e.7975615.40002100.2.drjYfR&articleid=48


https://jaq.alibaba.com/gc/devcenter.htm?spm=a313e.7975615.40002100.3.is2RFv&helpid=68

四、修复建议


【1】建议不使用addJavascriptInterface接口,对于Android API Level为17或者以上的Android系统,Google规定允许被调用的函数,必须在Java的远程方法上面声明一个@JavascriptInterface注解


【2】在使用js2java的bridge时候,需要对每个传入的参数进行验证,避免恶意代码的攻击

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息