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时候,需要对每个传入的参数进行验证,避免恶意代码的攻击