2016-09-07

appscan

本月一共有63个安全漏洞,其中Critical 8个,High 35个,Moderate 19个,未定义风险等级1个。其中属于Aosp部分的有33个,驱动和kernel的有30个。

 

下面是与8月份的漏洞数量对比图:

 

 

 

漏洞分布情况对比图:

 

 

漏洞详细情况分析整理

1.Aosp高风险安全漏洞

Aosp的漏洞主要集中在mediaserver模块中,这也是最近安全研究漏洞挖掘的热点模块。下图是这个月aosp漏洞的整理。

 

A)以下高风险安全漏洞在mediaserver组件中,可以被任意app触发。

 

CVE-2016-3862、CVE-2016-2429是两个Critical级的远程代码执行漏洞。分别影响framework.jar、libstagefright_soft_flacenc.so两个文件。

 

Mediaserver远程代码执行漏洞可能允许攻击者使用专门制作的媒体文件来攻击手机,在解析媒体文件时会发生内存崩溃。这个漏洞由于可能在Mediaserver进程中发生远程代码执行,所有被评为Critical。Mediaserver进程有权限访问音频和视频流,第三方应用程序不能。

 

CVE-2016-3862是在解析JPG文件时一个恶意构造的exif数据能够导致堆栈被破坏,并导致远程代码执行。

 

CVE-2016-2429是对2016.4月的安全补丁的一个更新,在解析一个畸形文件时会产生一个空指针引用。

 

CVE-2016-3863是一个High级别的远程代码执行漏洞影响libstagefright.so文件。

 

CVE-2016-3863是一个在MediaMuxer的远程代码执行漏洞,攻击者可以通过一个恶意构造的文件在一个低权限进程来达到远程代码执行。这个漏洞被评为High是因为必须通过一个已安装的apk来进行攻击。

 

CVE-2016-3870、CVE-2016-3871、CVE-2016-3872、CVE-2016-3823是四个High级别的提权漏洞。分别影响libstagefright_omx.so、libstagefright_soft_mp3dec.so、libOmxVenc.so、libstagefright_soft_vpxdec.so四个so文件。

 

权限提升漏洞可以被本地的恶意应用用来执行恶意代码进行提权,mediaserver的漏洞,可以被用来提权到system。

 

CVE-2016-3870是在解析从解码器取得的数据时会导致堆溢出。

 

CVE-2016-3871是在SoftMP3::onQueueFilled()方法里调用memset时会传入一个很大的值,导致堆溢出。补丁是加了一个边界检查。

 

CVE-2016-3872 是SoftVPX::outputBuffers()里调用了SoftVideoDecoderOMXComponent::copyYV12FrameToOutputBuffer()可以复制解码数据的范围超过输出缓冲区,这可能导致堆溢出。补丁加了检查,以防止堆溢出。

 

CVE-2016-3823是在libOmxVenc.so里方法omx_video::empty_this_buffer_proxy方法里会memcpy数据到0xdeadbeef,在64位设备上可以通过一个精心构造的binder触发。补丁是加了设置指针为null和在访问之前检查指针。

 

B)以下高风险安全漏洞在LibUtils组件中。

 

CVE-2016-3861是Critical级的远程代码执行漏洞,影响libmediaplayerservice.so、libutils.so。

 

CVE-2016-3861是在utf16_to_utf8和utf16_to_utf8_length的不一致导致堆溢出。补丁修改了正确的长度计算和边界检查。

 

C)以下高风险漏洞在libjhead组件中,可以被任意app触发。

 

CVE-2016-3822是High级的远程代码执行漏洞,影响libjhead.so。libjhead.so的远程代码执行漏洞可以被攻击者用一个特殊构造的文件在当前环境下执行任意代码。

 

CVE-2016-3822是由于offsetval传递给ProcessExifDir会导致一个越界写。补丁是增加了offsetval数溢出检查和边界写检查。

 

D)其他风险级别较低的受影响文件

 

