写点什么

CVE-2021-33909:Linux 本地权限提升漏洞

用户头像
H
关注
发布于: 2 小时前


Linux 本地权限提升漏洞影响大多数 Linux 发行版。

漏洞概述



Qualys 研究人员在 Linux kernel 中发现一个本地权限提升漏洞——Sequoia,该漏洞是 Linux kernel 文件系统层中的 size_t-to-int 类型转化漏洞。漏洞 CVE 编号为 CVE-2021-33909,攻击者利用该漏洞可以在大多数 Linux 发行版上获得 root 权限。

Linux 文件系统

Linux 文件系统是存储设备上数据和元数据的组织形式,控制着数据的存储、提取,其最重要的功能是管理用户数据。Linux 文件系统接口以分层架构实现,可以将用户接口层与文件系统实现、以及操作存储设备的驱动隔离开来。

技术细节



Linux kernel 的 seq_file 接口可以生成包含记录序列的虚拟文件。每个记录都必须与一个 seq_file 缓存相适配,缓存可以根据需要扩大,参见 242 行代码:



m->size 是 size_t(无符号 64 位整数),但是 size_t 也会传递给 size 参数为 int(有符号 32 位整数)而非 size_t 的函数。比如,227 行调用的 show_mountinfo()函数调用了 150 行的 seq_dentry()函数,该函数会调用 530 行的 dentry_path(),该函数会调用 387 行的 prepend():



因此,如果非特权的本地攻击者创建、挂载或删除了完整路径长度超过 1GB 的目录结构,同时如果攻击者使用 open()和 read()打开和读取/proc/self/mountinfo,那么:

◼在 seq_read_iter()中,就会分配一个 2GB 的缓存(242 行),并调用 show_mountinfo()(227 行);

◼在 show_mountinfo()中,seq_dentry()以及 2GB 的空缓存会被调用(150 行);

◼在 seq_dentry()中,dentry_path()以及 2GB 大小会被调用(530 行);

◼在 dentry_path()中,int buflen 是负的(INT_MIN, -2GB),p 指向-2GB 的偏移量,同时会调用 387 行的 prepend();

◼在 prepend()中,*buflen 会减少 10 字节,并成为更大的正的 int(13 行),*buffer 会减少 10 字节,并指向-2GB-10B 的偏移量(16 行),10 字节的字符串“//deleted”会越界写(17 行)。

漏洞影响



攻击者利用该漏洞可以在有漏洞的主机(默认配置情况下)上使非特权用户获得 root 权限。Qualys 安全研究人员还独立验证了该漏洞,开发了漏洞利用,并在以下版本中获得了完全 root 权限:

◼Ubuntu 20.04;

◼Ubuntu 20.10; 

◼Ubuntu 21.04;

◼Debian 11;

◼Fedora 34 。

其他 Linux 发行版理论上也受到该漏洞的影响。

 

网安学习资料白嫖的哦



用户头像

H

关注

还未添加个人签名 2021.07.04 加入

想白嫖网安学习资料的,扣我

评论

发布
暂无评论
CVE-2021-33909:Linux本地权限提升漏洞