【误差通告】TCP/IP协议栈误差AMNESIA:33
宣布时间 2020-12-100x00 误差概述
2020年12月08日,Forescout实验室宣布了4个开源TCP/IP协议栈中被统称为AMNESIA:33的33个误差。这些误差的严重性已经凌驾了通例清静规模,并且一直延伸到开发级别。
0x01 误差详情

之前披露出的在Treck TCP/IP协议栈中发明的19个0day误差(统称为Ripple20 误差)袒露了重大物联网供应链中的多个误差,影响了多个行业的数百万台装备。
研究职员体现,受Ripple20 误差的启发,他们剖析了其它个7个TCP/IP 协议栈的清静性,以从中找到类似的误差。
因此他们今年在“Project Memoria”项目中使用自动化模糊测试和手工代码检查发明了33个误差。其中,在uIP中发明了13个误差,picoTCP中发明了10个误差,FNET和Nut/Net中各发明5个误差。

AMNESIA:33会影响DNS、IPv6、IPv4、TCP、ICMP、LLMNR和mDNS等7个差别的组件,其影响包括远程代码执行、拒绝服务、信息走漏、DNS缓存中毒等,受影响的组件如下:

这些误差预计影响150多家供应商和数百万装备,涉及嵌入式装备的操作系统、芯片系统、网络装备、OT装备以及大宗企业级和消耗级IoT装备。