libstagefright_soft_avcdec.so、libsonivox.so、libui.so、telephony-common.jar、service.jar、debuggerd、SystemUI.apk、SettingsProvider.apk、Settings.apk、telephony-common.jar、adbd、Email.apk、framework.jar、TeleService.apk

 

2.kernel高风险安全漏洞

 

A)Critical级别

 

 

CVE-2014-9529、CVE-2016-4470、CVE-2013-7446、CVE-2016-3134、CVE-2016-3951是内核中Critical级别的本地提权漏洞。

 

CVE-2014-9529是由于竞争条件引起的,在3.4、3.10、3.18这些版本的内核的安全子系统中,允许本地应用通过keyctl命令来在内核中执行代码,这个功能的代码中在调用key_gc_unused_keys函数回收一个key时内存释放顺序有问题,当其他进/线程同样对此key进行类似操作时就可能导致内存破环或者系统崩溃,合理布置内存可用来进行本地权限提升。

 

CVE-2016-4470是内核的安全子系统中的use-after-free漏洞。在内核安全子系统模块的security/keys/key.c中的key_reject_and_link函数中可能存在key查找时失败情况,这种情况下再尝试去释放之后还需要使用的内存,就会导致UAF漏洞。补丁代码中添加了额外的检查工作,来避免潜在的UAF风险。

 

CVE-2013-7446 是kernel的networking子系统中的use-after-free漏洞。这个漏洞能够导致,在linux内核4.4.3之前的本地用户刻意巧妙的通过调用epoll_ctl来绕过AF_UNIX socket权限限制来达到本地提权。补丁将unix_dgram_poll函数中的第二次调用sock_poll_wait移除来来避免潜在的UAF风险。

 

CVE-2016-3134 是网络防火墙子系统中的整型越界漏洞。在防火墙子系统的mark_source_chains函数中,因为对用户提供的ipt_entry结构体中的next_offset成员没有做全面的越界检查从而可能被本地用户可以通过IPT_SO_SET_REPLACE setsockopt系统调用来传入非法参数进行权限提升或者导致内存破坏使得拒绝服务。补丁当然是添加对用户空间传入的数据做全面的边界检查。

 

CVE-2016-3951 是USB驱动中的double free漏洞。因为USB是支持热插拔的,当我们插入一个USB设备后执行cdc_ncm_bind进行bind时会调用usbnet_link_change,usbnet_link_change中会进而调用shedule_work。但是在bind失败后我们应该避免后面的usbnet_link_change调用,否则的话就会导致在结束shedule work时导致double free漏洞。恶意攻击者可以通过插入无效拥有descriptor的USB device来触发bind失败情况,进而导致double free。补定将cdc_ncm_bind中的usbnet_link_change调用删除,进行延期调用来避免此漏洞。被定义为Critical是因为一旦漏洞被触发可能导致设备持久性crash,只有通过刷机才能恢复。

 

B)High级别

 

 

CVE-2016-2053、CVE-2016-3864、CVE-2016-3858、CVE-2014-4805、CVE-2016-1583是内核中High级的提权漏洞。

 

CVE-2016-2053 是内核ASN.1(Abstract Syntax Notation One) 解码器中的内存破坏漏洞。在asn1_ber_decoder函数中,攻击者可以通过一个缺少public key的ASN1 BER 文件来导致public_key_verify_signatureh函数运行出错,进而破坏内存。

 

CVE-2016-3864 是内核中的高通音频接口层的buffer溢出漏洞。补丁添加了字符串参数长度的检查。

 

CVE-2016-3858 是内核中高通子系统驱动中的数组越界漏洞。在firmware_name_store()函数中,如果buf变量中包含的字符串超过subsys->desc->fw_name的大小就会导致数组越界,本地恶意应用可以通过有一定权限的进程利用此漏洞来进一步提升权限。

 

