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

添加评论