cgroups v1 中允許逃離隔離容器的漏洞

Linux 核心中 cgroups v2022 資源限制機制實作中的漏洞 (CVE-0492-1) 的詳細資訊已被揭露,該漏洞可用於逃逸隔離容器。 該問題自 Linux 核心 2.6.24 起就存在,並在核心版本 5.16.12、5.15.26、5.10.97、5.4.177、4.19.229、4.14.266 和 4.9.301 中修復。 您可以在以下頁面關注發行版中軟體包更新的發布:Debian、SUSE、Ubuntu、RHEL、Fedora、Gentoo、Arch Linux。

此漏洞是由於release_agent 檔案處理程序中的邏輯錯誤造成的,該錯誤在以完全權限執行處理程序時無法執行正確的檢查。 release_agent 檔案用於定義當 cgroup 中的進程終止時核心要執行的程式。 該程式以 root 身份運行,並具有 root 命名空間中的所有「功能」。 假設只有管理員有權存取release_agent設置,但實際上檢查僅限於向root使用者授予存取權限,這並不排除從容器或沒有管理員權限的root使用者更改設定(CAP_SYS_ADMIN) )。

以前,這樣的功能不會被視為漏洞,但隨著用戶命名空間(user namespace)的出現,情況發生了變化,它允許您在容器中創建單獨的root 用戶,這些用戶與容器的root 用戶不重疊。主要環境。 因此,對於攻擊來說,將release_agent處理程序連接到一個容器中就足夠了,該容器在單獨的用戶ID空間中擁有自己的root用戶,完成該過程後,將以主環境的完全權限執行。

預設情況下,cgroupfs 以唯讀模式掛載在容器中,但如果您具有CAP_SYS_ADMIN 權限,或透過使用unshare 系統呼叫建立具有單獨使用者命名空間的巢狀容器,則以寫入模式重新掛載此pseudofs 沒有問題,其中建立的容器具有 CAP_SYS_ADMIN 權限。

cgroups v1 中允許逃離隔離容器的漏洞

如果您在隔離容器中擁有 root 權限,或在沒有 no_new_privs 標誌(禁止取得其他權限)的情況下執行容器,則可以進行攻擊。 系統必須啟用對使用者命名空間的支援(在 Ubuntu 和 Fedora 中預設為啟用,但在 Debian 和 RHEL 中未啟動)並有權存取根 cgroup v1(例如,Docker 在根 RDMA cgroup 中運行容器)。 如果您具有 CAP_SYS_ADMIN 權限,也可能發生攻擊,在這種情況下,不需要支援使用者命名空間和存取 cgroup v1 根層次結構。

除了逃離隔離容器之外,漏洞還允許由沒有「能力」的 root 使用者或任何具有 CAP_DAC_OVERRIDE 權限的使用者啟動進程(攻擊需要存取檔案 /sys/fs/cgroup/*/release_agent,該檔案由root 擁有)以獲得對所有系統「功能」的存取權限。

值得注意的是,當使用Seccomp、AppArmor 或SELinux 保護機制對容器進行額外隔離時,該漏洞無法被利用,因為Seccomp 會阻止對unshare() 系統呼叫的訪問,並且AppArmor 和SELinux 不允許以寫入模式掛載cgroupfs。

來源: opennet.ru

添加評論