2016-10-08

本月一共有71个安全漏洞,其中Critical 6个,High 47个,Moderate 17个,Low 1个,其中属于Aosp部分的有21个,驱动和kernel的有50个。

 

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

 

 

漏洞分布情况对比图:

漏洞详细情况分析整理

 

  • Aosp高风险安全漏洞

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

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

CVE-2016-3909、CVE-2016-3910、CVE-2016-3913、CVE-2016-3920是四个High级的mediaserver漏洞。分别影响libstagefright_soft_mpeg4dec.so、libstagefright_soft_mpeg4enc.so、libsoundtriggerservice.so、libmediaplayerservice.so、libstagefright.so五个文件。

Mediaserver的权限提升漏洞能够让本地的恶意程序来提升权限执行任意代码,所以被评为High。

CVE-2016-3909是在SoftMPEG4::onQueueFilled()中,输出缓冲区可能小于被写入的引用。补丁是在写入之前检查缓冲区与被写入的引用大小。

CVE-2016-3910是calloc(1, from_user.data_size + sizeof(struct sound_trigger_phrase_sound_model)) 会引起一个整型溢出并分配一个比实际需要小的内存块,当分配的内存块小于from_user.data_size时,会发生堆溢出,补丁是增加了溢出检查。

CVE-2016-3913是一个无效的static_cast会导致越界访问。

CVE-2016-3920是一拒绝服务漏洞。

 

B)以下高风险安全漏洞在Camera service中。

CVE-2016-3815是High级的提权漏洞,影响libcamera_metadata.so。在camera_metadata.c,由于validate_camera_metadata_structure方法没有对data_count 做边界检查会导致append_camera_metadata方法发生crash。给data_count设置一个很大的值会导致堆溢出。补丁是增加了溢出检查。

CVE-2016-3816是Camera service错误的检查了camera_metadata_buffer_entry结构体的变量数。补丁是在计算metadata的大小时增加了溢出检查。

 

C)其他High级别的提权漏洞

CVE-2016-3900是High级的提权漏洞,影响serviceManager。ServiceManager判断一个Binder事务是否有权限去注册一个service。它使用getPidcon()查询SELinux context。getPidcon()由于竞争条件会导致一个错误的SELinux context被用来做权限检查。

CVE-2016-3908是由于从Android 5.*升级到Android 6.*的设备,一个遗留的hash值任然存在于手机上,会在调用checkPassword()是删除掉手机的密码或者PIN码。

CVE-2016-3911是由于android.os.Process# zygoteSendArgsAndGetResult()方法在没有读取Zygote写入的值就抛出一个异常。因此所有从zygoteSendArgsAndGetResult返回的PIDs都将右移一个字节。因此一个本地的恶意应用可以产生一个新的进程去执行shell命令在一个高权限的上下文。

CVE-2016-3912是在被附加的进程中当一个pending broadcast被派遣时,BroadcastQueue.sendPendingBroadcastsLocked API会检查ProcessRecord 的PID属性。如果一个进程曾经接收这个广播并且检查了uid,当下一个进程使用相同的pid时就不在检查,虽然使用的不同uid。

CVE-2016-3914 MmsProvider.openFile验证current_data列在数据库,然后调用ContentProvider.openFileHelper。由于竞争条件可能会导致二次读写数据库。

CVE-2016-3917是一个三种条件竞争,指纹识别、切换用户、切换键盘。触发的过程可能是由于用户尝试使用指纹认证,同时连续的点击第二个用户的头像。补丁是在验证是绑定用户id,在验证结束时确认用户id。

CVE-2016-3918 在应用获得com.android.email.permission.READ_ATTACHMENT权限后,他可以访问邮件应用的任何文件。

 

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

wifi-service.jar、services.jar、libstagefright.so、libsysutils.so、libril.so、framework.jar、debuggerd、libaudioflinger.so

 

  • kernel高风险安全漏洞

A). CVE-2016-0758和CVE-2016-7117是Critical级提权的漏洞

CVE-2016-0758 是内核ASN.1(Abstract Syntax Notation One)解码器中的整形溢出漏洞.从补丁来看,在函数asn1_find_indefinite_length当中,增加了一些额外的边界检查(check_length)来避免整数溢出漏洞.

CVE-2016-7117 是内核当中一个UAF漏洞,当调用recvmsg返回一些数据包并且命中失败的时候,将会让sock对象走向sock->sk->sk_err,这样就出现了一个潜在的UAF问题.

 

B). CVE-2015-8955, CVE-2015-8950是High级的提权漏洞

