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

添加评论