Windows IPv6 协议栈中的安全漏洞

安全 漏洞
微软在10月的补丁日修复了87个安全漏洞,其中一个是Windows IPv6 协议栈中的安全漏洞。漏洞CVE编号为cve-2020-16898,CVSS评分为9.0分。攻击者可以利用恶意伪造的包在远程系统上执行任意代码。

 微软在10月的补丁日修复了87个安全漏洞,其中一个是Windows IPv6 协议栈中的安全漏洞。漏洞CVE编号为cve-2020-16898,CVSS评分为9.0分。攻击者可以利用恶意伪造的包在远程系统上执行任意代码。

[[346425]]

PoC代码非常简单,可以引发Windows系统蓝屏,表明能够绕过Windows 10和Windows server2019 补丁的攻击者就可以利用漏洞。因为漏洞利用实现远程代码执行的效应可以广泛传播,因此漏洞的影响也非常大,该漏洞可以实现蠕虫般传播。研究人员将该漏洞命名为“Bad Neighbor”,因为该漏洞位于ICMPv6 的邻居发现协议,使用的是Router Advertisement 类型。

技术细节

由于Windows TCP/IP 栈不当处理使用Option Type 25 (Recursive DNS Server Option) 和length 域为偶数的ICMPv6 Router Advertisement 包,会引发该漏洞。在该option 中,length 的计数是递增8字节,所以length为3时,总的长度应该是24字节。该option本身含有5个域:Type, Length, Reserved, Lifetime, Addresses of IPv6 Recursive DNS Servers。前4个域总共只有8个字节,而最后一个域含有IPv6 地址数目的变量,每个IPv6 地址为16字节。根据RFC 8106,length 域是大于等于3的奇数:

当IPv6 主机通过RA 消息接收DNS option时,会按照如下规则处理相关的option:

DNS option的有效性通过length 域来检查。RDNSS option 中的Length field的值大于等于最小值3,并满足(Length - 1) % 2 == 0。

如果是一个偶数的length 值,Windows TCP/IP 栈就会错误地按8字节增加网络缓存。这是因为栈内部是以16字节递增的,无法处理不符合RFC 标准的length值。栈中错误匹配结果会将当前option 的最后8字节作为第二个option 的开始,引发栈溢出和潜在的远程代码执行。

为完整地实现该漏洞的利用链还需要Windows kernel中的内存泄露或信息泄露漏洞。

漏洞影响和补丁

该漏洞比较大的影响是Windows 10用户,因为启用了IPv6的服务器还比较少。

目前,微软已经发布了补丁,如果无法安装补丁,那么比较好的办法就是禁用IPv6。此外,还可以在网络边界拦截或丢弃ICMPv6 Router Advertisements。从PoC的情况来看,Windows Defender和Windows防火墙无法拦截PoC。目前还不清楚攻击在使用6to4 或 Teredo 这样的技术的网络中是否可以成功。

责任编辑:华轩 来源: 嘶吼网
相关推荐

2010-06-11 17:20:28

2010-06-21 15:18:19

IPv6协议栈

2010-05-26 14:49:06

IPv6协议栈

2010-06-02 10:34:47

IPv6协议栈

2010-06-01 13:52:03

IPv6协议路由协议

2010-05-26 14:12:06

IPv6协议

2010-05-26 13:58:58

IPv6协议栈

2010-06-09 11:15:57

IPv6协议栈无线传感器

2019-04-03 10:28:04

2010-06-08 17:30:56

IPv6协议栈

2010-05-26 14:56:05

IPv6协议栈

2017-01-22 20:03:57

2010-06-09 11:20:15

嵌入式IPv6协议栈

2010-05-26 15:23:00

IPv6协议栈

2010-09-09 16:37:32

IPv6协议栈无线传感器网络

2010-06-13 17:28:35

IPv6路由协议

2010-06-29 10:38:52

2010-06-07 16:58:51

linuxIPv6协议栈

2010-05-26 14:06:22

IPv6协议栈

2010-06-13 16:29:39

点赞
收藏

51CTO技术栈公众号