CVE-2015-8955 是内核中类型混乱的一个漏洞.由于PMU的类型没有被校验而放置到arm_pmu当中出现的问题.补丁中更新了arm64的PMU驱动并且拒绝了PMU的其他事件.

CVE-2015-8950 是内核中的一个信息泄漏漏洞.由于ION内存中初始化分配内存的时候没有把堆清零,导致了信息泄漏的问题.补丁中的代码将初始化的内存都用零填充初始来避免这个问题.

 

C). CVE-2016-6683 ,CVE-2016-6684 , CVE-2016-6685, CVE-2015-8956和CVE-2016-5696是Moderate级的漏洞

CVE-2016-6683 ,CVE-2016-6684 和 CVE-2016-6685 都是内核组件中的信息泄漏漏洞.如果系统没有设置kptr_restrict,那么格式化打印%p就会泄漏打印内核地址.补丁中的代码是将%p转换成%pK.

CVE-2015-8956 是内核中的信息泄漏漏洞.在rfcomm_sock_bind函数中,addr结构是由用户态拷贝未初始化的区域,所以可能导致信息泄漏问题.补丁中的代码将sockaddr_rc结构初始化清零来避免这个问题.

CVE-2016-5696 是内核网络中的一个拒绝服务漏洞.在linux内核4.7版本之前的tcp_input.c文件中.漏洞的根源在于RFC5961引入了challengeACK响应和TCP控制封包的速率限制.新的漏洞可让攻击者推断出互联网上任意两台主机之间是否使用了TCP连接进行通信,并且无需进行中间人攻击即可远程劫持会话.补丁增强了对ACK段的不可控性.

 

D). CVE-2016-6690是Low级的漏洞

CVE-2016-6690 是内核音频驱动中拒绝服务漏洞.codec结构的变量没有经过校验就传递到了snd_soc_read和snd_soc_write函数中,因此造成了拒绝服务的攻击.补丁中的代码对这些函数指针都进行了各种校验.

  • 高通和MTK的驱动漏洞

A).高通驱动漏洞


CVE-2015-8951 是高通音频驱动中的UAF漏洞.当q6lsm_open函数调用失败时,如果LSM客户端数据被释放后仍可以被访问就会导致UAF问题.增加的补丁是,只能在msm_lsm_close函数中释放客户端数据,一次来防止释放后被重用.CVE-2016-3934 是高通照相机驱动中的栈溢出漏洞.在msm_camera_cci_i2c_write_seq函数中,栈的大小没有经过校验,所以会导致溢出问题.补丁当中把数组改成了动态分配,以此来避免溢出.

CVE-2016-3901和CVE-2016-3935 都是高通加密引擎驱动中的整数溢出漏洞.ULONG_MAX不能被用于检测uinit32_t的大小,所以在补丁中使用U32_MAX类型来替换ULONG_MAX.

CVE-2016-5340 是高通内存共享驱动中由于没有正确校验ashmem区域对应的名称和路径而导致的漏洞,从补丁上来看,是验证file->f_op指针对应的存储记录,而不是仅仅比较名称和路径.

CVE-2016-3938 是高通视频驱动中的内存破坏漏洞.由用户态拷贝的z_order,没有经过校验就作为left_lm_zo_cnt和right_lm_zo_cnt的索引,会导致内存破坏问题的出现.补丁中加入了判断.

CVE-2016-3939 是高通视频驱动中的异常指针访问漏洞.在函数mdss_misr_get_map中,如果block_id是无效的,当调用ioctl的时候就会访问异常.补丁在mdss_mdp_misr_table中校验了block_id.

CVE-2016-3905 是高通wifi驱动中的内存破坏漏洞.在hdd_parse_sendactionframe_v2函数中的command变量没有被正确校验而导致的内存破坏问题.补丁中增加了边界的校验来避免这个问题.

CVE-2016-6675 是高通wifi驱动中的缓冲区溢出漏洞.在__iw_get_softap_linkspeed函数中,一个空终结符作为不正确的索引而导致了缓冲区溢出.补丁中空终结符设置到了MAC_ADDRESS_STR_LEN-1的位置来避免这个问题.

CVE-2016-6676 是高通wifi驱动中的缓冲区溢出漏洞.在处理GET_CFG的IOCTL过程中,如果接受一个全局变量没有经过校验作为数组的参数,就会导致缓冲区溢出问题.补丁的代码修改了边界的校验来修复这个问题.

CVE-2016-5342 是高通wifi驱动中的缓冲区溢出漏洞.当wcnss_wlan_write函数调用了超过初始分配的数据,就会造成缓冲区溢出.补丁当中加强了边界检查,如果发生了溢出就会返回失败.

