2016-12-09

本月一共有79个安全漏洞,其中Critical 12个,High 46个,Moderate 20个,Low 1个其中属于Aosp部分的有23个,驱动和kernel的有56个。

 

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

 

漏洞分布情况对比图:

漏洞详细情况分析整理

  • Aosp高风险安全漏洞

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

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

CVE-2016-3862是一个Critical级的mediaserver漏洞。影响framework.jar。

Mediaserver的远程代码执行漏洞能够通过精心构造一个媒体文件来破坏内存,达到远程利用的效果。

CVE-2016-3862这次的更新是对一个旧的漏洞的升级。这次更新是在使用ExifInterface加载大量的图片时,如果I/O出现问题后可以返回。

 

CVE-2016-6761、CVE-2016-6760、CVE-2016-6759、CVE-2016-6758、CVE-2016-6704是五个High级别的mediaserver漏洞。分别影响libOmxVenc.so、libOmxVdec.so、libvisualizer.so,libqcomvisualizer.so四个文件。

Mediaserver的提权漏洞可以被手机里的任意app利用,来获取更高的权限,并在特权进程执行任意代码。

CVE-2016-6761是在omx_video::allocate_input_buffer()方法里使用m_sInPortDef.nBufferCountActual申请了一段内存。这段可以被通过使用一个畸形binder请求修改,导致堆溢出。

CVE-2016-6760是omx_vdec::allocate_output_headers()申请了一段内存,大小是drv_ctx.op_buf.actualcount。但是drv_ctx.op_buf.actualcount可以通过一个畸形的binder访问修改,导致堆溢出。

CVE-2016-6759是omx_vdec::empty_this_buffer()没有验证要清空buffer的index,可能导致越界写。

CVE-2016-6758是omx_vdec::empty_this_buffer_proxy()没有校验buffer。如果一个buffer是在secure memory申请的,在memcpy之前调用了omx_vdec::empty_this_buffer_proxy()可能导致堆溢出。

CVE-2016-6704的补丁是对上一次补丁的一次升级。修补的问题是在编译的debug版本中会返回一个null引用。

 

B)以下高风险安全漏洞在curl和libcurl模块中。

CVE-2016-5419、CVE-2016-5420、CVE-2016-5421是三个High级的远程代码执行漏洞。

这三个漏洞是可能导致中间人攻击。被评为High是因为需要一个伪造的证书。Patch位于https://curl.haxx.se/changes.html#7_50_1

 

C)其他High级别的漏洞

CVE-2016-6762是libziparchive一个权限提升的漏洞。问题的根源是两个32位的整型相加可能产生溢出并且和第三个32位整型相比较。最终在控制mmaped的内存使用一个被控制的offset。解引用的地址是可以被控制的,最终导致内存破坏或权限提升。

 

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

TeleService.apk、libstagefright.so、services.jar、libstagefright.so、libchromium_net.so、libframesequence.so、libwifi-service.so、libstagefright_soft_avcdec.so

 

  • kernel高风险安全漏洞

CVE-2016-4794 是内核内存子系统中一个可以在内核上下文中任意执行远程代码的漏洞.在Linux内核4.6版本中,有一个潜在的UAF漏洞存在于mm/percpu.c当中.它允许本地用户通过构造mmap和bpf系统调用导致拒绝服务.补丁中的代码将大多数非原子分配置于pcpu_alloc_mutex下,以与pcpu_balance_work同步,并将异步映射扩展操作转储到pcpu_balance_work,以防止UAF漏洞.A).Critical级提权的漏洞

 

CVE-2016-5195 是内核内存子系统中一个可以在内核上下文中任意执行远程代码的漏洞(脏牛漏洞).由于内存子系统处理私有只读存储器映射的写时复制时存在竞争条件.本地攻击者可以使用它来获得对只读存储器的写入访问,例如可执行文件的内存缓存版本,并且可能在特权进程的上下文中获得任意代码执行.补丁中的代码增加了一个FOLL_COW的标识,然后使用pte的dirty标识来验证FOLL_COW是否有效,以此来防止潜在的任意代码执行.

 

