背景

Android API level 16以及之前的版本存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用WebView.addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法,简单的说就是通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接操作本地的JAVA接口。该漏洞最早公布于CVE-2012-6636【1】,其描述了WebView 中 addJavascriptInterface API导致的远程代码执行安全漏洞。

该漏洞公布的近期,多款Android流行应用曾被曝出高危挂马漏洞:点击消息或朋友社区圈中的一条网址时,用户手机然后就会自动执行被挂马的代码指令,从而导致被安装恶意扣费软件、向好友发送欺诈短信、通讯录和短信被窃取以及被远程控制等严重后果。在乌云漏洞平台上,包括Android版的微信、QQ、腾讯微博、QQ浏览器、快播、百度浏览器、金山浏览器等大批TOP应用均被曝光同类型的漏洞。

论文Attacks on WebView in the Android System【2】中指出可以利用所导出的读写文件接口来进行文件的读写操作,攻击者可以通过中间人攻击篡改Webview所显示的页面来达到对手机文件系统的控制。

WebView 远程代码执行影响范围

Android API level 小于17 (即Android 4.2之前的系统版本)

WebView 远程代码执行漏洞详情

1)WebView 远程代码执行漏洞位置:

WebView.addJavascriptInterface(Object obj, String interfaceName)

2)WebView 远程代码执行漏洞触发前提条件:

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

使用WebView加载外部网页或者本地网页;

Android系统版本低于4.2;

3)WebView 远程代码执行漏洞原理:

Android系统通过WebView.addJavascriptInterface方法注册可供JavaScript调用的Java对象,以用于增强JavaScript的功能。但是系统并没有对注册Java类的方法调用的限制。导致攻击者可以利用反射机制调用未注册的其它任何Java类,最终导致JavaScript能力的无限增强。攻击者利用该漏洞可以根据客户端能力为所欲为。

webview的使用方式

//方式一:加载一个网页
webView.loadUrl("<http://www.baidu.com>");

//方式二:加载应用资源文件内的网页
webView.loadUrl("file:///data/local/tmp/xx.html");

//方式三:加载一段代码
webView.loadData(String data,String mimeType, String encoding);