2016-08-24 14:02:56
来源:显危镜 作者:360 Vulpecker Team
阅读:519次
点赞(0)
收藏
分享到:
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
漏洞代码分别为:
throwMakeTypeError(“observe_accept_invalid”); observe_invalid_accept:[“Object.observeacceptmustbeanarrayofstrings.”]在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
修复后的代码分别为:
throwMakeTypeError(“observe_invalid_accept”); observe_invalid_accept:[“ThirdargumenttoObject.observemustbeanarrayofstrings.”],漏洞检测代码:
<script> varkMessages; Object.prototype.__defineGetter__(“observe_accept_invalid”,function(){kMessages=this}); try{Object.observe({},function(){},1)}catch(e){} deleteObject.prototype[“observe_accept_invalid”]; alert(kMessages); </script>可在微信任意聊天对话框中输入“//gettbs”(不含引号),如果tbsCoreVersion大于36555则说明该漏洞已经修复。浏览器如果访问如下网页,若能取到kMessages对象,弹出object则存在漏洞,若弹出undefined则不存在漏洞。
如受漏洞影响,请及时关注厂商发布的补丁。
在漏洞未修复前,建议用户不要点击不可信链接。
0x04行业影响情况
通过对360显危镜数据中抽样调查,发现使用定制Chromium 自有内核的APP高达430款,其中不乏用户量过亿的主流APP,安全风险主要分布行业如下:
请使用定制Chromium自有内核的厂商注意排查和修复安全漏洞。使用了相关浏览服务的厂商关注官方的安全升级,避免产品出现安全隐患。
0x05参考链接
http://www.cnnvd.org.cn/vulnerability/show/cv_id/2016080414
https://github.com/secmob/cansecwest2016
http://www.androidcentral.com/android-webview-security
https://developer.chrome.com/multidevice/webview/overview
http://x5.tencent.com/guide?id=4000
本文转载自 显危镜
原文链接:http://appscan.360.cn/blog/?p=76