本仓库包含针对 CVE-2026-31431(又称 "Copy Fail")的一个小型 Linux 本地权限提升 PoC。
该漏洞利用针对 Linux 内核 AF_ALG 用户态加密 API 中的 algif_aead 路径。它使用 AF_ALG 加 splice() 强制内核以 4 字节块的形式写入 /usr/bin/su 的页缓存,然后在页缓存被修改后执行 su。
copy_fail_exp.py 中的 PoC 做了四件事:
AF_ALG 套接字,用于 aead,变换为 authencesn(hmac(sha256),cbc(aes))。setsockopt() 值配置请求。splice() 调用将数据从目标文件移入 AF_ALG 请求路径,即存在缺陷的内核路径。/bin/sh 的 ELF 存根。zlib 数据块并非随机数据。它是一个紧凑型载荷,旨在替换页缓存中 /usr/bin/su 的开头部分,以便下次执行 su 时生成一个 root shell。
存在漏洞的代码是在 Linux 内核 4.14 时代的 algif_aead 变更中引入的,并一直保留到上游修复回退原地优化为止。
algif_aead 原地路径的 Linux 内核。AF_ALG 加密 API 的系统,这是大多数通用 Linux 发行版的默认配置。| 发行版 | 内核 |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 |
6.18.226.19.127.0下游 LTS 分支只有在厂商移植进入你实际运行的内核包之后才是安全的。
使用你拥有的实验室虚拟机或容器主机。不要在生产系统上运行此操作。
/usr/bin/su 存在且为 setuid-root。python3 copy_fail_exp.py
/usr/bin/su,然后调用 su。根据环境的不同,你最终会进入 root shell 或看到 root 提示符。该脚本除 Python 3 标准库外没有额外依赖。
python3 copy_fail_exp.py
如果你想先检查目标,脚本当前默认使用 /usr/bin/su。
如果你维护下游内核,正确的修复方法是移植上游回退,移除原地 AEAD 优化:
a664bf3d603dc3bdcf9ae47cc21e0daec706d7a572548b093ee3 原地变更。下游内核树的推荐工作流程:
git cherry-pick a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
make olddefconfig
make -j"$(nproc)"
make modules_install
make install
reboot
如果你不自行重建内核,请安装包含移植修复的厂商内核包并重启进入该内核。
如果修补被延迟,可禁用模块路径作为临时措施:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
这只是缓解措施,并非修复。
6.12.0-124.45.1.el10_1| SUSE 16 | 6.12.0-160000.9-default |