CVE-2015-8966 是内核中一个可以在内核上下文中任意执行远程代码的漏洞.在sys_oabi_fcntl64函数中,KERNEL_DS如果没有被及时设置回USER_DS就会导致任意内存读写的问题.补丁中的代码是在返回之前设置回USER_DS来阻止潜在的问题.

 

CVE-2016-9120 是内核ION驱动中可以在内核上下文中任意执行任意代码的漏洞.在涉及ion_handle结构有个竞争问题导致了UAF漏洞的出现.补丁中的代码增加了适当的锁来阻止潜在的UAF漏洞.

 

B).High级提权的漏洞

CVE-2014-4014 是内核文件系统中的提权漏洞.可以导致本地恶意应用程序绕过与其他应用程序隔离的系统保护.在3.14.8之前的Linux内核中实现的功能中没有正确地考虑命名空间不适用于inode,这允许本地用户通过首先创建用户命名空间来绕过预期的chmod限制,如通过设置带有组的文件的setgid位所示root权限.补丁修复程序在更改inode_capable以检查uid和gid映射,以防止权限绕过.

 

CVE-2015-8967 是内核中一个可以在内核上下文中任意执行远程代码的漏洞.sys_call_table可写导致了潜在的任意代码执行.补丁中的代码标记了放在rodata段的sys_call_table常量,这可以导致尝试修改它失败,在严格的页表权限控制下,防止了潜在的任意代码执行.

 

CVE-2016-6786和CVE-2016-6787是内核performance子系统中的一个可以在内核上下文中任意执行远程代码的漏洞.在涉及perf_event结构中的一个竞争问题,导致了潜在 的UAF漏洞出现.补丁中的代码增加了合适的锁来防止潜在的UAF漏洞出现.

 

CVE-2015-7872 是内核安全子系统中的一个可以在内核上下文中任意执行远程代码的漏洞.在Linux4.2.6版本中security/keys/gc.c文件中的key_gc_unused_keys函数中允许本地用户通过恶意构造keyctl命令来执行代码.补丁中的代码增加了检查来阻止潜在的代码执行问题.

 

CVE-2016-1583 是内核加密文件系统中的一个可以在内核上下文中任意执行远程代码的漏洞.原始修复是通过实现仅打开文件的mmap操作来引入对较低文件系统的依赖.更新的补丁设计具有mmap处理的实例来替换.

 

C).Moderate级漏洞

CVE-2016-8399 是内核网络子系统中的一个可以在内核上下文中任意执行远程代码的漏洞.在ping_common_sendmsg函数中,传递的icmph_len变量的长度没有校验充分导致潜在的数据溢出.补丁中的代码增加了额外的检查来防止溢出.

 

CVE-2016-8401,CVE-2016-8402,CVE-2016-8403,CVE-2016-8404,CVE-2016-8406,CVE-2016-8407都是内核组件中的可以导致恶意应用程序使用权限之外的数据的漏洞.%p可以导致泄漏内核地址,补丁中的代码使用%pK来替换%p,防止泄漏内核地址.

 

CVE-2016-8405 是内核组件中的可以导致恶意应用程序使用权限之外的数据的漏洞.fb_cmap_to_user函数中,没有考虑to->start变量小于0的情况,因此导致了信息泄漏问题的出现.补丁中的代码加强了边界检查来避免这个问题.

 

D). Low级提权的漏洞

CVE-2016-6690 是内核音频驱动中的一个可以导致设备重启的漏洞.原来的固定使用EIO作为错误返回代码但函数签名有unsigned int作为返回类型.补丁中的代码用-1替换掉了原来的-EIO来修正这个问题.

 

  • 驱动漏洞

A).高通驱动漏洞

