io_uring 中的一個漏洞允許沒有權限的用戶即使在容器中也可以成為 root

最近 漏洞信息披露 (CVE-2022-29582) 在 io_uring 異步 I/O 接口的實現中,自 5.1 版起包含在 Linux 內核中,它允許非特權用戶成為系統的 root,即使在執行容器漏洞利用時也是如此。

值得一提的是 說漏洞是在 3 個多月前報告的 (大約今年 XNUMX 月初),但直到最近才發布完整的信息和披露。

關於脆弱性,有人提到這 訪問已釋放的內存塊時發生,從 5.10 分支開始出現在 Linux 內核中。

關於漏洞CVE-2022-29582

這個漏洞 允許訪問釋放的內存 由於在 io_flush_timeouts() 函數中處理超時時出現競爭條件,這e 刪除超時條目 從列表中刪除它,而不驗證此時超時的創建和刪除。

其他人已經提供了 io_uring 的更新一般描述。 他們對它的解釋比我們好一千倍,因此我們將更廣泛地介紹子系統(請參閱這篇 Grapl 安全文章和這篇 Flatt 安全文章以獲得很好的介紹)。

更重要的是, 操作碼字段確定要執行的操作類型。 對於每個需要它的“操作碼”,fd 字段指定要在其上執行請求的 I/O 的文件描述符。 幾乎所有正常的 I/O 系統調用(read、sendto 等)都有一個等效的異步操作碼。 每個字段可以根據操作承擔不同的角色。

一旦從 SQ 中檢索到,SQE 就會轉換為 struct io_kiocb(內核輸入/輸出回調)描述的內部表示。 這些對象通常稱為請求。

struct io_kiocb 用作它所基於的 SQE“準備啟動”的等價物,其中任何文件描述符都被解析為 struct file*s、附加用戶憑據、個性(內核將在其中運行)等.

請求的操作完成後,寫入完成隊列 (CQ) 對應於 SQE 的條目。 這樣的條目稱為完成隊列條目 (CQE),包含錯誤代碼和結果值等字段。 用戶空間應用程序可以輪詢 CQ 以獲取新條目,以確定發送的 SQE 是否已完成處理以及它們的結果是什麼。

提到 有一些場景很容易替換一個對象 關於進展。 但是有兩個限制:

  • LT' 必須在比賽窗口中分配和初始化。 也就是說,在 LT 被釋放之後,但在到達 LT 中不再被訪問的點之前。
  • LT' 只能是另一個 struct io_kiocb 對象。 由於堆隔離,堆中的對像根據它們的類型分開,很難在競爭窗口內將它們重新分配為不同類型的對象。

研究人員準備了一個功能性漏洞利用 它的操作不需要包含用戶標識符命名空間(用戶命名空間),並且可以在非特權用戶在隔離容器中啟動漏洞利用時提供對主機的 root 訪問權限。

我們的漏洞利用針對的是內核版本 5.10.90,當時 Google 正在遠程運行該版本。 我們必鬚根據服務器的特定規格(4 Skylake Xeon 內核 @ 2.80Ghz,16GiB RAM)調整我們的漏洞利用,但是通過一些調整,任何運行易受攻擊內核的機器都應該可以利用。

該漏洞利用也適用於 nsjail 環境 隔離在基於 Chromium OS 的 Google COS(Container Optimized OS)發行版上,並在 Compute Engine 虛擬機上的 Google Cloud Platform 上使用。 該漏洞利用旨在與從 5.10 到 5.12 的內核分支一起使用。 最後,值得一提的是 該問題已在 5.10.111 月的更新 5.15.34、5.17.3 和 XNUMX 中修復。

最後,如果您有興趣了解有關該漏洞的更多信息,可以查閱製作的出版物 在下面的鏈接中。


發表您的評論

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

*

*

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