2020年Pwn2Own中VMware虚拟机逃逸最新UAF漏洞分析(CVE-2020-3947) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

2020年Pwn2Own中VMware虚拟机逃逸最新UAF漏洞分析(CVE-2020-3947)

h1apwn 漏洞 2020-04-06 10:20:00
1027296
收藏

导语:在此文章中,我们研究了CVE-2020-3947,该漏洞由一位匿名研究人员于12月下旬提交给ZDI程序。

自2016年在Pwn2Own引入虚拟化软件以来,guest-to-host 虚拟机逃逸漏洞一直是比赛的亮点,今年的比赛也不例外。全年,其他guest-to-host 虚拟机逃逸漏洞也都通过ZDI计划进行。实际上,VMware 在今年比赛之前一周发布了针对此漏洞的补丁程序。在此文章中,我们研究了CVE-2020-3947,该漏洞由一位匿名研究人员于12月下旬提交给ZDI程序(ZDI-20-298)。该漏洞影响VMware Workstation的DHCP服务器组件,并且可能允许攻击者从guest操作系统上提升特权并在host操作系统上执行代码。

 https://www.vmware.com/security/advisories/VMSA-2020-0004.html
 
 https://www.zerodayinitiative.com/advisories/ZDI-20-298/

0x01 动态主机配置协议(DHCP)

动态主机配置协议(DHCP)用于通过在DHCP客户端和服务器之间交换DHCP消息来动态分配和管理IP地址。DHCP消息包括DHCPDISCOVER,DHCPOFFER,DHCPRELEASE和其他一些消息。

所有DCHP消息均以以下通用头结构开头:

图1-DHCP标头结构

该选项 DHCP消息的字段包含序列的选项字段。

选项字段的结构如下:

图2-选项字段结构

所述optionCode字段定义选项的类型。对于DHCP消息类型和客户端标识符选项,optionCode的值分别为0x35和0x3d 。

DHCP消息必须包含一个DHCP消息类型选项。对于DHCP消息类型选项,optionLength字段的值为1,而optionData字段指示消息类型。值1表示DHCPDISCOVER消息,而值7表示DHCPRELEASE消息。这是对该漏洞很重要的两种消息类型。客户端广播DHCPDISCOVER以获取IP地址,然后客户端发送DHCPRELEASE放弃IP地址。

0x02 漏洞分析

在VMWare中,vmnetdhcp.exe模块为guest计算机提供DHCP服务器服务,此启动项作为Windows服务安装。当反复向易受攻击的DHCP服务器发送DHCPDISCOVER消息和随后的DHCPRELEASE消息时,就会出现攻击情况。

在处理DHCPRELEASE消息期间,DHCP服务器调用vmnetdhcp! supersede_lease(vmnetdhcp+0x3160)。supersede_lease。然后,该函数将数据从一个结构复制到另一个结构。这个结构包含诸如已分配的客户端IP地址,客户端硬件地址,期限,状态等信息。

完整的结构如下:

图3-结构

对于此漏洞,uid和uid_len字段很重要。UID字段指向从包含字符串的数据的缓冲器optionData所述的客户端标识符的选项,所述uid_len*字段指示该缓冲区的大小。

supersede_lease首先检查由源和目标的各自uid字段指向的字符串数据是否相等。如果这两个字符串匹配,则该函数释放由源的uid字段指向的缓冲区。然后,supersede_lease调用write_lease(vmnetdhcp+016e0),并将目标租约作为参数传递,以写入内部表。

图4 –比较uid字段

图5-释放uid字段

在易受攻击的情况下,这意味着当服务器重复收到DHCPDISCOVER消息和DHCPRELEASE消息时,源结构和目标结构的各自uid字段实际上指向同一内存位置,该supersede_lease功能不检查这个条件。结果,当它释放源的uid字段指向的内存时,目标的uid指针将变为挂起指针。最终,当write_lease访问目标的uid字段时,将出现UAF漏洞条件。

图6-触发漏洞

0x03  漏洞补丁

VMware使用VMSA-2020-004修复了此漏洞以及两个严重性较轻的漏洞,CVE-2020-3947的补丁有一项更改:supersede_lease。

 https://www.vmware.com/security/advisories/VMSA-2020-0004.html

补丁比较supersede_lease在VMnetDHCP.exe版本15.5.1.50853与15.5.2.54704版本如下:

图7-BinDiff补丁比较

在supersede_lease的修补版本中,在执行源和目标的各个uid字段之间的字符串比较之后,它将执行新的检查,以查看各个uid字段是否实际上在引用同一缓冲区。如果是,则该函数跳过对free的调用。

由于没有列出解决方法,因此确保免受此漏洞影响的唯一方法是打补丁。

本文翻译自:https://www.zerodayinitiative.com/blog/2020/4/1/cve-2020-3947-use-after-free-vulnerability-in-the-vmware-workstation-dhcp-component如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务