[!WARNING] 仅限在您拥有或已获授权测试的系统上使用。
临时移除 root 密码,利用 CVE-2026-31431 在不获知当前用户密码的情况下,实现与架构无关的提权至 root。
请负责任地使用,仅在您获授权测试的系统上使用。此方法是否受您的系统支持会有所不同,但在我测试过的每个 Debian 衍生版上都有效。
本 PoC 的基础原理本质上是将 /etc/passwd 中您的 UID 替换为全 0,从而有效地赋予您 root 权限。而本方法改为移除 root 的密码,因此当您运行 su 时可立即获得 root。这样可保持您的用户不变以维持稳定性,但缺点是机器上任何用户都能在清理之前提权。由于不涉及二进制修改,此方法也应适用于所有架构(已在 Aarch64 和 x64 上测试)。
python exploit.py [ --shell | --clean | --noclean ]
不带参数运行时,程序会执行对 /etc/passwd 的修改,然后将其还原。
--noclean:完成后不还原所做的修改。--clean:仅清理上次运行留下的修改,不运行漏洞利用程序。--shell:不进行清理,但在运行漏洞利用程序后通过 su 生成一个 root shell。
改为
删除表示密码存储在 /etc/shadow 中的 'x' 后,该用户将被视为根本没有密码,从而可以轻松登录。
在我撰写本文时,CopyFail 只有广为人知的 PoC,一个会覆盖 SUID 可执行文件,另一个会将您的用户 UID 替换为零。如果您正在对系统进行测试,这两者都有相当不同的用例。SUID 覆盖需要针对系统架构定制的 shellcode,而修改 UID 需要您使用当前用户的密码重新认证,而您可能并不知道该密码。当这些要求成为障碍时,RootRemover 通常可以派上用场。
此工具面向的是您获得一个 nologin 用户(如 www-data)的 shell 的情况,而非您已知密码或充分了解架构足以准备 shellcode 的机器。
*LK*' 或 '*NP*'(可以通过链式写入修复,只是我还没有时间实现)su 的命令行更容易识别提权(无参数始终表示 root,而 UID 补丁 PoC 在日志中看起来只是切换到您自己的用户)实际漏洞利用代码来自 rootsecdev 的仓库,我主要基于上述原因更改了写入的字节。