2016-11-08

11月安全补丁风险评估

本月一共有91个安全漏洞,其中Critical 26个,High 44个,Moderate 21个,其中属于Aosp部分的有34个,驱动和kernel的有57个。

 

 

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

漏洞详细情况分析整理

  • Aosp高风险安全漏洞

下图是这个月aosp漏洞的整理。

 

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

CVE-2016-6699、CVE-2016-3862是两个Critical级的mediaserver漏洞。分别影响libstagefright.so、framework.jar两个文件。Mediaserver的远程代码执行漏洞能够通过精心构造一个媒体文件来破坏内存,达到远程利用的效果。

CVE-2016-6699是在MediaHTTP.cpp中,重连方法调用mLastURI.c_str()得到URI,并且在没有检查是否和mData相等就free,可能导致use after free。

CVE-2016-3862 这次的的补丁是对8月份的补丁的一个升级,上次的补丁在调用ExifInterface#saveAttributes()后可能导致PNG图片内存被破坏。

CVE-2016-6704、CVE-2016-6705、CVE-2016-6706是三个High级别的mediaserver漏洞。分别影响libvisualizer.so、libradio.so、libstagefright_omx.so三个文件。Mediaserver的提权漏洞可以被手机里的任意app利用,来获取更高的权限,并在特权进程执行任意代码。

CVE-2016-6704是一个无效replySize在effect_descriptor_t gVisualizerDescriptor可能导致堆溢出。

CVE-2016-6705 service interface 使用一个指针引用代替强指针可能导致在竞争条件下service指针已经释放,但是有另一个线程正在使用。这能触发一个use-after-free漏洞。

CVE-2016-6706是在IOMXNodeInstance.cpp,enableNativeBuffers接受一个任意的portIndex,没有校验的情况下,在IOMXNodeInstance结构里一个可以控制的偏移写一个dword值为0或者1。

 

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

CVE-2016-6700是Critical级的提权漏洞,android系统很多地方使用到了libzipfile(STATIC_LIBRARY)。entry->uncompressedSize和entry->data的值可以修改超出缓冲区边界的值,可能导致代码执行。

 

C)其他High级别的漏洞

CVE-2016-6702是libjpeg一个远程代码执行漏洞。可以使用一个特殊构造的文件来达到任意代码执行的目的。一个特殊构造的JPEG文件(size大于2的32次方)可以调用jpeg_open_backing_store在ashmem导致整数溢出。可能导致远程代码执行。

CVE-2016-6703是一个Android Runtime的远程代码执行漏洞。攻击者可以使用特制的payload在低权限进程执行任意代码。64位的IDN.toASCII()函数,一个很长的域名可能栈溢出,导致任意代码执行。

CVE-2016-6707当进程间共享bitmap时,android.graphics.Bitmap类设定的ashmem的大小是由用户提供的。并用它来匹配实际bitmap的大小。Bitmap构造器需要查询ashmen的大小。

CVE-2016-6708是一个SystemUI的提权漏洞,任意app可以用来绕过安全性提示。

CVE-2016-3912是对9月份补丁的一次再升级,修改了一处可能造成ActivityManagerService死锁的情况。

CVE-2016-3911是对9月份补丁的一次再升级,最初的补丁只是修复了受影响目标的文件描述符。经过讨论发现,这个问题会影响从Zygote到它的子进程泄露所有的文件描述符。恶意程序可以修改文件描述符的seek,而其他进程会使用这些。

 

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

services.jar、Launcher3.apk、libmedia.so、Settings.apk、libstagefright_omx.so、libstagefright.so

 

  • kernel高风险安全漏洞

A).Critical级提权的漏洞

CVE-2016-6728 是内核ION子系统中一个导致本地程序在内核上下文中执行任意代码的漏洞.恶意程序可以通过ION来分配堆创建特定的内存块,对物理硬件进行攻击.

CVE-2016-6828 是内核networking子系统中一个导致本地程序在内核上下文中执行任意代码的漏洞.当tcp_sendmsg函数分配一个新的skb结构时,把它放入写入队列的尾部.在失败的条件判断下,遗留下的空指针会导致UAF问题.

CVE-2016-2184 是内核sound子系统中一个导致本地程序在内核上下文中执行任意代码漏洞.create_fixed_stream_quirk,snd_usb_parse_audio_interface,和create_uaxx_quirk函数分配了audioformat对象,并且在返回之前错误地释放了它,因此导致内存破坏.补丁中的代码在释放之前取消了audioformat对象的关联,防止潜在的内存破坏.

CVE-2016-7910 是内核文件系统中的一个导致本地程序在内核上下文中执行任意代码的漏洞.一个失败的条件判断可以导致潜在的UAF漏洞,补丁中的代码把私有指针设置为NULL,来避免野指针的复用.

CVE-2016-7911 是内核文件系统中的一个导致本地程序在内核上下文中执行任意代码的漏洞.在访问task->io_context时出现竞争就会导致UAF漏洞的出现,因此补丁中的代码在访问task结构的前后都进行了锁的操作.

