导语:俄罗斯安全研究人员公布了VirtualBox 0 day漏洞的详情,并解释了如何一步步的利用该bug。
俄罗斯安全研究人员公布了VirtualBox 0 day漏洞的详情,并解释了如何一步步的利用该bug。
该漏洞位于虚拟化软件的共享代码基中,在所有支持的操作系统中都存在。攻击者利用该漏洞可以从guest机器的虚拟环境中逃逸出来,到达最小权限的Ring 3权限层,该层用于大多数的用户程序运行代码。
将一个溢出变成另一个
研究人员Sergey Zelenyuk发现该漏洞可以在Intel PRO/1000 MT Desktop (82540EM)网络适配器上配置了NAT模式的虚拟机上被利用,默认设置允许guest系统访问外部网络。
Intel PRO/1000 MT Desktop (82540EM)存在漏洞,攻击者可以在guset中以root/administrator权限逃逸到host ring3。然后攻击者可以用已有的技术通过/dev/vborxdrv提升权限到ring 0,具体见技术writeup。
想要了解漏洞工作原理最重要的就是理解上下文描述器在数据描述器前是如何被处理的。下面是漏洞的详细情况,即如何触发必要的条件来获取缓冲区溢出,以此跳出虚拟操作系统的限制:
· 首先,用packet descriptors来触发整数下溢条件,数据分段允许网络适配器记录系统内存中的包数据。
· 然后,该状态被用于从guest操作系统读取数据到堆缓冲区中,引发溢出条件导致覆写函数指针,或引发栈溢出条件。
100%可靠的利用
漏洞利用依赖两个溢出条件。因为提供到Ring 3级的访问权限,因此如果要控制整个主机操作系统必须进行权限提升。
虽然这是不可能的,但攻击者同时利用了另一个漏洞,可以达到权限提升的目的。
缓冲区溢出一般来说并不稳定,大多数情况下会导致目标系统奔溃。但Zelenyuk称他的漏洞利用是100%可靠的。他在Ubuntu 16.04和18.04,32位和64位操作系统上以默认配置进行了测试,测试结果表明漏洞利用可以运行在guest操作系统上,并在主机操作系统上执行shell,demo视频。
研究人员Zelnyuk称在通知开发者之前就选择公布0 day漏洞的原因是Oracle过去修复漏洞的速度非常慢。
技术writeup参见:https://github.com/MorteNoir1/virtualbox_e1000_0day