DEF CON 21:IP地址驗證漏洞影響Go和Rust語言
net庫爆混合格式的IP地址驗證漏洞,影響Go和Rust語言。
"net"庫是Go和Rust語言中常用的庫函數(shù)。近日,Cheng Xu等研究人員在DEF CON大會介紹了Go和Rust語言中的net模塊安全漏洞。漏洞CVE編號分別為CVE-2021-29922 (Rust)和CVE-2021-29923 (Golang),漏洞產(chǎn)生的原因是net處理混合格式的IP地址方式上存在問題,即當數(shù)字IPv4地址中以0開頭時會觸發(fā)漏洞。該漏洞影響Go和Rust語言。依賴net庫的應用可能會受到服務器端請求偽造(SSRF)和遠程文件包含(RFI)攻擊。
研究人員在GitHub上搜索關鍵字"import net",發(fā)現(xiàn)依賴該net庫的GO語言程序就有超過400萬個。
IP地址可以以多種形式來表示,其中包括十六進制數(shù)和整數(shù),不過一般我們看到的IPv4地址都是整數(shù)格式的,比如104.20.59.209。如果標稱八進制就是0150.0024.0073.0321。

Chrome自動補全0開頭的IP地址
在net庫中,所有IP地址開頭的0都會被移除和丟棄。根據(jù)IETF的原始說明,如果IPv4地址的前綴有0,那么可以理解為是八進制。但是Go和rust語言的net模塊都忽略了這一點,并將其作為十進制數(shù)來處理。
因此,如果開發(fā)者使用net庫來驗證IP地址是否屬于某個特定的范圍,比如訪問控制列表ACL中的IP列表,結果可能就會出現(xiàn)錯誤。

Rust net模塊將混合格式的IP地址以十進制處理的PoC代碼
這一錯誤處理可能會引發(fā)應用中服務器端請求偽造(SSRF)和遠程文件包含(RFI)攻擊。
受影響的應用和語言
Go和Rust并不是唯二受該漏洞影響的語言。該混合格式IP地址驗證漏洞之前就影響了Python的ipaddress庫(CVE-2021-29921)、netmask實現(xiàn)(CVE-2021-28918、CVE-2021-29418)和其他庫函數(shù)。
目前,golang的net模塊已經(jīng)在v 1.17版本中發(fā)布了該漏洞的安全補丁。Rust也在v 1.53.0版本中包含了該漏洞的安全補丁。

Rust語言補丁
本文翻譯自:https://www.bleepingcomputer.com/news/security/go-rust-net-library-affected-by-critical-ip-address-validation-vulnerability/如若轉載,請注明原文地址。