CVE-2014-4805 是内核networking驱动中的use-after-free漏洞。在内核的networking驱动中,由于一些像ppp_async和ppp_synctty等类型的channels允许在另一个namespace中拥有他们的userspace controller,因此这些channels不能依靠namespace来排除被移除的netns。因此通过移除一个和ppp_async和ppp_synctty类型相关的network namespace时可能存在UAF风险,可被本地用户用来提权。

 

CVE-2016-1583 是内核eCryptfs(Enterprise Cryptographic Filesystem,企业加密文件系统)中的栈内存破坏漏洞。本地攻击者可以通过精心构造相关mmap调用向量来导致递归的缺页异常处理,从而使造成栈内存破坏或者系统拒绝服务。

 

3. 高通和MTK等其他第三方厂商漏洞

 

A)高通驱动中存在权限提升漏洞

 

 

CVE-2016-3866、CVE-2016-3867、CVE-2016-3868、CVE-2016-3869、CVE-2016-1583、CVE-2016-3874、CVE-2014-4655、CVE-2016-2471是高通组件驱动中High级别漏洞。

 

CVE-2016-3866是高通声卡驱动中的一个缓冲区溢出漏洞。当编解码器在对通过msm_compr_ioctl_shared函数接受到的参数进行解析时,没有对数据包长度进行检查导致存在缓冲区越界风险。补丁中添加了对数据包长度进行预置操作,来避免潜在的缓冲区溢出漏洞发生。

 

CVE-2016-3867 是IPA(IP Packet Accelerator)这个可编程硬件协处理器的驱动中的一个内存破坏漏洞。从补丁代码来看,添加了一些对用户空间传递进来的参数的检查来防止对特殊资源的竞争情况。在未修补的设备中,本地攻击者可以利用此漏洞提升权限。

 

CVE-2016-3868 是高通电源驱动中的一个栈溢出漏洞。因为split_ptable_arg函数中没有传进来的参数进行边界检查,从而存在潜在栈溢出漏洞风险。补丁中添加了额外的参数检查代码,来设定参数的最大值避免栈溢出风险。

 

CVE-2016-3869  是博通Wi-Fi驱动中的内存破坏漏洞,由于对wls_parse_batching_cmd函数中的batch_params.nchan参数没有做边界检查导致可能造成内存破坏风险。

 

CVE-2016-3874是高通Wi-Fi驱动中的内存破坏漏洞。由于__iw_set_var_ints_getnone函数中没有对参数apps_args[1]的边界做检查,当这个参数为负数的时候可能触发内核内存破坏漏洞。补丁增加了额外的边界检查操作。

 

CVE-2014-4655是内核声卡子系统(只影响高通设备)的ALSA(Advanced Linux Sound Architecture)中的漏洞。这个漏洞其实包含两处风险:一方面是由于代码未对ioctl的调用是否是通过用户触发的以及这和control是否是在一个将被移除的进程中触发的进行判断,从而存在use-after-free风险;另一方面是control被replace的时候未对user_ctl_count的值进行检查,因此在用户控件通过足够多次SNDRV_CTL_IOCTL_ELEM_REPLACE ioctl调用可以导致user_ctl_count溢出。补丁对这两处问题进行了合理的修补。

 

CVE-2016-2471是高通Wi-Fi驱动中的内存破坏漏洞。在对接受到的essid长度没有做完整长度检查的情况下就直接进行buffer拷贝,导致的内存破坏。有别本地攻击者利用提权的风险。补丁添加完整的长度检查。

 

B) MTK驱动中的漏洞

 

本月无MTK驱动中的漏洞。

 

C) 其他第三方厂商中的漏洞

 

 

CVE-2016-3859是高通摄像头驱动中的内核空间任意写漏洞。由于VIDIOC_MSM_VFE_REG_CFG的ioctl请求,进入 msm_isp_send_hw_cmd()函数处理没有对用户输入做很好的校验,导致内核空间任意写漏洞。具有一定权限的本地恶意应用可以利用此漏洞提升权限。

 

