badsectorlabs/copyfail-go(CVE-2026-31431)的 Python 移植版本。仅支持 Linux;需要 Python 3.10+(os.splice)。
此工具不使用 /etc/passwd 页缓存技巧。
main.go 相同的载荷)覆盖 setuid su 二进制的页缓存,然后执行 su。su 的损坏缓存镜像作为 setuid root 程序运行,而不是通过 /etc/passwd 让 getpwnam() 认为你的 UID 是 0。其他针对同一 CVE 的公开 Python PoC 可能会修补页缓存中的 /etc/passwd,然后指示你运行 su <user>。这与本脚本是不同的目标文件和不同的后续步骤。
仅限授权测试——只能在你自己拥有或明确获准评估的主机上使用。
chmod +x copyfail_su.py
# 交互式流程(与不带 --exec 的 copyfail-go 思路相同)
./copyfail_su.py --backup /tmp/su.bak
# 以提权方式运行其他程序(将路径作为 argv 传给 su;使用 exec-argv1 载荷)
./copyfail_su.py --backup /tmp/su.bak --exec /full/path/to/binary
成功运行后,请恢复真正的 su。
--backup 的恢复方法该 PoC 会损坏 /usr/bin/su 的页缓存。在验证或重新安装之前,不要假设磁盘上的文件仍然可信。
重新安装拥有 /usr/bin/su 的软件包(先找到它,然后重新安装):
rpm -qf /usr/bin/su,然后 sudo dnf reinstall shadow-utils(使用报告中的软件包名称)。dpkg -S /usr/bin/su,然后 sudo apt install --reinstall <package>。验证: sudo rpm -V <package> 检查 /usr/bin/su 是否有意外更改,或在 Debian 系列系统上使用 debsums。
可选: 重新安装后重启,以避免过时的缓存假设。
如果无法以 root 身份重新安装: 使用恢复启动、Live USB,或从同一发行版/版本/架构的已知良好镜像中替换 /usr/bin/su;确保属主为 root:root,权限为 4755(-rwsr-xr-x)。