CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab

一、漏洞介绍

该漏洞主要是由于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

图片[1]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

2、查看环境情况

Windows版本,按win+r,在弹出窗口中输入winver,查看版本信息

图片[2]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科图片[3]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

3、用国外大神的脚本进行检测有漏洞和没漏洞的结果如下:

PowerShell.exe -ExecutionPolicy UnRestricted -File C:\Users\user\Desktop\new.ps1.ps1

图片[4]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

图片[5]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

4、执行ipconfig,查看ipv6地址这里注意,靶机的ipv6地址选取 “ipv6地址” 或 “临时ipv6地址”

图片[6]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

5、执行ipconfig,查看ipv6地址这里注意,攻击机的ipv6地址选取 “本地ipv6地址

图片[7]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

6、运行plyload,靶机蓝屏

图片[8]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科图片[9]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

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

图片[10]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

可以根据此列表,查询到需要禁用的接口,执行禁用命令如下

netsh int ipv6 set int 8 rabaseddnsconfig=disable

图片[11]-CVE-2020-16898漏洞复现及修复 – 作者:龙渊实验室LongYuanLab-安全小百科

返回“确定”后禁用成功,开启方法同上。上述操作均无需重启电脑。

原文链接

来源:freebuf.com 2020-11-11 09:41:59 by: 龙渊实验室LongYuanLab

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论