CVE-2016-2446 是NVIDIA video驱动中的数组越界漏洞。补丁对原始代码增加了更细致的边界检查。

 

CVE-2016-3873 是NVIDIA kernel中的内核堆空间任意写漏洞。由于debugfs文件入口没有对来自用户空间的输入做很好的校验导致内核空间任意写漏洞。具有一定权限的本地恶意应用可以利用此漏洞提升权限。

 

4. 受影响进程列表

 

 

 

 

 

 

2016-09-01

appscan

0x1 libupnp简介

libupnp 是一个便携、可移植的 UPnP 的 C 语言开发包,UPnP是一种网络协议,允许设备自动搜寻和设定。Libupnp最新版本是1.6.20,编译时间为2016年7月7日,上一个版本为1.6.19,编译时间为2013年11月15日,编译间隔很长,有漏洞的版本为1.6.17及以下版本,编译时间为2012年12月以前。

0x2 漏洞原理

在1.6.17以及以下版本中存在多个缓冲区溢出漏洞,漏洞函数出现在upnp/src/ssdp/ssdp_server.c的unique_service_name中:

对于输入参数cmd未做安全检测,导致strncpy时发生缓冲区溢出。

由于漏洞类型比较老,攻击难度不大,使用一个构造的UDP数据包就能触发漏洞。早在漏洞刚出现时,Rapid7就推出了扫描工具ScanNow,其构造的数据包为:

测试ssdp包
M-SEARCH * HTTP/1.1
HOST:239.255.255.250:1900
MAN:"ssdp:discover"
MX:3
ST:uuid:rootdevice

 

通过数据包返回的结果中查看是否是有漏洞的upnp库。下面是一段python发送udp的代码:

 

发送ssdp数据包
import socket
 
SSDP_ADDR = '172.21.192.2' 
#SSDP_ADDR = '10.18.25.50' 
SSDP_PORT = 1900 
 
MS = 'M-SEARCH * HTTP/1.1\r\nHost:239.255.255.250:1900\r\nST:upnp:rootdevice\r\nMan:\"ssdp:discover\"\r\nMX:3\r\n'
__s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
__s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
local_ip = socket.gethostbyname(socket.gethostname())
__s.bind((local_ip, 50000))
__s.sendto(MS, (SSDP_ADDR, SSDP_PORT))

 

0x3 漏洞修复

判断数据大小,防止数据越界,常规的缓冲区溢出修复方法。下图为

0x4 漏洞扫描方法

360显危镜现已支持libupnp漏洞的扫描,其扫描方式为判断libupnp的版本,一般来说,libupnp在编译的时候都会将版本号编译进去,通过扫描so文件的字符串拿到版本号,如果小于1.6.18则判断为有漏洞的版本,扫描代码如下:

 

扫描代码
def detect_so_upnp(apkinfo,native_dir,logger=logger):
    r_rets = {'scan_version':scan_version,'scan_tag':scan_tag}
    ret_ = []   
    rets = detect_so_strings(apkinfo,native_dir,logger)
    if len(rets['result']) > 0:
        for r in rets['result']:
            if 'data' not in r.keys():
                continue
            rr = r['data'].split('\n')
            for __r in rr:
                if 'Portable SDK for UPnP' in __r:
                    vers = __r.split("/")
                    ver = vers[3].split(".")
                    real_ver = int(ver[2])
                                               sub_ver = int(ver[1])
                    if sub_ver<=6 and real_ver < 18:
                        r_ = {'vul_file':r['vul_file']}
                        r_.update({'vul_id':vul_id})
                        r_.update({'md5':apkinfo['md5']})
                        if r_ not in ret_:
                            ret_.append(r_)
    if len(ret_) == 0:
        r_rets.update({'risk':0,'result':[{'vul_id':vul_id,'md5':apkinfo['md5']}]})
    else:
        r_rets.update({'risk':1,'result':ret_})      
	return r_rets  

 

