前幾天有消息爆出 檢測到兩個漏洞 的子系統 linux內核, Netfilter 和 io_uring,它們允許本地用戶提升他們在系統上的權限。
第一個是脆弱性。 (CVE-2023-32233) 在 Netfilter 子系統中檢測到 並且由 nf_tables 模塊中的 use-after-free 內存訪問引起,這確保了 nftables 包過濾器的運行。
這個錯誤是因為 netfilter nf_tables 允許更新它的配置 對於組合在一起的批處理請求 多項基本操作 在原子事務中。
問題 已在各種版本的 Linux 內核中復現,包括 Linux 6.3.1 (當前穩定)並且可以通過發送特製請求來更新 nftables 配置來利用該漏洞。 提到攻擊需要訪問 nftables,如果您擁有 CLONE_NEWUSER、CLONE_NEWNS 或 CLONE_NEWNET 權限(例如,如果您可以運行隔離容器),則可以在單獨的網絡命名空間中獲取 nftables。
對於這個漏洞,發現問題的研究人員承諾推遲一周發布詳細信息和提供 root shell 的有效漏洞利用示例。
在特定情況下,無效的批處理請求可能包含隱式刪除現有 nft 匿名集的操作,然後是另一個嘗試在刪除後對同一匿名 nft 集進行操作的操作。 在上述場景中,上述操作的示例是刪除現有的使用 nft 匿名集的 nft 規則。 而後一個操作的一個例子是在數組被交替刪除後嘗試從那個 nft 匿名數組中刪除一個元素,後一個操作甚至可能再次嘗試顯式刪除那個 nft 匿名數組。
如開頭所述,這是幾天前的事,漏洞和信息已經公開。 該漏洞及其詳細信息可在以下鏈接中找到。
檢測到第二個故障, 是漏洞 (CVE-2023-2598) 在 異步I/O接口的實現 io_uring 自 5.1 版起包含在 Linux 內核中。
該問題是由 io_sqe_buffer_register 函數中的錯誤引起的,該錯誤允許訪問靜態分配緩衝區邊界之外的物理內存。 該問題僅出現在 6.3 分支中,將在下一個 6.3.2 更新中修復。
提到原始提交背後的想法是,不是將緩衝的大頁面拆分為單獨的 bvec 條目,您可以為頁面的所有緩衝部分使用一個 bvec 條目。 具體來說,如果緩衝區映射中的所有頁面都在單個 bvec 條目中使用第一個頁面結構和緩衝區長度,而不是單獨映射每個頁面。
所以 bvec 將遠遠超出它實際允許接觸的單個頁面。 隨後,IORING_OP_READ_FIXED 和 IORING_OP_WRITE_FIXED 允許我們隨意讀寫緩衝區(即 bvec 指向的內存)。 這允許對我們實際擁有的唯一頁面後面的物理內存進行讀/寫訪問。
漏洞發布提到了錯誤重現步驟:
1.創建一個memfd
2. 該文件描述符中的單個頁面出錯
3. 使用 MAP_FIXED 將此頁面重複映射到連續的位置
4. 將剛才那個頁面填充的整個區域註冊為
帶有 IORING_REGISTER_BUFFERS 的固定緩衝區
5. 使用 IORING_OP_WRITE_FIXED 將緩衝區寫入其他文件
(OOB 讀取)或 IORING_OP_READ_FIXED 讀取緩衝區中的數據(
OOB寫)。
最後值得一提的是 已經可用 一個有效的漏洞利用原型 (CVE-2023-2598) 用於測試,允許您以內核權限運行代碼。
脆弱性 (CVE-2023-32233) 它已在 6.4-rc 更新中修復,您可以在頁面上的分發版中關注漏洞修復: Debian, Ubuntu, Gentoo的, RHEL, Fedora, SUSE/開放SUSE y 拱.