最近有消息说 发现漏洞 (CVE-2021-29154)在eBPF子系统中,其中p允许您运行跟踪,子系统分析和流量控制控制器 在特殊的JIT虚拟机中的Linux内核中运行, 允许本地用户在内核级别运行您的代码。
根据发现漏洞的研究人员的说法,他们能够为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版(含)为止,即使已进行了更正,但在大多数发行版中尚未解决。 可作为补丁使用。