近日,一位俄罗斯的漏洞研究人员Sergey Zelenyuk曝光了一个VirtualBox的0day漏洞,他将该漏洞的细节和漏洞复现过程发在了网上,进行了详细的介绍说明。
根据披露的漏洞细节我们可以了解到,该漏洞存在于虚拟化软件的共享代码库中,也就是说,所有支持该软件的操作系统中都会受到这种漏洞的威胁。利用这个漏洞,攻击者可以脱离用户虚拟计算机的环境,从而进入到真实系统中,获得RING 3以及更高级别的权限。
从“虚”到“实”
Sergey Zelenyuk发现,这个漏洞适用于配置了网络地址转换(NAT)模式下的[英特尔PRO/1000 MT桌面(82540EM)]网络适配器的虚拟机,这个设置相信用过虚拟机的都知道,是用来让虚拟机和实体系统中的网络能够相互访问的。
问题的关键就在于这个[英特尔PRO/1000 MT桌面(82540EM)]上,它存在的漏洞,能够让攻击者获得root或管理员权限的甚至主机的RING 3权限,然后还可以继续通过/dev/vboxdrv将权限升级到RING 0。
Zelenyuk在报告中详细解释了漏洞的机制,以及描述了如何通过触发虚拟操作系统中的缓冲区溢出来达到攻击目的:
首先,因为数据段允许网络适配器去跟踪系统内存中的网络数据包,从而能够使用描述符引起数据包中的整数下溢。
然后利用此状态将来自用户操作系统的数据读入缓冲区并导致溢出情况,从而导致覆盖函数指针,或导致堆栈溢出的情况。
能够100%实现的漏洞?
这个漏洞的实现主要依靠两个溢出条件,但由于它初始只能提供对ring3级别的权限,因此仍需要再次提权才能取得对主机的控制。
Zelenyuk认为这个漏洞就属于绝对的“不友好”类型,因为不论是发现还是利用都需要一定的技术水平。
他表示,缓冲区溢出的状态并不一定稳定,多数时候会导致系统崩溃。然而,他依旧认为这个漏洞是100%可用的,他说,这个漏洞可用于否取决于一些二进制文件是否匹配。
在进行漏洞复现的过程中,他分别使用了默认配置的32位和64位的Ubuntu 16.04和18.04两个系统,成功验证了漏洞的可用性。
这并不是VirtualBox首次被曝出漏洞,此前该软件的5.2.10版本也曾出现过漏洞事件,但是上一次Oracle修复的非常快。
本次漏洞披露,Zelenyuk也清楚的说明了为什么选择直接曝光而不是先通知厂商,据说是因为他上报了多次而没有被采纳,导致他一怒之下公开了漏洞细节。
对此我们也只能说,惹谁不好,偏要惹黑客。