2016-08-24

appscan

 

0x01 背景

WebView是Android系统提供能显示网页的系统控件,它是一个特殊的View,同时它也是一个ViewGroup可以有很多其他子View。在Android 4.4以下(不包含4.4)系统WebView底层实现是采用WebKit(http://www.webkit.org/)内核,出于安全和性能的考虑,在Android 4.4及其以上Google 采用了chromium(http://www.chromium.org/)作为系统WebView的底层内核支持。

 

在这一变化中Android 提供的WebView相关API并没有发生大变化,在4.4上也兼容低版本的API并且引进了少部分API,在目前最新Android 系统版本5.0上基于chromium 37, Webkit JavaScript引起采用WebCore Javascript, 在Android 4.4上换成了V8能直接提升JavaScript性能,但是由于Android系统使用的webview组件远远落后于chromium官方版本,导致android系统默认的webview组件存在了大量Google chrome遗留的历史安全问题,比如各种形式的UXSS以及远程代码执行漏洞。

 

Google官方为了解决这样的问题,在Android 5.0 及其以后,Webview组件已经不再是内置不可更新的系统组件,可以直接通过Google play store下载Android System Webview安装包的形式进行更新,能在不更新Android系统的情况下,直接更新WebView内核。

 

Chromium编译包含了webview组件,如下图:

 

 

 

Chrome官方会不定期发布安全公告以及版本的安全更新,如下图:

 

我们随机选取了一部三星note 4手机升级到官方最新Android 5.1.1版本情况下,可以发现默认系统Android System Webview大版本是43,远远落后于官方最新版本。

0x02 Mobile Pwn2own 2015的 chrome远程代码执行漏洞

360手机卫士安全研究员龚广2015年Pwn2Own比赛使用的cve-2015-6764漏洞攻克了N6手机,这个漏洞是V8引擎的json序列化相关函数实现没有对数组类型进行安全的二次检查,造成了内存越界访问,龚广发表的exploit对该漏洞进行了完美的利用,可以直接通过网页javascript在内存中运行任意的so文件。

 

我们验证了一下cve-2015-6764漏洞,可以成功攻击一些使用了低版本chromium  webview组件的app,运行shellcode绑定端口。测试视频如下:

 0x03 国内自有内核手机浏览器漏洞

目前国内的主流浏览器APP大多数都没有使用系统的webview组件,而是使用了定制的chromium webview组件,俗称自有内核浏览器,比如QQ浏览器、UC浏览器、搜狗浏览器、百度浏览器、360浏览器。以及大规模使用了定制浏览器内核服务的APP,如微信等海量的主流APP使用了腾讯代号为X5的浏览服务。

使用了过低版本的chromium定制内核的APP会存在大量未知的UXSS漏洞

在UXSS方面,随机抽取几个自有内核手机浏览器测试发现会有大量的uxss漏洞尚未修复,如下图所示:

使用了过低版本的chromium定制内核的APP会存在未知的远程代码执行漏洞,如近日 “BadKernel”漏洞

近日,360手机卫士阿尔法团队再次发现Chrome V8引擎“BadKernel”漏洞。该漏洞存在于V8引擎的历史版本中,远程攻击者可利用该漏洞对使用受影响引擎的产品进行远程攻击。

 

通过此漏洞攻击者可实现微信远程代码执行,获取微信的完全控制权,危及用户朋友圈、好友信息、聊天记录甚至是微信钱包,可使上亿微信用户受到影响,危害巨大。由于腾讯浏览服务提供的X5 SDK中的X5 内核集成了Chrome V8引擎,该引擎受上述漏洞影响。根据腾讯浏览服务介绍,使用X5 SDK的微信、手机QQ、QQ空间、京东、58同城、搜狐视频、新浪新闻等Android手机APP均可能受该漏洞影响。利用该漏洞在微信 Android APP上实现反弹shell的视频如下:

http://weibo.com/p/2304445bee6e775e81ad8b0486eaa519ea223b

 

该问题影响的版本是使用V8引擎3.20至4.2版本的厂商。影响Android 4.4.4至5.1版本系统,以及使用相关组件和定制组件的APP。

 

Android 5.0受影响的V8代码位置:

https://android.googlesource.com/platform/external/chromium_org/v8/+/lollipop-cts-release/src/object-observe.js#318

https://android.googlesource.com/platform/external/chromium_org/v8/+/lollipop-cts-release/src/messages.js#75

漏洞代码分别为:

throw MakeTypeError(“observe_accept_invalid”);
observe_invalid_accept: [“Object.observe accept must be an array of strings.”]

 

在chromium浏览器v8内核4.4修复版本为:

https://chromium.googlesource.com/v8/v8.git/+/4.4.1/src/object-observe.js#274

https://chromium.googlesource.com/v8/v8.git/+/4.4.1/src/messages.js#87

修复后的代码分别为:

throw MakeTypeError(“observe_invalid_accept”);
observe_invalid_accept: [“Third argument to Object.observe must be an array of strings.”],

 

漏洞检测代码:

<script>

var kMessages;

Object.prototype.__defineGetter__(“observe_accept_invalid”,function()   {kMessages=this});

try{Object.observe({},function(){},1)}catch(e){}

delete Object.prototype[“observe_accept_invalid”];

alert(kMessages);

</script>

浏览器如果访问如下网页,若能取到kMessages对象,弹出object则存在漏洞,若弹出undefined则不存在漏洞。

可在微信任意聊天对话框中输入“//gettbs”(不含引号),如果tbsCoreVersion大于36555则说明该漏洞已经修复。

如受漏洞影响,请及时关注厂商发布的补丁。

在漏洞未修复前,建议用户不要点击不可信链接。

 

 

0x04 行业影响情况

通过对360显危镜数据中抽样调查,发现使用定制Chromium 自有内核的APP高达430款,其中不乏用户量过亿的主流APP,安全风险主要分布行业如下:

 

请使用定制Chromium自有内核的厂商注意排查和修复安全漏洞。使用了相关浏览服务的厂商关注官方的安全升级,避免产品出现安全隐患。

 

0x05 参考链接

  1. http://www.cnnvd.org.cn/vulnerability/show/cv_id/2016080414
  2. https://github.com/secmob/cansecwest2016
  3. http://www.androidcentral.com/android-webview-security
  4. https://developer.chrome.com/multidevice/webview/overview
  5. http://x5.tencent.com/guide?id=4000