AMNESIA:33误差列表如下:
CVE-ID | 形貌 | 受影响产品/组件 | 类型 | 评分 |
CVE-2020-13984 | 用于处置惩罚IPv6扩展报头和扩展报头选项的函数可以由于未检查报头/选项的长度而进入无限循环状态。 | Ext. header parsing in IPv6 (6LoWPAN) | DoS | 7.5 |
CVE-2020-13985 | 当剖析报头中提供的值时,用于破解RPL扩展报头的函数不会检查不清静的整数转换,从而允许攻击者破损内存。 | Ext. header parsing in IPv6 | DoS | 7.5 |
CVE-2020-13986 | 用来破解RPL扩展报头的函数不检查吸收到的RPL扩展报头的长度值,允许攻击者将其放入无限循环中。 | Ext. header parsing in IPv6 (6LoWPAN) | DoS | 7.5 |
CVE-2020-13987 | 剖析传入传输层数据包(TCP/UDP)的功效不检查数据包头的长度字段与数据包中可用的数据。 | TCP/UDP checksum calculation in IPv4 | DoS 、信息泄露 | 8.2 |
CVE-2020-13988 | 给定恣意长度,在校验和盘算时代可能执行越界内存读取。 | TCP options parsing in IPv4 | DoS | 7.5 |
CVE-2020-17437 | 在处置惩罚TCP紧迫数据时,对紧迫数据指针的值不举行有用检查,从而允许攻击者通过提供恣意的数据破损内存TCP数据包中的紧迫数据指针偏移量。 | TCP packet processing | DoS | 8.2 |
CVE-2020-17438 | 重新组装碎片包的代码不验证其IP报头中指定的传入包的总长度,以及IP报头中指定的碎片偏移值。这可能会导致内存损坏。 | Fragmented packet reassembly in IPv4 | DoS | 7.0 |
CVE-2020-17439 | 纵然没有传出的盘问,DNS客户端也会剖析传入的DNS应答。DNS事务ID不是完全随机的。若是DNS缓存很是小(4个条目),这容易受到DNS缓存中毒攻击。 | DNS response processing | DNS缓存中毒 | 8.1 |
CVE-2020-17440 | 剖析传入的DNS数据包时,不检查域名是否为空终止。这使得攻击者可以通过全心设计的DNS响应来破损内存。 | DNS domain name decoding | DoS | 7.5 |
CVE-2020-24334 | 处置惩罚DNS响应的代码不检查DNSpacket报头中指定的响应数目是否与DNS包中可用的响应数据相对应,从而允许攻击者破损内存。 | DNS response processing | DoS | 8.2 |
CVE-2020-24335 | 剖析域名的功效缺少boundschecks,允许攻击者用全心设计的DNS包破损内存。 | DNS domain name decoding | DoS | 7.5 |
CVE-2020-24336 | 剖析通过NAT64发送的DNS响应包中的DNS纪录的代码不验证响应纪录的长度字段,允许攻击者破损内存。 | DNS response parsing in NAT64 | RCE | 9.8 |
CVE-2020-25112 | 对IPv4/IPv6报头长度的检查不敷,或对ipv6报头扩展长度的检查纷歧致,使得攻击者可以破损内存。 | ICMPv6 echo/reply processing | RCE | 8.1 |
CVE-2020-17441 | IPv6扩展报头的Payload长度字段不检查传入数据包中的可用数据,允许攻击者破损内存。 | Ext. header parsing in IPv6, ICMPv6 checksum | DoS 、信息泄露 | 7.5 |
CVE-2020-17442 | 处置惩罚IPv6数据包的扩展报头的函数和它的选项缺乏对报头长度字段的检查,允许攻击者通过提供恣意长度值将函数放入一个无限循环。 | Ext. header parsing in IPv6 | DoS | 7.5 |
CVE-2020-17443 | 在处置惩罚ICMPv6 echo请求时,不检查ICMPv6报头是否包括至少8个字节(由RFC443设置)。这将导致基于吸收到的请求建设ICMPv6 echo响应的函数,该函数具有较小的报头,从而破损内存。 | ICMPv6 echo request processing | DoS | 8.2 |
CVE-2020-17444 | 处置惩罚IPv6报头的函数不检查扩展报头的长度选项,允许攻击者使用全心设计的长度值将这个函数放入一个无限循环中。 | Ext. header parsing in IPv6 | DoS | 7.5 |
CVE-2020-17445 | 处置惩罚IPv6 DestinationOptions扩展头的函数不检查其选项长度的有用性,允许攻击者破损内存或将函数放入一个具有全心设计的长度值的无限循环。 | Ext. header parsing in IPv6 | DoS | 7.5 |
CVE-2020-24337 | 处置惩罚TCP选项的函数不验证它们的长度,这使得攻击者可以将处置惩罚不常见或不支持的TCP选项的函数放入一个无限循环中,这些TCP选项都有自己的长度值。 | TCP options parsing in IPv4 | DoS | 7.5 |
CVE-2020-24338 | 剖析域名的功效缺少boundschecks,允许攻击者用全心设计的DNS包破损内存。 | DNS domain name decoding | RCE | 9.8 |
CVE-2020-24339 | 剖析域名的功效缺少boundschecks,允许攻击者用全心设计的DNS包破损内存。 | DNS domain name decoding | DoS | 7.5 |
CVE-2020-24340 | 处置惩罚DNS响应的代码不检查DNSpacket报头中指定的响应数目是否与DNS包中可用的响应数据相对应,从而允许攻击者内存破损。 | DNS response processing | DoS 、信息泄露 | 8.2 |
CVE-2020-24341 | TCP输入数据处置惩罚功效不验证传入TCP数据包的长度,允许攻击者读取越界并破损内存 | TCP packet processing | DoS 、信息泄露 | 8.2 |
CVE-2020-17467 | 剖析LLMNR请求时,不检查域名是否为空终止。这可能会让攻击者读取越界。 | LLMNR state machine | 信息泄露 | 8.2 |
CVE-2020-17468 | 处置惩罚IPv6 Hop-by-Hop扩展报头的功效不检查其选项长度的有用性,允许攻击者破损内存。 | Ext. header parsing in IPv6 | DoS | 7.5 |
CVE-2020-17469 | IPv6数据包重组功效不检查收到的碎片是否在内存中准确对齐,允许攻击者执行其全心制作的IPv6碎片数据包。 | Fragmented packet reassembly in IPv6 | DoS | 5.9 |
CVE-2020-17470 | 初始化DNS客户端接口结构的代码没有设置足够的随机transactionid(它们总是被设置为1),容易遭受DNS缓存中毒攻击。 | DNS response processing | DNS缓存中毒 | 4.0 |
CVE-2020-24383 | 剖析传入的mDNS数据包时,不检查域名是否为空终止。这允许攻击者实现内存损坏或内存走漏。 | DNS domain name decoding | DoS 、信息泄露 | 6.5 |
CVE-2020-25107 | 处置惩罚DNS问题或响应的代码:(1)不检查域名是否为空终止;(2)不检查DNS响应数据长度(可从数据包中恣意设置);(3) DNS盘问或响应的次数(在DNS报头中设置)没有与目今数据举行核对;(4) DNS盘问或响应中adomain name的长度字节不被检查,用于内部内存操作。 | DNS domain name decoding/ DNS response processing | DoS | 7.5 |
CVE-2020-25108 | DoS | 7.5 | ||
CVE-2020-25109 | DoS | 8.2 | ||
CVE-2020-25110 | DoS | 8.2 | ||
CVE-2020-25111 | RCE | 9.8 |
其中4个严重的远程代码执行误差如下:
Nut/Net远程代码执行误差(CVE-2020-25111)
由于Nut/Net处置惩罚DNS和响应代码时保存清静问题,攻击者可使用此误差远程执行代码。该误差CVSS评分9.8。
picoTCP远程代码执行误差(CVE-2020-24338)
由于picoTCP剖析域名的函数缺乏界线检查,攻击者可以通过伪造的DNS数据包来破损内存,最终可以远程执行代码。该误差CVSS评分9.8。
uIP远程代码执行误差(CVE-2020-24336)
由于通过NAT64发送的DNS响应数据包中剖析DNS纪录的代码没有验证响应纪录的长度字段,攻击者可以使用此误差来破损内存,最终远程执行代码。该误差CVSS评分9.8。
uIP远程代码执行误差(CVE-2020-25112)
该误差是对IPv4/IPv6头长度检查缺乏或对IPv6头扩展长度检查纷歧致导致的,攻击者可使用此误差来破损内存,最终远程执行代码。该误差CVSS评分8.1。
0x02 处置惩罚建议
现在Contiki-NG、PicoTCP-NG、FNET和Nut/Net已经宣布了相关补丁,uIP、Contiki和PicoTCP暂未宣布补丁。
建议接纳如下缓解步伐:
危害评估:危害评估以识别内部潜在威胁(如易受攻击的装备、装备的通讯路径、在互联网上的袒露情形等)。
使用内部DNS服务器:由于AMNESIA:33中的几个误差与DNS有关,以是只管使用内部DNS服务器,并亲近监视来自外部的DNS流量。
阻止或禁用不须要的IPv6流量:由于AMNESIA:33中的多个误差与IPv6组件有关,因此建议阻止或禁用不须要的IPv6网络流量。
网络分段:网络分段来最洪流平地镌汰网络在Internet上的袒露情形。
监视异常数据包:关注网络流量中名堂过失或异常的数据流和数据包(如字段长度缺乏格或校验和失败等)。
0x03 参考链接
https://www.forescout.com/company/resources/amnesia33-how-tcp-ip-stacks-breed-critical-vulnerabilities-in-iot-ot-and-it-devices/
https://www.forescout.com/research-labs/amnesia33/
https://searchsecurity.techtarget.com/news/252493283/Forescout-reports-33-new-TCP-IP-vulnerabilities
0x04 时间线
2020-12-08 Forescout披露误差
2020-12-10 VSRC宣布清静通告
0x05 附录
CVSS评分标准官网:http://www.first.org/cvss/



京公网安备11010802024551号