CVE-2016-8411 是高通MSM接口中一个可以在内核上下文中任意执行远程代码的漏洞.在处理QMI QOS NSTD过滤器或NW支持的QOS配置文件TLV时,没有对过滤器或配置文件缓冲区索引进行边界检查.当我们从调制解调器获得QOS指示,并且配置文件数量大于QMI_QOS_MAX_PROFILES或者如果过滤器规格缓冲区大于QMI_QOS_MAX_FLOW_FILTER,则发生缓冲区溢出.

 

CVE-2016-6755 是高通照相机驱动中一个可以在内核上下文中任意执行远程代码的漏洞.在msm_actuator_parse_i2c_params函数中,有一个不正确的边界检查导致潜在的堆缓冲区溢出.补丁中的代码修复了边界检查来阻止潜在的堆缓冲区溢出问题.

 

CVE-2016-6791,CVE-2016-8391和CVE-2016-8392都是高通音频驱动中的可以在内核上下文中任意执行远程代码的漏洞.在涉及到audio_aio_ion_region结构中存在竞争问题,因此导致了潜在的UAF漏洞.补丁中的代码增加了适当的锁来修复UAF问题的出现.

 

CVE-2016-8410 是高通音频驱动可以导致恶意应用程序使用权限之外的数据的漏洞.%p可以导致泄漏内核地址,补丁中的代码使用%pK来替换%p,防止泄漏内核地址.

 

B).MediaTek驱动漏洞

CVE-2016-6492 是MediaTek驱动中一个可以在内核上下文中任意执行远程代码的漏洞.传递给MT6573FDVT_SetRegHW函数的a_pstCfg变量没有经过校验,导致潜在的内存破坏问题出现.补丁中的代码增加了边界检查来修复这个问题.

 

CVE-2016-6781 是MediaTek驱动中一个可以在内核上下文中任意执行远程代码的漏洞.在rgidle_state_store函数中,由于拷贝的数据没有约束导致了潜在的栈溢出问题.补丁中的代码增加了临界检查来防止这个问题的出现.

 

CVE-2016-6782 是MediaTek驱动中一个可以在内核上下文中任意执行远程代码的漏洞.在mt_gpio_store_pin 函数中,由于拷贝的数据没有约束导致了潜在的栈溢出问题.补丁中的代码增加了临界检查来防止这个问题的出现.

 

CVE-2016-6783 是MediaTek驱动中一个可以在内核上下文中任意执行远程代码的漏洞.在__enable_ssc函数中,传递的变量pll_id没有经过校验,从而导致了潜在的内存破坏问题的出现.补丁中的代码增加了临界检查来阻止潜在的问题.

 

CVE-2016-6784 是MediaTek驱动中一个可以在内核上下文中任意执行远程代码的漏洞.在__disable_ssc函数中,传递的变量pll_id没有经过校验,从而导致了潜在的内存破坏问题的出现.补丁中的代码增加了临界检查来阻止内存漏洞.

 

CVE-2016-6785 是MediaTek驱动中一个可以在内核上下文中任意执行远程代码的漏洞.在TMP103_HW_Write_Proc函数中,由于拷贝的数据没有约束导致了栈溢出问题的出现.补丁中的代码增加了边界检查来防止这个问题.

 

CVE-2016-6788 是MediaTek I2C驱动中的一个可以在内核上下文中任意执行远程代码的漏洞.在set_config函数中,由于拷贝的数据没有约束导致了潜在的溢出问题.补丁中的代码限制了拷贝的大小来阻止潜在的溢出问题.

 

CVE-2016-8396 是MediaTek视频驱动中的一个可以导致恶意应用程序使用权限之外的数据的漏洞.VAL_VCODEC_CPU_LOADING_INFO_T结构没有初始化就拷贝给用户导致了潜在的信息泄漏问题.补丁中的代码在初始化的时候将该结构清零来阻止潜在的信息泄漏问题.

 

C). NVIDIA 驱动漏洞