0x5 市场状况

直到2015年12月,QQ音乐才修复了这个漏洞,替换了有漏洞的libupnp库,当时使用的库版本为1.6.17。

 

通过对appscan大数据中的13w款app的扫描,发现受此漏洞影响的产品数量为60款。

虽然说比重几乎可以忽略不计,但是仍然要提醒开发者,开发时关注第三方库的安全状况,及时使用官方最新的安全版本库。

 

0x6 参考

  1. https://community.rapid7.com/community/infosec/blog/2013/01/29/security-flaws-in-universal-plug-and-play-unplug-dont-play
  2. https://security.tencent.com/index.php/blog/msg/99

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

 

2016-08-18

appscan

本月一共有105个安全漏洞,其中Critical 13个,High 79个,Moderate 13个,其中属于Aosp部分的有26个,驱动和kernel的有79个。

下面是与7月份的漏洞数量对比图:

 

 

漏洞分布情况对比图:

 

1、Aosp高风险安全漏洞

 

Aosp的漏洞主要集中在mediaserver模块中,这也是最近安全研究漏洞挖掘的热点模块。下图是这个月aosp漏洞的整理。

 

 

A)以下高风险安全漏洞在mediaserver组件中,可以被任意app触发。

 

CVE-2016-3819、CVE-2016-3820、CVE-2016-3821是三个Critical级的远程代码执行漏洞。分别影响libstagefright_soft_h264dec.so、libnbaio.so、libstagefright_soft_avcdec.so三个so文件。

 

Mediaserver远程代码执行漏洞可能允许攻击者使用专门制作的媒体文件来攻击手机,在解析媒体文件时会发生内存崩溃。这个漏洞由于可能在Mediaserver进程中发生远程代码执行,所有被评为Critical。Mediaserver进程有权限访问音频和视频流,第三方应用程序不能。

 

CVE-2016-3819是一个h264编码的MPEG4文件能构造一个足够大的picSizeInMbs,导致在h264bsdInitDpb内分配一块足够大的内存,导致堆溢出。

 

CVE-2016-3820是libavcodec H.264的解码器在解析MPEG4文件时会导致堆溢出。

 

CVE-2016-3821是MediaPlayer中的一个use-after-free漏洞。

 

CVE-2016-3823、CVE-2016-3824、CVE-2016-3825、CVE-2016-3826是四个High级别的提权漏洞。分别影响libOmxVenc.so、libstagefright_omx.so、libaudioflinger.so三个so文件。

 

权限提升漏洞可以被本地的恶意应用用来执行恶意代码进行提权,mediaserver的漏洞,可以被用来提权到system。

 

CVE-2016-3823是由于libOmxVenc.so中的omx_video::empty_this_buffer_proxy()会使用memcpy函数拷贝一块数据到0xdeadbeef,可以通过精心构造的数据控制0xdeadbeef来进行提权。

 

CVE-2016-3824是由于libOmxVenc.so中的omx_video::allocate_output_buffer()会分配一个固定的堆缓冲区,当OMXNodeInstance::emptyBuffer被用作一个输出缓冲区计数器,在调用CopyToOMX时会发生堆溢出。

 

CVE-2016-3825是omx_video::allocate_input_buffer()可以被通过精心构造的binder request分配一块错误大小的堆内存,导致堆溢出。

 

CVE-2016-3826是PreProcessing.cpp这个C++文件中的EFFECT_CMD_GET_PARAM会导致整形溢出,造成堆溢出。

 

B)以下高风险安全漏洞在libjhead组件中,可以被任意app触发。

 

CVE-2016-3822是High级的远程代码执行漏洞,影响libjhead.so。

libjhead.so的远程代码执行漏洞可以被攻击者用一个特殊构造的文件在当前环境下执行任意代码。

 

CVE-2016-3822是一个构造的Offsetval长度传递到libjhead中的ProcessExifDir方法后会导致越界写内存。

 

