1月17日,甲骨文公司发布新一期安全补丁修复公告,修复旗下产品安全漏洞,本次补丁更新中,修复了虚拟化产品Oracle VirtualBox软件的一个高危险漏洞(CVE-2017-3332),并向漏洞发现者360公司 Gear Team团队工程师公开致谢。
公告介绍,Oracle的产品VirtualBox在SVGA显卡模拟中存在堆溢出漏洞,该漏洞能造成拒绝服务和宿主机任意代码执行。在公告中,Oracle对该漏洞危险评分为8.4分,属于风险性较高的漏洞。
桌面虚拟化已经越来越成为IT专业人士的重要助手,他们经常在本地机器运行不同操作系统,比如在Mac电脑上运行专为Windows设计的软件。
对于IT专业人士而言,VMware Workstation和Oracle VirtualBox是创建和运行虚拟机的两个主要选择。Oracle VirtualBox广泛用于对Mac OS X、Solaris或32位Windows主机虚拟化,为用户提供实用的用户界面,简化虚拟机的构建、部署和管理。对于大型的虚拟机,VirtualBox的强大处理功能也毫不逊色,因此受到专业人士的青睐。
360Gear Team团队研究员李强发现,VirtualBox在SVGA显卡模拟中存在堆溢出漏洞,该漏洞能造成拒绝服务和宿主机任意代码执行,2016年12月2日,李强将漏洞报告给Oracle安全团队,该漏洞于今年1月获得修复。
360 Gear Team是360公司一支专注于云安全与互联网核心开源组件安全研究的新锐团队,2016年获QEMU、Xen、VirtualBox等虚拟化软件致谢65次,以及OpenSSL、NTP、Firefox等重要开源项目致谢49次,成立不到一年就荣获了上百次漏洞报告致谢。团队在保卫360自身内部业务安全的同时,也在守护互联网的安全。
时间线:
2017年1月17日正式在Oracle的Critical Patch Updates公布
2017年1月14日邮件通知预公布
2016年12月22日通知漏洞已修复
2016年12月3日Oracle回复确认邮件
2016年12月2日Qihoo 360Gear Team的 Li Qiang 将漏洞报告给Oracle安全团队
具体描述:
在VirtualBox的文件srcVBoxDevicesGraphicsDevVGA-SVGA.cpp中SVGA设备模拟在处理FIFO命令SVGA_CMD_REMAP_GMR2的过程中存在堆溢出漏洞。
左边是存在漏洞的文件,paNewPage64在堆上分配一块内存,大小由pGMR->cMaxPages指定,之后在一个循环中向该内存写入数据,通过pGMR->paDesc[i].numPages控制写入的数据。如果pGMR->cMaxPages比较小,但是pGMR->paDesc[i].numPages又比较大则会造成堆溢出。
进一步分析一下补丁。
首先看看pGMR->cMaxPages的限制。
pGMR->cMaxPages在修补之前可以由guest直接设置,只要长度大于VMSVGA_MAX_GMR_PAGES即可。在补丁之后,我们看到会有一个判断其是否小于pGMR->cbTotal/X86_PAGE_SIZE,这样就保证了pGMR->cMaxPages不会小于一定值。
继续看pGMR->paDesc[i].numPages的限制,在补丁之前,对该值是没有限制的,补丁只有也有一个最大的限制,即assertBreakStmt(desc.numPages <= cMaxPages, rc = VERR_OUT_OF_RANGE)附近。