一位俄罗斯漏洞研究人员发布了关于VirtualBox中的0day漏洞的详细信息。他一步步解释这个漏洞的利用是如何实现的。链接:https://github.com/MorteNoir1/virtualbox\_e1000_0day
根据最初披露的细节,这个问题存在于虚拟化软件的共享代码库中,该库在所有操作系统都支持。
利用该漏洞,攻击者可以实现虚拟机逃逸,到达Ring 3层,该层用于大多数用户程序运行代码,权限最少。
将一个“溢出”变成另一个“溢出”
Sergey Zelenyuk发现这个安全漏洞可以在配置了Intel PRO/1000 MT桌面(82540EM)网络适配器的虚拟机上使用,采用网络地址转换(NAT)模式,这是允许客户系统访问外部网络的默认设置。
而[Intel PRO/1000 MT桌面(82540EM)]网卡有一个漏洞,允许虚拟机上具有管理员权限的攻击者逃逸到物理机上的ring 3层。然后攻击者可以使用现有的技术升级权限,通过/dev/vboxdrv从ring 3层升级到ring 0层。
Zelenyuk说,理解漏洞如何工作的一个重要方面就是理解上下文描述符在数据描述符之前被处理。
研究人员详细描述了安全缺陷的机制,展示了如何触发必须的条件,以获得一个缓冲区溢出,而该缓冲区溢出可能被滥用,以逃脱虚拟操作系统的限制。
首先,他使用包描述符(允许网络适配器在系统内存中跟踪网络包数据的数据段)造成整数溢出。
然后利用这种状态将客户操作系统中的数据读入堆缓冲区,并导致溢出,从而导致重写函数指针;或导致堆栈溢出。
100%可利用
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的全部细节,然后才通知开发人员的原因。甲骨文过在去对其报告的不重视似乎在其中起到了一定作用。
1.等待半年,直到漏洞被修补完。
2.在bug bounty中,这些行为都是被认可的:
1.等待一个多月,直到提交的漏洞得到验证,然后才作出购买或不购买的决定。
2.在整体流程中改变决定。今天你发现了漏洞奖励计划中软件的漏洞,一周后你就会发现你的漏洞和利用程序得到“不感兴趣”的回报。
3.没有急需的软件漏洞的价格的精确列表。漏洞奖励很随便,研究人员很尴尬。
4.漏洞没有精确的下限和上限的价格。影响价格的因素有很多,但研究人员需要知道什么值得研究,什么不值得。
3.夸大营销:命名漏洞并为它们创建网站;一年召开上千次会议;夸大自己作为安全研究员的工作重要性;认为自己是“世界的救世主”。
我因为前两点已经筋疲力尽了,所以我的举动是完全公开的。请把注意力放在信息安全。
原文链接:https://www.bleepingcomputer.com/news/security/virtualbox-zero-day-vulnerability-details-and-exploit-are-publicly-available/