新聞中心
本周在DEF CON大會(huì)上,由多名安全研究人員披露十進(jìn)制和八進(jìn)制混合IP地址解析漏洞,多種語(yǔ)言受影響,包括Go和Rust的官方類庫(kù)net。以及Python的標(biāo)準(zhǔn)庫(kù)ipaddress。

概述
Go和 Rust語(yǔ)言中常用的net庫(kù),受到混合格式IP 地址驗(yàn)證漏洞的影響。該漏洞源于庫(kù)中對(duì)IP地址處理時(shí)候?qū)诉M(jìn)制-十進(jìn)制)格式混合格式的八進(jìn)制的數(shù)據(jù)當(dāng)作十進(jìn)制有關(guān)。
所有使用這次基礎(chǔ)庫(kù)的應(yīng)用程序可能會(huì)受到不確定的服務(wù)器端請(qǐng)求偽造(SSRF) 和遠(yuǎn)程文件包含(RFI) 漏洞的攻擊。
因?yàn)樵摶A(chǔ)庫(kù)被廣使用,所以大量的Go,Rust網(wǎng)絡(luò)應(yīng)用都受到影響。
另外,Python 標(biāo)準(zhǔn)庫(kù)ipaddress也受漏洞影響。
漏洞原理
漏洞CVE編號(hào)為CVE-2021-29922(Rust庫(kù))和 CVE-2021-29923(Golang庫(kù)),主要在其同名類庫(kù)net處理混合格式的IP地址,或者更具體地說(shuō),當(dāng)十進(jìn)制IPv4 地址包含數(shù)據(jù)以0開始時(shí)。
眾所周知,IP地址可以用多種格式表示,包括十六進(jìn)制和整數(shù),盡管最常見(jiàn)的IPv4地址以十進(jìn)制格式表示。
比如8.8.8.8
該地址可以用八進(jìn)制格式表示為 0010.0010.0010.0010。
我們?nèi)粘W畛S玫囊粋€(gè)本地IP地址(回環(huán)地址,localhost)為127.0.0.1。 假如對(duì)其第一部分IP地址添加一個(gè)0,則0127.0.0.1 會(huì)被解析為啥呢?
我們?cè)跒g覽器中輸入這個(gè)地址。在火狐瀏覽器的地址欄中輸入0127.0.0.1,瀏覽器將其自動(dòng)轉(zhuǎn)化為八進(jìn)制格式 。
其他瀏覽器也是如此,比如谷歌Chrome:
根據(jù)IETF草案,如果前綴為“0”,則 IPv4 地址的部分可以解釋為八進(jìn)制。但是,在net庫(kù)中,任何前置零的地址都被簡(jiǎn)單地剝離和丟棄。
在Golang和Rust的net模塊中將IPv4地址的八位字節(jié)都被簡(jiǎn)單視為十進(jìn)制。 因此,如果開發(fā)人員使用net來(lái)驗(yàn)證IP地址是否屬于某個(gè)范圍(例如,根據(jù)訪問(wèn)控制列表 (ACL) 解析IP列表),對(duì)于基于八進(jìn)制的IPv4地址表示,結(jié)果可能會(huì)完全錯(cuò)誤。
這樣可能會(huì)導(dǎo)致應(yīng)用程序中出現(xiàn)不確定的服務(wù)器端請(qǐng)求偽造 (SSRF)和遠(yuǎn)程文件包含(RFI)漏洞。
漏洞影響
由于net庫(kù)在Golang和Rust語(yǔ)言中均為核心庫(kù),被大量應(yīng)用所依賴,通過(guò)在Github上簡(jiǎn)單搜索,僅golang中依賴該庫(kù)的代碼文件超超過(guò)49w。
而且Go和Rust不是唯一受該漏洞影響的語(yǔ)言,還有Python語(yǔ)言的ipaddress 庫(kù) (CVE-2021-29921)、 netmask庫(kù) (CVE-2021-28918、CVE-2021-29418) 和等類似的庫(kù)也受影響。
該系列漏洞大多都被評(píng)為有高或嚴(yán)重的嚴(yán)重性。
漏洞解決
目前 Golang 的 net 模塊將補(bǔ)丁將在Golang 1.17 版中發(fā)布。
對(duì)于 Rust net里,也已經(jīng)有一個(gè)修復(fù)程序已經(jīng)合并:
請(qǐng)使用這些類庫(kù)的同學(xué),關(guān)注官方漏洞發(fā)布及時(shí)更新版本。
本文標(biāo)題:混合進(jìn)制IP地址解析漏洞,Go,Rust語(yǔ)言net類庫(kù)受影響
文章源于:http://m.fisionsoft.com.cn/article/ccdhccs.html


咨詢
建站咨詢
