Windows IPv6 协议栈中的安全漏洞

番茄系统家园 · 2022-05-25 00:25:34

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

Windows IPv6 协议栈中的安全漏洞

PoC代码非常简单,可以引发Windows系统蓝屏,表明能够绕过Windows 10和Windowsserver2019补丁的攻击者就可以利用漏洞。因为漏洞利用实现远程代码执行的效应可以广泛传播,因此漏洞的影响也非常大,该漏洞可以实现蠕虫般传播。研究人员将该漏洞命名为“BadNeighbor”,因为该漏洞位于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 DNSServers。前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。此外,还可以在网络边界拦截或丢弃ICMPv6RouterAdvertisements。从PoC的情况来看,WindowsDefender和Windows防火墙无法拦截PoC。目前还不清楚攻击在使用6to4 或Teredo 这样的技术的网络中是否可以成功。

免责声明: 凡标注转载/编译字样内容并非本站原创,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如果你觉得本文好,欢迎推荐给朋友阅读;本文链接: https://m.nndssk.com/dngz/332466pFziKp.html
猜你喜欢
最新应用
热门应用