其实早就知道这个漏洞,只是一直懒得去看看去研究。最近正在进行的项目刚好需要用到WebView,所以特别关注了一下。在腾讯安全应急响应中心的“Android WebView挂马漏洞检测工具” 上有注明其原理:

在安卓WebView 组件中存在 addJavascriptInterface 方法,主要用于将Java类或方法导出以供JavaScript调用。但是,JavaScript在调用导出的Java类时,可通过反射执行任意JAVA代码。典型的攻击场景:通过受影响的app发送恶意构造页面的URL,用户点击打开URL后,会执行恶意代码。比如某安卓应用使用addJavascriptInterface 方法提供以下接口:

	this.b.addJavascriptInterface(new fz(this, null), "js_class_name");
那么可构造恶意html页面,然后通过JavaScript调用该接口来执行系统命令:
	js_class_name.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);


修复方案:

1、如果无需与JS交互,请删除对addJavascriptInterface函数的调用;

2、在载入页面时对URL进行白名单判定,只有存在白名单中的域才允许导出或调用相关的Java类或方法;



未来要写几个App,也许还会利用这个漏洞,来实现一些功能(当然要有白名单限制)。