最近 Qualys 安全研究人员 (一家云安全、合规和相关服务公司) 发布了漏洞的详细信息 他们发现了什么以及什么 它们会影响 Linux 内核。
CVE-2021-33909 影响内核并允许本地用户实现代码执行 并通过操作高度嵌套的目录来提升权限。
该漏洞是由于缺少对 size_t 转换为 int 类型的结果的验证 在对 seq_file 代码执行操作之前,该代码从一系列记录创建文件。 在创建、挂载和删除具有非常高嵌套级别(路径大小大于 1GB)的目录结构时,缺乏验证可能会导致写入缓冲区限制之外的区域。
通过在默认配置中利用此漏洞,任何非特权用户都可以在易受攻击的主机上获得 root 权限。
结果,攻击者可以获得一个 10 字节的字符串 “// 删除”,偏移量为“- 2 GB - 10 字节”,指向分配缓冲区之前的区域。
脆弱性的威胁因以下事实而加剧: 研究人员能够准备功能利用 在默认设置下的 Ubuntu 20.04、Debian 11 和 Fedora 34 上。 需要注意的是,其他发行版尚未经过测试,但理论上它们也容易受到该问题的影响并且可能受到攻击。
成功利用此漏洞允许任何非特权用户在易受攻击的主机上获得 root 权限。 Qualys 安全研究人员已经能够独立验证漏洞、开发漏洞并获得 Ubuntu 20.04、Ubuntu 20.10、Ubuntu 21.04、Debian 11 和 Fedora 34 Workstation 默认安装的完全 root 权限。 其他 Linux 发行版可能容易受到攻击并且可能被利用。
漏洞利用的工作归结为创建大约一百万个目录的层次结构 通过 mkdir() 调用嵌套 实现大于 1GB 的文件路径大小。
该目录被绑定挂载在单独的用户命名空间中,之后运行 rmdir() 函数将其删除。 同时,创建一个线程来加载一个小的 eBPF 程序,该程序在验证 eBPF 伪代码之后,但在其 JIT 编译之前挂在舞台上。
在非特权用户ID命名空间中,打开/proc/self/mountinfo文件,读取bind-mount挂载的长目录路径,导致缓冲区开始前的区域写入“//deleted”行。 选择写入行的位置以覆盖已测试但尚未编译的 eBPF 程序中的指令。
此外,在 eBPF 程序级别, 不受控制地写出缓冲区被转换为读/写能力 通过操作 btf 和 map_push_elem 结构在其他内核结构中进行控制。
然后,漏洞利用将 modprobe_path [] 缓冲区放在内核内存中并覆盖其中的路径“/sbin/modprobe”,如果发出 request_module() 调用,则允许任何可执行文件以 root 身份启动,例如在创建时执行一个 netlink 套接字...
研究人员提供了几种仅对特定漏洞有效的解决方案,但它们并不能解决问题本身。
因此,建议将参数“/proc/sys/kernel/unprivileged_userns_clone”设置为 0 以禁用在单独的用户 ID 命名空间中安装目录,将“/proc sys/kernel/unprivileged_bpf_disabled”设置为 1 以禁用 eBPF 程序的加载进入内核。
此外,还建议 Linux 发行版的所有用户更新他们的系统以获得相应的补丁。 问题从2014年XNUMX月开始就很明显了 它会影响自 3.16 以来的内核版本。 该漏洞补丁与社区协调并于 19 月 XNUMX 日被内核接受。
最后,如果您有兴趣了解更多,可以咨询 以下链接中提供了详细信息。