【缝隙公告】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号