C)其他风险级别较低的受影响so文件

 

libstagefright_soft_hevcdec.so、libcrypto.so、libcamera_client.so、libstagefright.so、libsurfaceflinger.so、libwifi-service.so、bluetooth.default.so、libconscrypt_jni.so

 

2、kernel高风险安全漏洞

 

A)CVE-2015-2686、CVE-2016-3841、CVE-2016-3857是Critical级的提权漏洞。

CVE-2015-2686是在net/socket.c文件中,影响linux内核3.19.3之前版本。由于sendto和recvfrom系统调用没有验证数据范围,本地权限用户,可以利用iov_iter接口的copy_from_iter方法来进行提权。

 

CVE-2016-3841是特定的内核networking组件会导致的use-after-free漏洞。

 

CVE-2016-3857是sys_oabi_epoll_wait方法没有验证传递的参数。修复方法是直接禁用了OABI支持,删除了代码。

 

B) CVE-2015-1593、CVE-2016-3672、CVE-2016-2544、CVE-2016-2546、CVE-2014-9904、CVE-2012-6701、

 

CVE-2016-3845、CVE-2016-3843是High级的提权漏洞。

 

CVE-2015-1593是在linux内核3.19.1之前的版本,64位上栈随机特性在处理按位左移时返回值类型不正确,可以被攻击者利用绕过ASLR。

 

CVE-2016-3672是arch/x86/mm/mmap.c中的arch_pick_mmap_layout方法在随机化基地址时有错误,可以被用来绕过ASLR。

 

CVE-2016-2544是在sound/core/seq/seq_queue.c中的queue_delete方法,有一个race condition(正确性依靠于事件发生的相对时间)有use-after-free漏洞,可以被使用ioctl触发。

 

CVE-2016-2546是在sound/core/timer.c文件中(linux内核4.4.1之前),mutex类型不正确导致的use-after-free漏洞,可以被精心构造的ioctl触发。

 

CVE-2014-9904是在snd_compress_check_input方法中的整形溢出检查会被绕过。

 

CVE-2012-6701是在fs/aio.c文件中的整形溢出漏洞(在linux内核3.4.1之前),能够被本地用户触发的拒绝服务漏洞,或者其他未发现的影响。

 

CVE-2016-3845是传递到on_cmd_write方法的计数变量没有验证。

 

CVE-2016-3843是一些内核为开发者使用的子模块,在正常发行版中不应该存在。

 

3、高通和MTK的驱动漏洞

A) 高通Wi-Fi驱动中存在远程代码执行漏洞

 

高通组件提权漏洞CVE-2014-9902是一个高通Wi-Fi驱动模块中的漏洞,可以被远程攻击者利用来在内核空间中远程执行代码,可能导致整个设备被完全控制,因此被定义为critial级别。找到patch信息,很容易就能判断是个整型溢出漏洞在源代码树中找到相关文件可以看到这个漏洞相关文件最终被编译进了设备相关的驱动文件prima_wlan.ko(msm8960)或者pronto_wlan.ko(msm 8974、msm8226、msm8610)。

 

 

高通组件包含了bootloader、camera driver、character Driver、networking、sound driver 和video driver等。下面这张表格中是8月的高通组件相关的漏洞。

 

CVE-2014-9863 这是一个存在于diag driver中的漏洞。在diag drive中存在一个整型下溢问题,这可能导致内存泄露,存在别利用提权风险,因此被定为critical级别。补丁中条件语句添加了边界检查来保证正确性。

 

CVE-2014-9864和CVE-2014-9865都是Qualcomm Secure Execution Communicator driver中的漏洞,Qualcomm Secure Execution Communicator driver为用户空间和QSEE(Qualcomm Secure Execution Environment)之间的通信提供接口。补丁对IOCTL中参数类型和合法性进行了校验。

 

CVE-2014-9866 是高通的csid driver中的一个漏洞,补丁对num_cid进行了上下边界的检查,从而保证从用户空间中传递进来的num_cid在合法的1到16这个区间。

 

