根据最初披露的细节,这个问题存在于虚拟化软件的共享代码库中,该库在所有操作系统都支持。
利用该漏洞,攻击者可以实现虚拟机逃逸,到达Ring 3层,该层用于大多数用户程序运行代码,权限最少。
这个安全漏洞可以在配置了Intel PRO/1000 MT桌面(82540EM)网络适配器的虚拟机上使用,采用网络地址转换(NAT)模式,这是允许客户系统访问外部网络的默认设置。
而[Intel PRO/1000 MT桌面(82540EM)]网卡有一个漏洞,允许虚拟机上具有管理员权限的攻击者逃逸到物理机上的ring 3层。然后攻击者可以使用现有的技术升级权限,通过/dev/vboxdrv从ring 3层升级到ring 0层。
理解漏洞如何工作的一个重要方面就是理解上下文描述符在数据描述符之前被处理。
研究人员详细描述了安全缺陷的机制,展示了如何触发必须的条件,以获得一个缓冲区溢出,而该缓冲区溢出可能被滥用,以逃脱虚拟操作系统的限制。
首先,他使用包描述符(允许网络适配器在系统内存中跟踪网络包数据的数据段)造成整数溢出。
然后利用这种状态将客户操作系统中的数据读入堆缓冲区,并导致溢出,从而导致重写函数指针;或导致堆栈溢出。
Zelenyuk编写的这个漏洞利用依赖于两个溢出条件。由于它提供对Ring 3层的访问,因此需要权限升级来控制物理机操作系统。
尽管这并非不可能,但攻击者必须利用另一个漏洞,以提升系统权限。
研究人员描述了利用他在VirtualBox中发现的0day的步骤,这些步骤肯定不适合编写脚本,因为它们需要更高级的技术知识。
缓冲区溢出总不是稳定的,大多数情况下会导致目标崩溃。但是,Zelenyuk说他的利用过程是“100%可靠的”,并且“它要么总是工作,要么从不工作,至于为什么,因为某些微妙的原因,我暂且不说明。”
他在Ubuntu 16.04和18.04上测试了自己的成果,并且都分别在都是86位和64位系统上测试的,配置都是默认的。成功的证明是下面的视频显示了在虚拟机操作系统中进行利用操作后,成功在物理机操作系统打开了一个shell。
这不是研究人员第一次公开VirtualBox中漏洞。今年早些时候,他报告了VirtualBox中的另一个安全漏洞。该漏洞影响力了5.2.10版本。但是,出于某种原因,Oracle在5.2.18版本中悄无声息地修复了这个问题,并且没有将发现和报告漏洞的工作归功于漏洞研究人员。
在今天报告的开头,Zelnyuk明确说明了促使他公开宣布0day的全部细节,然后才通知开发人员的原因。甲骨文过在去对其报告的不重视似乎在其中起到了一定作用。