他們最近發布的消息是 發現漏洞 (已在 CVE-2022-31214 下列出) 在 Firejail 應用程序沙盒工具中,詳細說明檢測到的漏洞可能允許本地用戶成為主機系統上的 root。
Firejail 在 Linux 中使用命名空間機制、AppArmor 和系統調用過濾 (seccomp-bpf) 進行隔離,但需要提升權限來配置隔離版本,它通過綁定到 suid 根標誌實用程序或使用 sudo 運行來獲得。
該漏洞是由於“--join=”選項的邏輯錯誤造成的», 旨在連接到已經運行的隔離環境(類似於沙盒環境的登錄命令),環境由其中運行的進程的 ID 定義。 在預啟動階段,firejail 會檢測指定進程的權限並將其應用於使用“--join”選項加入環境的新進程。
連接前, 檢查指定進程是否在 firejail 環境中運行。 此檢查評估 /run/firejail/mnt/join 文件的存在。 要利用該漏洞, 攻擊者可以模擬一個虛構的非隔離火獄環境 使用掛載命名空間,然後使用“--join”選項連接到它。
如果配置沒有開啟禁止在新進程中獲取額外權限的模式(prctl NO_NEW_PRIVS),firejail會將用戶連接到一個虛構的環境,並嘗試應用init進程的用戶標識符(namespace user)的用戶命名空間配置( PID 1)。
join 函數背後的大部分邏輯都在源代碼中 來自 `src/firejail/join.c` 文件。 代碼的關鍵部分執行 提升的特權(有效的 UID 0)。 作為命令傳遞的進程 ID 檢查 line 參數以確定它是否是 r容器並確定它的一些屬性 它也適用於新的進入過程。
決定是否加入目標進程的主要標準 成功是目標的掛載命名空間中存在文件, 在 /run/firejail/mnt/join 中找到的進程。 此驗證是在 f 上完成的`is_ready_for_join()` 函數。 使用 l 打開文件`O_RDONLY|O_CLOEXEC` 標誌和跟踪 `fstat()` 結果應該 滿足以下要求:
– 文件必須是普通文件。
– 該文件必須由用戶 ID 0 擁有(從初始用戶可見
命名空間)。
– 文件大小必須為 1 字節。
結果, 通過“firejail --join”連接的進程將在命名空間中結束 用戶的原始用戶 ID 特權不變, 但在不同的掛載點空間,完全由攻擊者控制。
生成的“加入”外殼現在將存在於初始用戶
命名空間,仍然保留原來的普通用戶權限,但是 掛載命名空間將是由攻擊者控制的命名空間。 作為
沒有應用 nonewprivs 配置,攻擊者現在可以
在這個掛載命名空間中運行 setuid-root 程序
特別是,攻擊者可以在它創建的掛載點的空間中運行 setuid-root 程序,例如,允許它在其文件層次結構中更改 /etc/sudoers 配置或 PAM 參數,並獲得以 root 身份運行命令的能力使用 sudo 或其實用程序。
最後,值得一提的是,已經開發了一個功能性漏洞利用程序,並在安裝了 firejail 實用程序的當前版本的 openSUSE、Debian、Arch、Gentoo 和 Fedora 上進行了測試。
該問題已在 firejail 版本 0.9.70 中得到修復。 作為安全修復,您可以將配置(/etc/firejail/firejail.config)設置為“no join”和“force-nonewprivs yes”。
終於 如果您有興趣了解更多信息,您可以在中查看詳細信息 以下鏈接。