eBPF 子系统中允许在 Linux 内核级别执行代码的漏洞

eBPF 子系统中发现了两个新漏洞,该子系统允许您使用 JIT 在特殊虚拟机中的 Linux 内核中运行处理程序。 这两个漏洞都使得您可以在隔离的 eBPF 虚拟机之外以内核权限执行代码。 有关这些问题的信息由负责 Pwn2Own 竞赛的 Zero Day Initiative 团队发布,在竞赛中,今年针对 Ubuntu Linux 的三起攻击被证明使用了之前未知的漏洞(eBPF 中的漏洞是否与这些攻击有关) 。

  • CVE-2021-3490 - 该漏洞是由于在 eBPF ALU32 中执行按位 AND、OR 和 XOR 运算时缺乏 32 位越界检查而导致的。 攻击者可以利用此错误在分配的缓冲区范围之外读取和写入数据。 XOR 运算的问题从内核版本 5.7-rc1 开始出现,AND 和 OR 运算的问题从 5.10-rc1 开始出现。
  • CVE-2021-3489 - 该漏洞是由环形缓冲区实现中的错误引起的,并且是由于 bpf_ringbuf_reserve 函数没有检查分配的内存区域的大小可能小于实际大小的可能性环缓冲区的。 该问题从 5.8-rc1 版本开始出现。

可以在以下页面上跟踪发行版中修补漏洞的状态:Ubuntu、Debian、RHEL、Fedora、SUSE、Arch)。 修复程序也可以作为补丁提供(CVE-2021-3489、CVE-2021-3490)。 该问题是否可以被利用取决于用户是否可以访问 eBPF 系统调用。 例如,在RHEL的默认配置中,利用该漏洞需要用户具有CAP_SYS_ADMIN权限。

另外,我们还可以注意到 Linux 内核中的另一个漏洞 - CVE-2021-32606,该漏洞允许本地用户将权限提升到 root 级别。 这个问题从 Linux 内核 5.11 开始就很明显,是由 CAN ISOTP 协议实现中的竞争条件引起的,由于在 isotp_setsockopt() 函数中缺少设置正确的锁,因此可以更改套接字绑定参数处理 CAN_ISOTP_SF_BROADCAST 标志时。

ISOTP套接字关闭后,与接收套接字的绑定仍然有效,在与套接字关联的内存被释放后,可以继续使用与套接字关联的结构(由于调用 isotp_sock 结构而导致释放后使用)调用 isotp_rcv() 时已被释放)。 通过数据操作,您可以覆盖 sk_error_report() 函数的指针并在内核级别执行代码。

来源: opennet.ru

添加评论