CVE-2019-0547是今年微软修复的第一个漏洞,具体是系统中负责DHCP客户端服务的动态链接库dhcpcore.dll易受到DHCP reply包的攻击。
如果用户尝试连接到虚假DHCP服务器,攻击者就可以利用该漏洞来进行远程代码执行。
DHCP是当计算机连接到网络时用来动态分配IP地址的C/S协议。DHCP服务器监听着67
端口,并负责分配IP地址到DHCP客户端并分配TCP/IP配置到终端。
DHCP握手过程如下图所示:
在DHCP Offer
和DHCP Ack
之间,包中含有客户端加入网络所需的所有TCP/IP配置信息。DHCP ack
包的结构如下所示:
Options域有进行基本DHCP操作所需要的参数。其中一个是Domain Search
(type field
是119
)。
该option
与OFFER
和ACK
包一起传递给客户端来指定使用DNS解析主机名时使用的域名搜索列表。DHCP option
域的格式如下:
为了让searchlist
编码紧凑一点,searchlist
中的searchstrings
是连接在一起编码的。www.example.com 和dns.example.com这样的域名都编码成了:
而在dhcpcore.dll
的DecodeDomainSearchListData
函数中就存在着一个漏洞。DecodeDomainSearchListData
函数解码了编码的search list option
域中的值。在解码时,函数会计算解码的域名列表的长度,并分配内存并复制解码的列表。
恶意用户可以创建一个编码的search list
,比如当DecodeDomainSearchListData
函数解码时,生成的长度为0
。这会导致0
内存的heapalloc
,导致越界写。
补丁包含一个检查来确保到HeapAlloc
的size
参数不是0
。如果是0
,函数就会退出。
网络中的恶意DHCP服务器可以通过回复来自客户端的DHCP请求来利用该漏洞。恶意DHCP服务器也可以说用户连接的无线AP。成功利用该来的可以触发客户端中的代码执行,并控制系统。