最近有消息說 發現漏洞 (CVE-2021-29154) 在 eBPF 子系統中,該子系統允許您運行跟踪、子系統分析和流量控制控制器 運行在 Linux 內核的一個特殊的 JIT 虛擬機中 允許本地用戶在內核級別運行您的代碼。
據發現該漏洞的研究人員稱,他們能夠為 86 位和 32 位 x64 系統開發一個可供非特權用戶使用的漏洞利用工作原型。
同時 紅帽指出問題的嚴重性取決於 eBPF 系統調用的可用性 對於用戶來說。 例如,在默認配置的 RHEL 和大多數其他 Linux 發行版上,當啟用 BPF JIT 並且用戶具有 CAP_SYS_ADMIN 權限時,可以利用該漏洞。
Linux 內核中發現了一個可能被濫用的問題
本地非特權用戶升級權限。問題是編譯器如何計算某些架構的 BPF JIT
生成機器代碼時的分支偏移量。 這可能會被濫用
創建失敗的機器代碼並在內核模式下運行它,
控制流被劫持以執行不安全的代碼。
他們詳細說明了這一點 該問題是由計算分支指令偏移量時產生的錯誤引起的 在生成機器代碼的 JIT 編譯器期間。
特別提到,在生成分支指令時,沒有考慮到經過優化階段後位移可能會發生變化,利用這種故障可以生成異常機器代碼並在分支級別執行。核心。
應該指出的是 這並不是近年來已知的 eBPF 子系統中唯一的漏洞, 自XNUMX月底以來,內核中又發現了兩個漏洞 (CVE-2020-27170,CVE-2020-27171),它提供了使用 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 發行版的內核更新中。 研究人員準備了一個原型漏洞利用程序,允許非特權用戶從內核內存中檢索數據。
至於解決方案之一 紅帽內部的建議是:
減輕:
默認情況下,此問題不會影響大多數係統。 管理員必須啟用 BPF JIT 才會受到影響。
可以使用以下命令立即禁用它:
# echo 0 > /proc/sys/net/core/bpf_jit_enable或者可以通過在 /etc/sysctl.d/44-bpf -jit-disable 中設置一個值來禁用所有後續系統啟動
## start file ## net.core.bpf_jit_enable=0</em> end file ##
終於 如果您有興趣了解更多信息 關於該漏洞,您可以查看詳細信息 以下鏈接。
值得一提的是,該問題一直持續到版本 5.11.12(含),並且在大多數發行版中尚未得到修復,儘管修復已經存在。 可作為補丁使用。