eBPF 子系統中允許在 Linux 核心層級執行程式碼的漏洞

eBPF 子系統中已發現一個漏洞 (CVE-2021-4204),該漏洞允許您在帶有 JIT 的特殊虛擬機中的 Linux 內核中運行處理程序,從而允許本地非特權用戶實現權限提升並在Linux 內核級別。 這個問題從 Linux 核心 5.8 開始就出現了,而且仍未修復(包括版本 5.16)。 可以在以下頁面上追蹤為解決發行版中的問題而產生的更新的狀態:Debian、RHEL、SUSE、Fedora、Ubuntu、Arch。 目前已宣布已創建了一個有效的漏洞,計劃於 18 月 XNUMX 日發布(用戶和開發人員有一周的時間來修復該漏洞)。

此漏洞是由於傳輸執行的 eBPF 程式的錯誤驗證所造成的。 eBPF子系統提供輔助功能,其正確使用由特殊驗證器驗證。 某些函數需要傳遞 PTR_TO_MEM 值作為參數,為了防止可能的緩衝區溢出,驗證程式必須知道與參數關聯的記憶體大小。 對於 bpf_ringbuf_submit 和 bpf_ringbuf_discard 函數,有關傳輸記憶體大小的資料不會報告給驗證者,在執行專門設計的 eBPF 程式碼時,這些資料可用於覆寫超出緩衝區邊界的記憶體區域。

要進行攻擊,用戶必須能夠加載自己的 BPF 程序,並且許多最新的 Linux 發行版默認阻止此功能(包括從版本 5.16 開始,內核本身默認禁止對 eBPF 的非特權訪問)。 例如,該漏洞可以在Ubuntu 20.04 LTS的預設配置中被利用,但在Ubuntu 22.04-dev、Debian 11、openSUSE 15.3、RHEL 8.5、SUSE 15-SP4和Fedora 33環境中,只有管理員設定後才會出現此漏洞將 kernel.unprivileged_bpf_disabled 參數設為 0。作為阻止漏洞的解決方法,您可以使用命令「sysctl -w kernel.unprivileged_bpf_disabled=1」來阻止非特權使用者執行 BPF 程式。

來源: opennet.ru

添加評論