CVE-2016-6775 是英伟达GPU驱动中可以在内核上下文中任意执行任意代码的漏洞.在涉及到nvmap_handle_info的结构中存在一个竞争条件的问题会导致UAF漏洞的出现.补丁中的代码使用nvmap_get_dmabuf_fd函数替换了nvmap_create_fd函数来阻止潜在的UAF风险.

 

CVE-2016-6776 是英伟达GPU驱动中可以在内核上下文中任意执行任意代码的漏洞.在涉及到vm_gk20a的结构中存在一个竞争条件的问题会导致UAF漏洞的出现.补丁中的代码是确保VM对象的至少有一个通道的使用,防止UAF的漏洞出现.

 

CVE-2016-6777 是英伟达GPU驱动中可以在内核上下文中任意执行任意代码的漏洞.存在一个和ch->error_notifier变量存在条件竞争的问题导致了UAF漏洞的出现.补丁中的代码增加了适当的锁来防止潜在的问题.

 

CVE-2016-6915 和 CVE-2016-6916 是英伟达视频驱动中可以在内核上下文中任意执行任意代码的漏洞.num_syncpt_incrs变量在传递给nvhost_ioctl_channel_submit函数中就使用导致了栈溢出问题.补丁中的代码增加了对输入参数的校验来防止这个问题的出现.

 

CVE-2016-6917 是英伟达视频驱动中可以在内核上下文中任意执行任意代码的漏洞.在32位体系的机器上,在job_size函数中,由于num_unpins变量的设置存在整形溢出问题.补丁中把变量类型全部设置成u64来防止这个问题.

 

CVE-2016-8397 是英伟达视频驱动中的一个可以导致恶意应用程序使用权限之外的数据的漏洞.在nvmap_ioctl_get_param函数中,由于没有检验参数而导致了潜在的信息泄漏问题.补丁中的代码检查了nvmap_get_handle_param的返回值来判断是否信息泄漏.

 

CVE-2016-8395 是英伟达照相机驱动中拒绝服务漏洞.regmap_read函数在写入数据的时候是一个整形指针的变量,没有检查直接使用导致了潜在的溢出问题.补丁中的代码在读入数据前增加了校验防止拷贝越界.

 

CVE-2016-8408 和CVE-2016-8409都是英伟达视频驱动中的可以导致恶意应用程序使用权限之外的数据的漏洞.%p可以导致泄漏内核地址,补丁中的代码使用%pK来替换%p,防止泄漏内核地址.

 

D). 其他驱动漏洞

CVE-2016-6778 和CVE-2016-6779 是HTC音频codec驱动中的一个可以在内核上下文中任意执行远程代码的漏洞.由于没有验证cmd变量是否小于sizeof(struct tfa9895_i2c_buffer)导致了潜在的堆溢出问题.补丁中的代码增加了边界检查来阻止潜在的堆溢出问题.

 

CVE-2016-6780 是HTC音频codec驱动中的一个可以在内核上下文中任意执行远程代码的漏洞.在rt5506_ioctl函数中,有一个涉及rt5506_cfg_data.cmd_data变量的竞争条件问题导致了潜在的UAF漏洞.补丁中的代码增加了适当的锁来避免UAF问题的出现.

 

CVE-2016-8393 是Synaptics触摸屏驱动中的一个可以在内核上下文中任意执行远程代码的漏洞.在fwu_get_image_firmware_id函数中,由于没有限制索引导致了潜在的堆缓冲区溢出问题.补丁中的代码增加了边界检查来阻止潜在的堆缓冲区溢出问题.

 

CVE-2016-8394 是Synaptics触摸屏驱动中的一个可以在内核上下文中任意执行远程代码的漏洞.在fwu_sysfs_image_name_store函数中,由于拷贝没有约束而导致了潜在的堆缓冲区溢出问题.补丁中的代码增加了边界检查来阻止潜在的堆缓冲区溢出问题.

 

CVE-2014-9909 是博通wifi驱动中的一个可以在内核上下文中任意执行远程代码的漏洞.在wl_android_priv_cmd函数中,由于priv_cmd.total_len变量没有考虑到负数的情况而导致了潜在的堆溢出漏洞.补丁中的代码增加了额外的检查来修复潜在的堆溢出漏洞.

 

