【漏洞通告】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/