Linux核心eBPF子系統中的漏洞

eBPF 子系統中發現了一個漏洞(CVE-2021-29154),該漏洞可讓您執行處理程序來追蹤、分析子系統的操作和管理流量,這些處理程序在具有JIT 的特殊虛擬機器中的Linux 核心內部執行,這使得本地用戶在核心層級實現其程式碼的執行。這個問題在 5.11.12(含)版本之前出現,並且尚未在發行版(Debian、Ubuntu、RHEL、Fedora、SUSE、Arch)中修復。該修復程序以補丁形式提供。

據發現該漏洞的研究人員稱,他們能夠為 32 位元和 64 位元 x86 系統開發該漏洞的工作原型,可供非特權用戶使用。不過,紅帽指出,問題的嚴重性取決於使用者是否可以存取 eBPF 系統呼叫。例如,在預設配置的 RHEL 和大多數其他 Linux 發行版上,如果啟用了 BPF JIT 並且使用者俱有 CAP_SYS_ADMIN 權限,則可以利用漏洞。作為解決方法,建議使用下列命令停用 BPF JIT: echo 0 > /proc/sys/net/core/bpf_jit_enable

此問題是由於JIT編譯器在機器碼產生過程中計算分支指令偏移量時發生錯誤所造成的。特別是,在產生分支指令時,沒有考慮到經過最佳化階段後偏移量可能會改變。此缺陷可用於產生異常機器碼並在核心層級執行。

值得注意的是,這並不是 eBPF 子系統近期唯一的漏洞。 2020 月底,核心中又發現了兩個漏洞(CVE-27170-2020、CVE-27171-XNUMX),使得可以使用 eBPF 繞過針對 Spectre 類別漏洞的保護,從而可以確定核心記憶體的內容為某些操作的推測執行創造條件的結果。 Spectre 攻擊要求特權程式碼中存在特定的命令序列,從而導致指令的推測執行。在 eBPF 中,已經發現了多種方法來透過對傳輸執行的 BPF 程式進行操作來產生此類指令。

CVE-2020-27170 漏洞是由 BPF 驗證器中的指標操作引起的,導致推測操作訪問緩衝區邊界之外的區域。漏洞 CVE-2020-27171 是由於使用指標時出現整數下溢錯誤導致的,導致對緩衝區外部資料的推測性存取。這些問題已在核心版本 5.11.8、5.10.25、5.4.107、4.19.182 和 4.14.227 中修復,並且也已包含在大多數 Linux 發行版的核心更新中。研究人員準備了一個原型漏洞利用程序,允許非特權用戶從內核記憶體中提取資料。

來源: opennet.ru

添加評論