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. 受影响进程列表