CVE-2016-8961 是内核文件系统中的一个导致本地程序在内核上下文中执行任意代码的漏洞.在函数__ext4_journal_stop中,jbd2_journal_stop函数释放掉handle指针后又被复用,因此造成了UAF问题.补丁中的代码把handle的值提前存储到本地变量中来避免复用.

CVE-2015-8962 是内核SCSI驱动中的一个导致本地程序在内核上下文中执行任意代码的漏洞.在函数sg_common_write中,如果设备在SG_IO的ioctl中被分离,块设备请求被释放掉并且返回-ENODEV.然而在sg_finish_rem_req函数在返回之前也释放了srp->rq,在释放rq对象后rq->cmd中再次释放,造成了double free的问题.补丁中的代码把srp->rq的值设置为NULL,防止在失败返回的分支中再次释放.

CVE-2016-7912 是内核USB驱动中的一个导致本地程序在内核上下文中执行任意代码的漏洞.当在使用USB上异步读取或写入操作的时候,通过调用ki_complete()回调通知IO请求的发出者在完成时提交kiocb.然而ki_complete()函数会提前释放掉kiocb,因此导致了UAF漏洞的出现.补丁中的代码保证kiocb在释放后不再使用,避免了这个问题.

CVE-2016-7913 是内核media驱动中的一个导致本地程序在内核上下文中执行任意代码的漏洞.在xc2028_set_config函数中,如果没有固件名的校验,直接传递xc2028_config结构有可能出现UAF的问题.补丁中的代码把固件名的值最后设置为NULL,来防止释放后再重用.

CVE-2016-6737 是内核ION子系统中的一个导致本地程序在内核上下文中执行任意代码的漏洞.竞争条件导致了潜在的UAF漏洞,补丁中的代码禁用了某种类型的堆.

CVE-2013-7446 是内核Networking子系统中的一个导致本地程序在内核上下文中执行任意代码的漏洞.原来的修复设计是把unix_dgram_poll函数中,移除sock_poll_wait的第二次调用来阻止UAF漏洞.新更新的的补丁中,修复了不正确的原始校验.

 

 

B).High级提权的漏洞

CVE-2016-6136 是内核系统调用审计子系统中的一个可能使本地恶意应用程序中断内核中的系统调用审计的提权漏洞.在Linux内核4.7版的auditsc.c文件中的audit_log_single_execve_arg函数中的一个竞争条件导致本地用户通过修改某个字符串绕过限制或系统调用审计.补丁中的代码把参数的数据存入缓冲区中.并且记录到审计记录中防止竞争条件.

CVE-2016-7914 是内核组件中的一个信息泄漏的漏洞.在assoc_array_insert_into_terminal_node函数中compare_object方法在所有的非空slot中调用,传递指针给给compare_object,导致了越界读的问题.补丁中的代码只有在slot 处于leave状态的时候才能调用compare_object来避免越界读的问题.

CVE-2015-8963 是内核performance子系统中一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.在释放SWEVENT结构的哈希数组后,由于CPU中的线程有竞争关系的存在因此会导致UAF问题.补丁中的代码在最后一个SWEVENT结构结束后会自动释放来避免这个问题.

CVE-2015-8964 是内核组件中的一个信息泄漏的漏洞.滥用ldisc字段会导致信息泄漏,补丁中的代码在tty_set_termios_ldisc函数初始化时把tty结构清零防止信息泄漏.

CVE-2016-7915 是内核组件中的一个信息泄漏的漏洞.在补丁的代码中,hid_input_field函数增加了边界的检查,来防止潜在的越界读漏洞.

CVE-2016-7916 是内核组件中的一个信息泄漏的漏洞.如果在envp数组完全设置之前读取了/proc/pid/environ,则会出现潜在的信息泄露漏洞,因为可以读取的字节数比实际写入的字节多.补丁中的代码增加了对env_end变量地校验,防止信息泄漏.

 

C).Moderate级漏洞

CVE-2016-6753 是内核组件中的信息泄漏漏洞.在没有设置kptr_restrict情况下,%p都导致了信息泄漏,补丁中的代码把%p改为%pk来防止信息泄漏.

CVE-2016-7917 是内核组件中的信息泄漏漏洞.在nfnetlink_rcv_batch函数中,如果length校验出现问题,就会导致越界读的问题.补丁中的代码增加了临界校验来避免潜在的越界读问题.

 

  • 高通和MTK的驱动漏洞

A).高通驱动漏洞

 

CVE-2016-6727 是高通GPS子系统中一个可以在内核上下文中任意执行远程代码的漏洞.当通过http下载和处理XTRA blobs的时候,使用loc_xtra_download_bin没有校验需要读取的值,如果没有考虑到负数的情况,就可能导致整数溢出,从而缓冲区溢出.

CVE-2016-6725 是高通加密驱动中一个可以在内核上下文中任意执行远程代码的漏洞.在_qcrypto_process_aead函数中,由于判断的定义是ULONG,但是变量的类型是UINT,所以导致了整形溢出.补丁中用UINT_MAX替换掉了ULONG_MAX来保证整数溢出的校验.

