他們在 Rust 和 Go 的網絡庫中發現了阻止 IP 驗證的漏洞

最近 漏洞信息已發布 在語言的標準庫中找到的 Rust and Go, 哪個是 與 IP 地址處理不當有關 在地址分析函數中使用八進制數字。

提到e這些漏洞允許您避免有效的地址檢查和n 應用程序,例如,在執行服務器端請求欺騙攻擊時組織對環回接口地址或內網子網的訪問。

這兩種語言的漏洞 IP 地址字符串在規範中有實現 從零開始,因為你是 理論上它們應該被解釋為八進制數,但是 導致這些故障的問題是許多圖書館忽略了這一點,只是丟棄了零,所以 他們最終將值視為十進制數。

例如,為了了解這些漏洞中 IP 地址的解釋方式,八進制數字 0177 是十進制數字 127,攻擊者可以使用它請求指定值“0177.0.0.1”的資源,因為它沒有被佔用作為八進制,十進製表示法是“127.0.0.1”。

這就是原因 在使用有問題的庫之一的情況下, 應用程序不會檢測地址的出現 0177.0.0.1 在子網 127.0.0.1 中,但實際上,在發送請求時,會調用地址“0177.0.0.1”,由於誤解,網絡功能會將其處理為 127.0.0.1。 類似地,可以通過指定各種值來欺騙和驗證對 Intranet 地址的訪問,攻擊者將評估這些值是否可能被利用。

在一邊 Rust,發現問題出在標準庫“std::net”上 並且已經在“CVE-2021-29922”下編目。 它描述了 此庫的 IP 地址解析器在值前丟棄零 的地址,但僅當指定的數字不超過三位時,例如“0177.0.0.1”將被解釋為無效值並在響應中返回不正確的結果。

rust-lang 標準“net”庫中不正確的八進製字符串輸入驗證允許未經身份驗證的遠程攻擊者對許多依賴於 rust-lang std::net 的程序執行不確定的 SSRF、RFI 和 LFI 攻擊。 IP 地址的八位字節被剝離而不是被評估為有效的 IP 地址。

還提到了使用 std::net::IpAddr 庫的應用程序 解析指定地址時 按用戶 可能容易受到 SSRF 攻擊 (服務器端請求欺騙), RFI (遠程文件包含)和 BIA (包括本地文件)。 同樣,攻擊者可以輸入127.0.026.1,實際上是127.0.22

例如,攻擊者向基於 std::net::IpAddr 的 Web 應用程序發送 IP 地址可能會通過輸入八進制輸入數據導致 SSRF; 如果八位字節有 3 位數字,攻擊者可以發送可利用的 IP 地址,最小可利用八位字節 08 會導致拒絕服務,最大可利用八位字節 099 也會導致拒絕服務。 

如果您想了解有關此漏洞的更多信息 在 Rust 中,您可以查看詳細信息 在下面的鏈接中。 還提到該漏洞已在 Rust 1.53.0 分支中修復。

關於 對影響的問題 去,提到這是受標準庫«net» 它已經列在 CVE-2021-29923 下。 在描述中提到 允許未經身份驗證的遠程攻擊者執行 SSRF、RFI 和 LFI 攻擊 在許多依賴於 golang 內置 net.ParseCIDR 函數的程序中不確定。 單個 CIDR IP 八位字節被剝離而不是將它們評估為有效的 IP 八位字節。

例如,攻擊者可能會傳遞值 00000177.0.0.1,當在 net.ParseCIDR 函數中檢查時,該值將被解析為 177.0.0.1/24,而不是 127.0.0.1/24。 這個問題也體現在 Kubernetes 平台上。 該漏洞已在 Go 1.16.3 版和 Beta 版 1.17 中修復。

你可以了解更多 關於這個漏洞 在下面的鏈接中。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。