一、漏洞介绍
该漏洞主要是由于Windows TCP/IP堆栈在处理选项类型为25(0x19,递归DNS服务器选项)且长度字段值为偶数的ICMPv6的路由广播数据包时,处理逻辑存在纰漏,导致存在远程代码执行漏洞。成功利用该漏洞的攻击者可以在目标机器(主机或服务器)上执行任意代码。
影响范围:
• Microsoft Windows 10 1709
• Microsoft Windows 10 1803
• Microsoft Windows 10 1809
• Microsoft Windows 10 1903
• Microsoft Windows 10 1909
• Microsoft Windows 10 2004
• Microsoft Windows Server 2019
• Microsoft Windows Server, version 1903
• Microsoft Windows Server, version 1909
• Microsoft Windows Server, version 2004
二、漏洞浅析
当Windows TCP / IP堆栈不正确地处理使用选项类型25(递归DNS服务器选项)且长度字段值为偶数的ICMPv6路由器广告数据包时,存在一个远程执行代码漏洞。在此选项中,长度以8个字节为增量进行计数,因此长度为3的RDNSS选项的总长度应为24个字节。该选项本身包含五个字段:IPv6递归DNS服务器的类型,长度,保留,生存时间和地址。前四个字段始终总共为8个字节,但最后一个字段可以包含可变数量的IPv6地址,每个IPv6地址均为16个字节。按照RFC 8106,长度字段应始终为至少3的奇数值,当提供一个偶数长度值时,Windows TCP / IP堆栈错误地将网络缓冲区的前进量减少了8个字节。这是因为堆栈在内部以16字节为增量进行计数,因此无法解决使用非RFC兼容长度值的情况。这种不匹配导致堆栈将当前选项的最后8个字节解释为第二个选项的开始,最终导致缓冲区溢出和潜在的RCE。
三、漏洞复现
复现步骤
1、 虚拟机网络设置开启ipv6
2、查看环境情况
Windows版本,按win+r,在弹出窗口中输入winver,查看版本信息
3、用国外大神的脚本进行检测有漏洞和没漏洞的结果如下:
PowerShell.exe -ExecutionPolicy UnRestricted -File C:\Users\user\Desktop\new.ps1.ps1
4、执行ipconfig,查看ipv6地址这里注意,靶机的ipv6地址选取 “ipv6地址” 或 “临时ipv6地址”
5、执行ipconfig,查看ipv6地址这里注意,攻击机的ipv6地址选取 “本地ipv6地址
6、运行plyload,靶机蓝屏
poc原理:
由于Windows TCP/IP堆栈在处理选项类型为25(0x19,递归DNS服务器选项),当伪造长度字段值为偶数的ICMPv6的路由广播数据包发送给目标主机时,Windows TCP/IP 在检查包过程中会根据Length来获取每个包的偏移,遍历解析,导致对 Addresses of IPv6 Recursive DNS Servers 和下一个 RDNSS 选项的边界解析错误,从而绕过验证,将攻击者伪造的option包进行解析,造成栈溢出,从而导致系统崩溃。
四、修复方法
(1)下载微软官方提供的补丁:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-16898
(2)内网等不便安装更新的用户,可以使用微软官方给出的临时变通措施:
禁用 ICMPv6 RDNSS:
以管理员身份打开PowerShell,输入以下命令,即可”显示接口参数”
netsh int ipv6 show interface
可以根据此列表,查询到需要禁用的接口,执行禁用命令如下
netsh int ipv6 set int 8 rabaseddnsconfig=disable
返回“确定”后禁用成功,开启方法同上。上述操作均无需重启电脑。
来源:freebuf.com 2020-11-11 09:41:59 by: 龙渊实验室LongYuanLab
请登录后发表评论
注册