CVE-2019-0726:Win10 DHCP客户端RCE漏洞

ang010ela 漏洞 2019年5月1日发布
Favorite收藏

导语:为了利用该漏洞,攻击者可以向客户端发送精心设计的DHCP响应。安全更新通过更正Windows DHCP客户端如何处理某些DHCP响应来解决该漏洞

2019年1月,微软发布补丁修复了Windows系统中DHCP客户端的一个漏洞。攻击者可以发送伪造的DHCP响应来在受影响的系统上获取代码。引发该漏洞的根本原因在于可能导致DHCP客户端服务分配长度为0的堆缓存的恶意Domain Search选项。因为该缓存的长度为0,所以写入该缓冲区就会导致越界。

漏洞分析

Trend Micro研究人员Saran Neti发现了该漏洞的一个新变种。在新变种中,恶意Domain Search选项是以0长度的域名长度开始的,编码为\x00,表明长度为0,恶意Domain Search选项示例如,\x00\x07example\x03com\x00\x00。编码了2个域名字符串,第一个长度为0,第二个值为example.com。DHCP客户端代码无法正确处理。在分析选项数据时,会在输出缓存的0xffffffff处写一个逗号字符。该逗号是特定域名之间的分隔符。

代码分析

源代码如下:

pic1.png

上面的代码段从输入缓存中复制了一个域名到输出缓存中,一次一个label,比如www.microsoft.com会分成www,microsoft和com三次复制。而且在输出缓存中写一个period符号作为每个label的分隔符。最后,如果发现label长度为0,就表明该域名是完整的,代码会分支到00007fff`b0793d6f。

该问题会在上面代码的最后一行出现。在完整地复制域名到输出缓存后,代码会用逗号覆写最后的period,以准备复制其他的域名。在00007fff`b0793d85处,减1的目的是计算输出缓存中最近写入的字节的索引,这应该是最后一个period。但代码并不认为这可能是含有0 label的域名。在这种情况下,没有period被写入缓存中。如果这样的域名出现在源的开始部分, [rsi]中的index就会是0。减1会导致整数下溢,产生0xffffffff。因此,在00007fff`b0793d87处,逗号字符会被写入缓存开始的0xffffffff处。

PoC

为了证明该漏洞,需要用目标Windows虚拟机和攻击者虚拟机创建一个独立的网络。可以选择Linux作为攻击者虚拟机,安装ISC DHCP软件并分配一个与独立网络相连的接口上的IP地址。

可以用下面的配置来开始ISC DHCP服务:

pic2.png

<interface>表示的是独立网络的接口。

目标虚拟机应当安装没有安装3月份补丁的Windows 10 version 1803,研究人员测试的是v 17134.523 x64(含有2019年1月补丁)。

研究人员建议开始的时候将目标Windows虚拟机断开网络。启动虚拟机后,使用Global Flags启用svchost.exe上的Page Heap。然后,使用Process Explorer来定位含有 dhcpcore.dll的进程,并kill掉。这会产生一个启用了Page Heap的新的DHCP客户端svchost.exe进程。以管理员身份运行WinDBG或其他调试器。最后,给Windows虚拟机联网。当目标虚拟机通过DHCP请求新的IP地址时,DHCP客户端svchost.exe就会奔溃。

pic3.png

总结

微软已于2019年1月修复了该漏洞。该漏洞只影响Windows 10和Windows Server 2019,但不影响之前版本的操作系统。这表明DHCP可能在最新的操作系统版本中进行了重写。因此,DHCP的新实现中也可能会发现更多新的一些bug。

本文翻译自:https://www.thezdi.com/blog/2019/4/25/cve-2019-0726-an-rce-vulnerability-in-the-windows-10-dhcp-client如若转载,请注明原文地址: https://www.4hou.com/vulnerable/17758.html
点赞 7
  • 分享至
取消

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

扫码支持

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

发表评论