小米科技|CVE-2021-33909:Linux本地权限提升漏洞

小米科技|CVE-2021-33909:Linux本地权限提升漏洞



小米科技|CVE-2021-33909:Linux本地权限提升漏洞



小米科技|CVE-2021-33909:Linux本地权限提升漏洞



小米科技|CVE-2021-33909:Linux本地权限提升漏洞


Linux本地权限提升漏洞影响大多数Linux发行版 。
漏洞概述
【小米科技|CVE-2021-33909: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发行版理论上也受到该漏洞的影响 。
【网安学习资料白嫖的哦】