壹 漏洞概念
CVE-2022-0847
是存在于Linux
内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而将普通权限的用户提升至root
权限。由于漏洞原理与脏牛漏洞(CVE-2016-5195
)类似,漏洞作者将此漏洞命名为Dirty Pipe
。
贰 漏洞原理
CVE-2022-0847
的漏洞原理类似于 CVE-2016-5195
脏牛漏洞(Dirty Cow linux
),但它更容易被利用。漏洞作者将此漏洞命名为Dirty Pipe
。新管道缓冲区结构的flag
成员在Linux
内核中的copy_page_to_iter_pipe
和push_pipe
函数中缺乏正确初始化的方式存在缺陷,因此可能包含陈旧值。非特权本地用户可以使用此漏洞写入由只读文件支持的页面缓存中的页面,从而提升他们在系统上的权限。
叁 适用版本
Linux Kernel版本 >= 5.8
Linux Kernel版本 < 5.16.11 / 5.15.25 / 5.10.102
# 查看Linux版本
cat /proc/version
uname -a
肆 复现环境说明
在kali
上新建一个text
普通用户,并且Linux
版本是:Linux Kernel版本 >= 5.8
或者Linux Kernel版本 < 5.16.11 / 5.15.25 / 5.10.102 5.10.102
伍 复现
编译exp:gcc exploit.c -o exploit
,得到exploit
,然后到普通用户:
陆 利用Poc|Exp以及工具
- EXP工具:CVE-2022-0847
CVE-2022-0847-main.zip - 直接可以使用的exp(复现使用的exp)
CVE-2022-0847-DirtyPipe-Exploit.zip - 需要参数的exp
CVE_2022_0847_exp.zip
该EXP
需要查找具有suid
权限的可执行文件:# 感觉这个EXP更好 find / -user root -perm /4000 2>/dev/null
然后从中搜索结果中获取有Suid
可执行文件,运行EXP。
柒 危害
提权!
捌 修复建议
修复建议就是升级 Linux
内核!
- ubuntu
选择对应架构平台不受影响的内核版本文件,下载并安装,重启,例如:
sudo wget http://ftp.sjtu.edu.cn/sites/elrepo.org/linux/kernel/el7/x86_64/RPMS/kernelml-devel-5.16.11-1.el7.elrepo.x86_64.rpm
sudo wget http://ftp.sjtu.edu.cn/sites/elrepo.org/linux/kernel/el7/x86_64/RPMS/kernelml-5.16.11-1.el7.elrepo.x86_64.rpm
yum -y install kernel-ml-devel-5.16.11-1.el7.elrepo.x86_64.rpm el7/x86_64/RPMS/kernelml-5.16.11-1.el7.elrepo.x86_64.rpm
sudo vim /etc/default/grub # 将GRUB_DEFAULT=saved 改为 GRUB_DEFAULT=0
sudo grub2-mkconfig #重建内核
sudo reboot #重启
uname -r #查看当前内核版本
- centos
选择对应架构平台不受影响的内核版本文件,下载并安装,重启,例如:
sudo wget http://ftp.sjtu.edu.cn/sites/elrepo.org/linux/kernel/el7/x86_64/RPMS/kernelml-devel-5.16.11-1.el7.elrepo.x86_64.rpm
sudo wget http://ftp.sjtu.edu.cn/sites/elrepo.org/linux/kernel/el7/x86_64/RPMS/kernelml-5.16.11-1.el7.elrepo.x86_64.rpm
yum -y install kernel-ml-devel-5.16.11-1.el7.elrepo.x86_64.rpm el7/x86_64/RPMS/kernelml-5.16.11-1.el7.elrepo.x86_64.rpm
sudo vim /etc/default/grub # 将GRUB_DEFAULT=saved 改为 GRUB_DEFAULT=0
sudo grub2-mkconfig #重建内核
sudo reboot #重启
uname -r #查看当前内核版本
- 其它版本
到https://kernel.org/
下载对应版本的内核文件,进行编译。