CVE-2014-9910 是博通wifi驱动中的一个可以在内核上下文中任意执行远程代码的漏洞.在wls_parse_batching_cmd函数中,由于拷贝的数据没有约束导致了潜在的溢出问题.补丁中的代码限制了拷贝的大小来阻止潜在问题的出现.

 

  • 高通组件漏洞

CVE-2016-5341 是高通GPS组件中一个能被远程攻击者导致系统崩溃或者重启的漏洞.部分文件通过HTTP传输,由于该通信协议缺乏安全性,恶意攻击者可能能够使用中间人攻击提供任意数据.此修复程序旨在将XTRA客户端版本修改为包括签名,将端点更改为使用HTTPS或同时使用两者的版本.

 

CVE-2016-6756 是高通组件中的一个可以导致恶意应用程序使用权限之外的数据的漏洞.在msm_cpp_subdev_ioctl函数中,如果_IOC_DIR(cmd)是_IOC_NONE就会导致信息泄漏问题的出现,补丁中的代码增加了边界检查来阻止潜在的信息泄漏问题.

 

CVE-2016-6757 是高通组件中的一个可以导致恶意应用程序使用权限之外的数据的漏洞.%p可以导致泄漏内核地址,补丁中的代码使用%pK来替换%p,防止泄漏内核地址.

  • 受影响进程列表

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来避免这个问题.

受影响进程列表

2016-10-21

appscan

 

0x1.引子

 

前段时间盘古的同学发现了QQ手机浏览器的“虫洞漏洞”,我们同步分析了下该漏洞,目前该漏洞已经修复,我们和大家分享一下这个漏洞的分析和挖掘全过程,供大家参考。

 

0x2.样本信息

 

下载链接:http://mb.qq.com/

文件名称:qqbrowser_6.9.2.2665_20820.apk

文件md5:64FE443F770BA9433E23D689C78DAF99

versionCode: ‘6922665’

versionName: 6.9.2.2665

云盘备份地址:https://yunpan.cn/cM8JVT39xQnhw  访问密码 d7d6

 

0x3.特征定位

 

查看手机所开端口发现一处可疑端口本地未校验。

 

所以需要对本地所有dex文件进行扫描,看看此部分功能到底是在哪里,在做什么。

通过搜索端口号以及判定是打开Sokcet,我们确定此处地址。

 

 

即确定文件所在包为:

assets/dex/com.tencent.mtt.sniffer.jar

 

0x4.代码深入

 

现在我们就可以继续往下进行分析了。

我们用jeb查看一下java代码。

 

 

 

既然g.b是获取的端口8786数字,那么g类很可能就是初始化socket的类,所以我们按照代码逻辑往下看一下这个g类,发现这里this.i的数值是new j(this.a),而这个j类则包含很多数据。

如下图所示:

 

第一个红框是方法名,处理申请的访问链接流程的。

第二个红框是请求的网址,根据不同的请求执行不同的功能。

第三个红框就是执行的功能,在代码下面有很多类似结构。

这里我们先看一下/getWifiInfo这个请求。

在j.a(this.a,arg13)方法我们往后跟一下。

 

 

这里有两处需要分析的地方,一处是数据处理,即请求访问协议的数据的加密与解密;一处是Message的发送,即不同的请求走不同的方法分支。我们先看第一处红框这个位置,是将数据进行处理,this.a(v2.toString)方法我们跟进去。

 

 

可以看到执行的是e.a和e.b方法,我们看到这个,一般是可以猜测到是加解密的方法。

 

 

这样,我们就明显的确定是通过的3des进行的加解密处理。

然后密钥的获取可以直接静态分析得到。

密钥的获取:

l.b = b.b + h.c;

 

b .b = “kM7hYp8lE69U” ;

h .c = e.b + d.f;

 

e.b = “jidhlPbD9”;

d .f = “8Pm” ;

 

