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

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处写一个逗号字符。该逗号是特定域名之间的分隔符。

代码分析

源代码如下:

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

上面的代码段从输入缓存中复制了一个域名到输出缓存中,一次一个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服务:

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

<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就会奔溃。天空彩

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

总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值