CVE-2015-0572 是高通character驱动中的一个任意地址写漏洞.当程序在处理COMPAT_FASTRPC_IOCTL_INVOKE_FD的IOCTL时,从用户空间返回的指针会导致在用户可控的位置写零操作.补丁中的代码让用户空间的指针没有被直接调用,而是用get_user和put_user的宏来确保是否有效.

CVE-2016-3860 是高通音频驱动中的一个越界读取的漏洞.在IOCTL的AUDIO_GET_CALIBRATION控制码中,用于分配内部缓冲区的部分没有经过校验,导致在使用copy_to_user的时候读取越界.补丁的代码中增加了对头的校验和类型的校验.

CVE-2016-3940和CVE-2016-6672 是触摸屏驱动当中的栈溢出漏洞.在synaptics_rmi4_i2c_write函数中,栈的数组大小来源于用户空间,所以可能导致栈溢出.补丁当中用动态分配堆内存来替换了这种方法.

 

B).MTK驱动漏洞

CVE-2016-3928 是MTK视频驱动中的内存破坏漏洞.在mtkfb_ioctl函数中,没有校验displayid的值是否为负数而导致的内存崩溃.

CVE-2016-3936 是MTK视频驱动中的内存破坏漏洞.在函数mtkfb_auto_capture_framebuffer函数中,config->outputBuffer输入参数没有正确校验,所以会导致问题.补丁当中完全删掉了这些代码来避免内存破坏漏洞.

CVE-2016-3937 是MTK视频驱动中的内存破坏漏洞.在process_dbg_opt函数中,opt输入参数没有被正确校验而导致了内存破坏问题.补丁中完全删掉了这些代码来防止内存破坏问题.

 

C).英伟达驱动漏洞


CVE-2016-6673 是英伟达照相机驱动中的UAF漏洞.在camera_new_device函数中,如果一个设备已经存在,在camera_remove_device函数中被调用两次就会导致UAF问题.补丁中删掉了没有被使用的问题代码来避免UAF.

CVE-2016-6677 是英伟达GPU驱动中的信息泄漏漏洞.在gk20a_channel_ioctl函数中的缓冲区变量没有初始化清零就被拷贝到用户空间中就会造成信息泄漏的问题.补丁中增加了初始化清零的操作来避免这个问题.

 

D).其他驱动漏洞

CVE-2016-6678 是摩托罗拉USBNET驱动中的一个信息泄漏漏洞.在usb_ether_xmit函数中,分配的缓冲区没有被初始化清零,所以可能导致信息泄漏问题.补丁中增加了初始化内存清零的操作来避免这个问题.

 

4.高通组件漏洞

 

CVE-2016-3929 是高通QSEE中的TOCTOU漏洞.早期注册的共享缓冲区由于线程上下文的切换而未能重新验证,从而出现竞争问题.CVE-2016-2059 是高通网络组件中IPC Router绑定任意端口而造成的问题,从补丁中看,是需要在绑定端口之前要校验是否是客户端的端口.

CVE-2016-6679 是高通组件中的一个信息泄漏的漏洞.iw_softap_setwpsie函数中由于不正确的边界检查导致的信息泄漏问题.补丁中的代码全部删除了这些问题代码.

CVE-2016-3902 是高通组件中的一个信息泄漏的漏洞.当IOCTL调用到WAN_IOC_ADD_FLT_RULE_INDEX控制码时,由于内核堆的越界读取导致了信息泄漏.在补丁中增加了对最大值的判断检测,来避免读取越界造成的信息泄漏问题.

CVE-2016-6680 是高通组件中的一个信息泄漏的漏洞.当调用iw_set_priv的IOCTL时,由于内核堆的过度读写导致了信息泄漏.补丁中的代码删除了全部问题的代码来避免这个问题.

CVE-2016-6681和CVE-2016-6682 是高通组件中的信息泄漏漏洞.msm_audio_config32结构在初始化的时候没有进行清零操作而导致的信息泄漏,补丁中的代码增加了对他们的清零计算来避免这个问题.

CVE-2016-6686,CVE-2016-6687和CVE-2016-6688都是英伟达profiler中的信息泄漏漏洞.它们都是从用户态拷贝未初始化清零结构,从而导致的信息泄漏问题.补丁代码中将这些结构的代码都进行了初始清零操作来避免这个问题.

CVE-2016-6691,CVE-2016-6692,CVE-2016-6693,CVE-2016-6694,CVE-2016-6695,CVE-2016-6696,CVE-2016-5344和CVE-2016-6697都是高通组件中的漏洞.但是并不影响Nexus设备.这些漏洞需要通过受影响的厂商来解决,相关的问题细节需要厂商来提供.

  • 受影响进程列表