密钥==”kM7hYp8lE69UjidhlPbD98Pm

在寻找密钥的过程中,我们发现访问请求的数据加密,和服务器返回的数据解密,都是通过3des加密解密,然后进行Base64编码解码处理的。

所以我们整理一下思路,先对刚才的getWifiInfo请求进行测试模拟。

 

 

流程也就是先在本地进行8786端口转发一下。

然后用python写一下网络请求即可,在上面截图中的url大家可以直接看到。

 

0x5.漏洞利用

 

上一条测试通过之后,我们继续往下看,有更多的协议需要分析。

 

 

我们这里可以看到,第一条getWifiInfo协议没有判断,直接会进行请求,而后面的请求,都是基于uuid来进行判定,如果uuid存在并且合法,那么才会进行后续请求,所以主要问题在于我们如何构造uuid并且使之合法化。

我们继续分析代码,也就是上图第二个红框标识的地方,如果uuid不是空,同时本地的一个hashmap中没有记录过它,那么将会往下走if的流程,所以看到这个/bind协议,我们就可以猜测,这条协议是否是绑定uuid的呢?

跟进去看一下this.a.a(arg12);

 

 

我们看到这个红框,可以发现上文中我们在跟getWifiInfo方法的时候,也跟进去了,所以我们分析一下这个是什么意思。

 

 

经过代码流程的跟踪,我们到了这个类,发现这里是处理Message流程的地方。

当前bind走的是case 0,也就是this.a.b(arg5.obj);

再跟一下。

 

 

这里的是我们请求的v0_1,即需要post数据的json字符串,可以看到保证code有数值,或者qq有数值即可。

然后走this.a(“ok”,v0_1);是正常绑定的流程,所以我们继续跟进去。

 

 

看到这两个红框标识的位置,我们保证刚才传过去的字符串包含ok,而json数据中包含上面提到的code数值,以及uuid数值即可,这就是bind的过程,即绑定uuid的过程。测试一下。

我们简单截图一下:

 

 

下面是请求访问成功的截图。

 

 

这里绑定好uuid之后,后面的请求我们按部就班地跟着分析就行,没有什么难度了。

 

比如getapplist协议,getappInfo协议。

 

 

 

获取手机安装的app列表信息不算太可怕。

我们往下分析。

 

 

 

根据名称,我们推测一条是下载安装app的,另外一条是在手机上显示对话框的。

访问构造参数根据代码分析一下就好,这里就不贴了。

直接发一下测试结果。

 

 

 

好了,这样就测试完毕了。因为这里下载,安装,没有走su的流程,也就是没有使用静默安装的,而是调用的系统安装页面,所以是上图所示。

 

0x6.安全建议

 

1).使用RSA加密操作,对所有的请求进行RSA加密,然后本地存储RSA公钥进行身份验证。

2).去除这部分命令执行功能,使用应用层的intent实现打开网页。

3).监听0.0.0.0的端口转为127.0.0.1,或给相关执行动作加入用户安全提示,需用户允许才能打开网页。

 

0x7.关于作者

 

ggz,360信息安全部-vulpecker team

 

360 vulpecker team隶属于信息安全部,专注于研究安卓安全,研究方向重点为安卓APP安全和安卓系统安全。开发并维护了免费的在线Android应用安全扫描服务 appscan.360.cn ,方便了众多移动应用开发者。

该团队发现了安卓通用型拒绝服务漏洞,影响市面上几乎所有的安卓产品,该通用型本地拒绝服务可以造成大面积的app拒绝服务。还发现了安卓APP新型通用安全漏洞“寄生兽”,安卓系统下包括支付宝、高德、微信等超过千万个APP都可能存在这一漏洞。在kcon等安全大会上发表演讲,公开了多款手机浏览器的远程溢出漏洞和众多流行手机应用的远程攻击漏洞研究成果。

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设备.这些漏洞需要通过受影响的厂商来解决,相关的问题细节需要厂商来提供.

  • 受影响进程列表