CVE-2016-6726 是高通radio中一个可以在内核上下文中任意执行远程代码的漏洞.在某种情况下,为SubjectAltName分配的扩展内容不足,无法包含NULL终止符,容易导致内存破坏.补丁中增加了空间的分配来避免这个问题.

CVE-2016-6729 是高通bootloader中一个导致本地程序在内核上下文中执行任意代码的漏洞.在更新设备树中添加/更新DT节点之前,没有检查存储器范围不与上述存储器区域是否重叠.补丁中的代码修复添加了一个错误的条件判断是否是更新DT节点入口时会导致内存区重叠.

CVE-2016-6738 是高通加密引擎驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.在qcedev_vbuf_ablk_cipher函数中,可以绕过对目标地址的校验,导致内存破坏.补丁中的代码各自校验了目标地址和源地址来防止内存破坏.

CVE-2016-6739 是高通照相机驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.在msm_cpp_cfg_frame函数中,new_frame->num_strips变量由于没有被校验,所以会导致潜在的堆溢出问题.代码中的设计加强了边界检测来防止堆溢出漏洞.

CVE-2016-6740 是高通照相机驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.在msm_camera_qup_i2c_write_seq函数中,由于变量的大小是用户态可控的,所以会导致潜在的栈溢出问题.补丁中的代码增加了对边界的校验来防止这个问题.

CVE-2016-6741 是高通照相机驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.在msm_camera_qup_i2c_read和msm_camera_qup_i2c_read_seq函数中栈的变量都是用户可控所以容易导致栈溢出.补丁中的代码都加强了对边界的校验来防止这个问题.

CVE-2016-3904 是高通bus驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.由于字符串的长度没有进行校验,所以当读入到缓冲区时可能会造成栈溢出.补丁中的代码加入了最大值读取的限制来避免这个问题.

CVE-2014-9874 是高通音频驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.原始的修复是给整数变量增加边界检查,但是导致在电话通话期间音频录制导致中断.新补丁中的代码对这些问题进行了修复.

CVE-2016-3850 是高通bootloader驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.原始的修复是为了linux镜像设计的,而不是安卓.在新的补丁中增加了整数溢出的检查.

 

B).英伟达驱动漏洞

CVE-2016-6730,CVE-2016-6731,CVE-2016-6732,CVE-2016-6733,CVE-2016-6734,CVE-2016-6735和CVE-2016-6736是英伟达GPU驱动中能导致本地程序在内核上下文中执行任意代码的漏洞.涉及到tegra_drm_context的调用中出现了竞争条件的问题,因此导致了UAF漏洞的出现.补丁中增加了适当的锁来阻止资源的竞争,避免了UAF漏洞.

CVE-2016-6746 是英伟达GPU驱动中的一个信息泄漏漏洞.有个涉及到tegra_drm_context结构的竞争问题会出现信息泄漏.补丁中添加了锁,来防止潜在的问题.

 

C).其他驱动漏洞

CVE-2016-6742 和 CVE-2016-6743 是Synaptics触摸屏驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.在fwu_sysfs_store_image函数中,没有对count变量进行检验,所以导致了潜在的堆溢出漏洞.补丁中的代码增加了边界检查来避免这个问题.

CVE-2016-6744 是Synaptics触摸屏驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.在synaptics_rmi4_reg_control_store函数中由于偏移值没有考虑到负数的情况,因此导致了栈溢出.补丁中的代码把无符号数转换成了有符号数来修复问题.

CVE-2016-6745 是Synaptics触摸屏驱动中的一个能够让本地恶意程序在内核上下文中执行任意代码的漏洞.全局变量fwu在函数fwu_sysfs_image_size_store和函数fwu_sysfs_store_image都可以使用,在没有加锁的情况下很容易造成竞争条件的漏洞.补丁中的代码加入了锁来阻止竞争问题.

 

  • 高通组件漏洞    CVE-2016-6748,CVE-2016-6749,CVE-2016-6750和CVE-2016-6751 都是高通组件中的信息泄漏漏洞.在没有设置kptr_restrict情况下,%p都导致了信息泄漏,补丁中的代码把%p改为%pk来防止信息泄漏.CVE-2016-3906 是高通组件中的信息泄漏漏洞.在msm_core_ptable_read函数中,有潜在的越界读漏洞,补丁中的代码增加了边界检查来防止潜在漏洞.CVE-2016-3907 是高通组件中的信息泄漏漏洞.对于msm_audio_wmapro_config_v2_32结构在开始的时候没有进行初始化,因此导致了信息泄漏问题.补丁中的代码在该结构初始化的时候全部置为0来防止信息泄漏.

    CVE-2016-6698 是高通组件中的信息泄漏漏洞.对于msm_audio_wmapro_config_32结构在开始的时候没有进行初始化,因此导致了信息泄漏问题.补丁中的代码在该结构初始化的时候全部置为0来防止信息泄漏.

    CVE-2016-6752 是高通组件中的信息泄漏漏洞.params_value数组没有初始化,因此在使用的时候会导致信息泄漏问题.补丁中的代码在初始化的时候全部置为0来避免这个问题.

受影响进程列表