用途:CopyFail Go 是 CVE-2026-31431(CopyFail)的 Go 语言静态实现,针对 Linux 内核 AF_ALG AEAD scatterlist 处理的逻辑缺陷,用于本地提权(LPE)。该漏洞非竞态类,无需时间窗口或内核特定偏移。
影响范围:起始 commit 72548b093ee3(2017 年 8 月,v4.14),修复 commit a664bf3d603d(2026 年 4 月)。披露时确认受影响的有 Ubuntu、RHEL、SUSE、Amazon Linux、Debian 标准云镜像。
原理:滥用 2017 年引入的 AF_ALG AEAD 原地优化,通过 splice 将页缓存页用作可写加密目标,从而向只读文件支持的页面(如 setuid 的 /usr/bin/su)写入任意内容。程序就地修补 /usr/bin/su,生成 root shell,再恢复原文件。
用法:从 GitHub release 下载对应架构二进制并 chmod +x。交互式 root shell 使用 ./copyfail-go --backup /tmp/su;以 root 执行指定程序用 ./copyfail-go --backup /tmp/su --exec ./your-binary。--backup 保存原始 su,--exec 以 root 执行二进制而非交互 shell。
可从源码构建:需 Go 与 goreleaser,payload 依赖 nasm、python3 及交叉 binutils。执行 ./build-n-print.sh 生成 zlib 压缩的十六进制 payload,嵌入 main.go;用 goreleaser build --snapshot --clean 或 GOOS/GOARCH 构建。
验证与限制:可通过 grep a664bf3d603d 检查内核 changelog,或用 uname -r 做版本日期启发式判断(非确定)。需 AF_ALG 套接字支持;若返回 operation not permitted 通常表示内核已修补。架构不匹配会导致无 shell 直接退出。使用后务必恢复 /usr/bin/su,否则系统损坏且易被检测。