io_uring 子系统中的漏洞可让您获得 root 权限

Linux 内核提供的 io_uring 异步 I/O 接口中发现了一个漏洞 (CVE-2024-0582),该漏洞可能允许非特权用户获得系统的 root 权限。要利用该漏洞,对系统的正常本地访问就足够了,无需操作命名空间。一个有效的漏洞现已公开,并且已经详细描述了利用该漏洞的第二种技术。

该漏洞是由访问 io_uring 子系统中已释放的内存块(释放后使用)引起的,该漏洞在注册和释放使用 IORING_REGISTER_PBUF_RING 标志创建的环形缓冲区时发生。当 mmap() 操作应用于缓冲区时,在执行释放操作 (IORING_UNREGISTER_PBUF_RING) 后,它仍然反映到用户空间。利用此功能,攻击者可以在返回到内核内存分配系统的内存页中读取和写入数据。

该问题自 Linux 内核 6.4 发布以来就一直存在,并在 6.7 和 6.6.5 版本以及为 Ubuntu 6.5.0 和 21 准备的 22.04-23.10 内核包中得到修复。值得注意的是,主内核中的问题已于 2023 年 8 月得到修复,Google Zero 项目于 6.5 月 22 日开放了对错误消息的访问,表明存在漏洞,并且仅在2024 年 XNUMX 月 XNUMX 日。在其他发行版中,您可以在以下页面上跟踪漏洞的修复和暴露情况:Debian、Gentoo、RHEL、SUSE、Fedora、Arch。

第一个漏洞利用特殊填充的网络套接字结构的内容作为信标,操纵大量攻击者控制的内存页面的创建,以确定内核中的内存布局并访问相邻的物理内存页面。为了运行代码,该漏洞利用“gadget”(内核中存在的一系列指令),这会导致执行 call_usermodehelper_exec 函数,该函数旨在从内核启动用户空间中的进程。

第二个漏洞是基于这样的事实:当缓存中的所有slab块都耗尽时(例如,当文件被多次打开时),攻击者仍然可以访问的空闲内存页将被内存分配系统用来创建一个新的slab块和所有新的文件结构开始放置在该块中。因此,某些文件结构最终将出现在攻击者可以读写的内存页面中。这种情况下的操作归结为将所需文件的条目组织到文件缓存中,并替换关联文件结构中的 f_mode 字段,该字段确定访问权限,从而允许您创建所需的系统文件,例如 /etc/密码,可写。

来源: opennet.ru

添加评论