CVE-2014-9870 是在ARM MPCore(Multi-Processor Core)多核心架构下添加了对每个thread寄存器的保护操作来代替之前的清除操作。即在上下文切换和fork()操作的时候保存用户读写寄存器TPIDRURW的值,来避免总是必须要在copy_thread函数中来进行TPIDRURW的读操作,这样做十分不安全,可能被攻击者利用来提升权限。

 

CVE-2014-9881 是Qualcomm IRIS FM support模块中的漏洞。其中将unsigned int转换为int以及将int 转换为unsigned int存在缓冲区溢出风险。补丁对此进行了修补。默认情况下这个模块是不会被编译进内核的,如果设备搭载了高通的FM芯片组(IRIS)则可能受影响。

 

CVE-2014-9882 是Qualcomm IRIS FM support模块中的漏洞,在从用户空间传递数据到driver的时候添加driver中接收这些数据的buffer大小检查操作,否则可能导致数组越界访问问题,存在权限提升风险。CVE-2014-9885是高通8974温度检测的AD转换驱动中的漏洞在一个snprintf函数中添加了格式模板,来避免引起安全问题。

 

CVE-2014-9887 是Qualcomm Secure Execution Communicator driver中的漏洞,Qualcomm Secure Execution Communicator driver为用户空间和QSEE(Qualcomm Secure Execution Environment)之间的通信提供接口。补丁检查了qseecom_send_modfy_cmd的cmd_req_buf pointer offset的有效性,并且 对cmd buffer 的地址是否在shared bufffer的范围内进行判断。

 

CVE-2014-9888  是搭载高通芯片组设备上的DMA驱动模块中的漏洞。 通过DMA 映射的内存被标记为可执行的,这不是我们希望的,patch对此进行了修补。

 

CVE-2015-8937 是diag模块中的漏洞,Diag driver持有socket进程的task structure甚至当进程已经退出了以后。这个漏洞的补丁就是,在进程退出时清理内部的task structure结构句柄。

 

CVE-2015-8939 是msm video driver中的漏洞,补丁进行了一些边界检查操作来防止出现一些未定义行为的发生。

 

CVE-2015-8941 这个漏洞是msm camera driver 中添加了一些数组越界检查操作。

 

CVE-2015-8942 存在于msm camera driver中,在使用CPP去操作iommu上下文时必须检查stream的状态。

 

CVE-2015-8943 漏洞位于高通的video驱动中,漏洞可能引发对未mapped的buffer的unmap操作问题,因此补丁在unmap操作前添加了是否mapped的校验代码。

 

CVE-2014-9891 是Qualcomm Secure Execution Communicator driver中的漏洞,Qualcomm Secure Execution Communicator driver为用户空间和QSEE(Qualcomm Secure Execution Environment)之间的通信提供接口。ION memory是用来userspace的process之间或者内核中的模块之间进行内存共享的,也是Android上kernel的一些变化,在用户空间通过IOCTL操作时,data指向的location的合法性未进行检测,可能导致指向其他未分配的无效内存从而导致crash或者指向其它不合法内存引起不可预期的影响。

 

CVE-2014-9890 这个漏洞是I2C驱动中I2C command的长度问题,因为I2C command包含10 bytes的data和1 byte的WR command,因此为11字节,而未修补之前的定义是data[10],可能造成数组越界问题。

被攻击者合理利用可能获得权限提升。

 

B) MTK驱动中的漏洞

 

 

MTK Wi-Fi驱动中的本月被爆存在CVE-2016-3852漏洞,这是一个信息泄露漏洞。在驱动模块的priv_get_int函数中未对传递进来的prIwReqData变量进行校验,可通过传入非法值造成信息泄露问题,结合其他类型的漏洞可被用来作为权限提升的跳板,因此被定为High级别。补丁对传入参数的边界进行了校验。

 

4、受影响进程列表