最近 Qualys 安全研究人員 (一家云安全、合規和相關服務公司) 發布了漏洞的詳細信息 他們發現了什麼以及什麼 它們會影響 Linux 內核。
CVE-2021-33909 影響內核並允許本地用戶實現代碼執行 並通過操作高度嵌套的目錄來提升權限。
該漏洞是由於缺少對 size_t 轉換為 int 類型的結果的驗證 在對 seq_file 代碼執行操作之前,該代碼從一系列記錄創建文件。 在創建、掛載和刪除具有非常高嵌套級別(路徑大小大於 1GB)的目錄結構時,缺乏驗證可能會導致寫入緩衝區限制之外的區域。
通過在默認配置中利用此漏洞,任何非特權用戶都可以在易受攻擊的主機上獲得 root 權限。
結果,攻擊者可以獲得一個 10 字節的字符串 “// 刪除”,偏移量為“- 2 GB - 10 字節”,指向分配緩衝區之前的區域。
脆弱性的威脅因以下事實而更加複雜: 研究人員能夠準備功能利用 在默認設置下的 Ubuntu 20.04、Debian 11 和 Fedora 34 上。 需要注意的是,其他發行版尚未經過測試,但理論上它們也容易受到該問題的影響並且可能受到攻擊。
成功利用此漏洞允許任何非特權用戶在易受攻擊的主機上獲得 root 權限。 Qualys 安全研究人員已經能夠獨立驗證漏洞、開發漏洞並獲得默認安裝的 Ubuntu 20.04、Ubuntu 20.10、Ubuntu 21.04、Debian 11 和 Fedora 34 Workstation 的完全 root 權限。 其他 Linux 發行版可能容易受到攻擊並且可能被利用。
漏洞利用的工作歸結為創建大約一百萬個目錄的層次結構 通過 mkdir() 調用嵌套 實現大於 1GB 的文件路徑大小。
該目錄被綁定掛載在單獨的用戶命名空間中,之後運行 rmdir() 函數將其刪除。 同時,創建一個線程來加載一個小的 eBPF 程序,該程序在驗證 eBPF 偽代碼之後,但在其 JIT 編譯之前掛起。
在非特權用戶ID命名空間中,打開/proc/self/mountinfo文件,讀取bind-mount掛載的長目錄路徑,導致緩衝區開始前的區域寫入“//deleted”行。 選擇寫入行的位置以覆蓋已測試但尚未編譯的 eBPF 程序中的指令。
此外,在 eBPF 程序級別, 不受控制地寫出緩衝區被轉換為讀/寫能力 通過操作 btf 和 map_push_elem 結構在其他內核結構中進行控制。
然後,漏洞利用將 modprobe_path [] 緩衝區放在內核內存中並覆蓋其中的路徑“/sbin/modprobe”,如果發出 request_module() 調用,則允許任何可執行文件以 root 身份啟動,例如在創建一個 netlink 套接字...
研究人員提供了幾種僅對特定漏洞有效的解決方案,但它們並不能解決問題本身。
因此,建議將參數“/proc/sys/kernel/unprivileged_userns_clone”設置為 0 以禁用在單獨的用戶 ID 命名空間中安裝目錄,將“/proc sys/kernel/unprivileged_bpf_disabled”設置為 1 以禁用 eBPF 程序的加載進入內核。
除此之外,還建議 Linux 發行版的所有用戶更新您的系統以獲得相應的補丁。 問題從2014年XNUMX月開始就很明顯了 它會影響自 3.16 以來的內核版本。 該漏洞補丁與社區協調並於 19 月 XNUMX 日被內核接受。
最後,如果您有興趣了解更多,可以諮詢 以下鏈接中提供了詳細信息。