本仓库提供了公开 Copy Fail PoC 的 Go 移植版本,以及一个可复现的多架构 Linux 二进制构建流水线。
Copy Fail(CVE-2026-31431)是 Linux 内核中 authencesn 的一个逻辑缺陷,它能够通过 AF_ALG + splice() 实现对页缓存数据确定性的 4 字节写入。
请仅在您被明确授权测试的环境中使用本项目。请勿针对您不拥有或未经书面许可评估的系统运行此 PoC。
如果您想立即测试而无需从源码构建,请下载发布二进制文件并运行:
wget https://github.com/ErdemOzgen/copy-fail-cve-2026-31431/releases/download/v1.0.1/copy-fail-cve-2026-31431_linux_amd64
chmod +x copy-fail-cve-2026-31431_linux_amd64
./copy-fail-cve-2026-31431_linux_amd64
对于其他架构,请从 GitHub Releases 页面下载对应的资源:
https://github.com/ErdemOzgen/copy-fail-cve-2026-31431/releases
构建所有 Linux 目标:
make clean build-linux
构建并生成校验和:
make clean checksums
dist/ 中的输出二进制文件:
copy-fail-cve-2026-31431_linux_amd64copy-fail-cve-2026-31431_linux_arm64copy-fail-cve-2026-31431_linux_386copy-fail-cve-2026-31431_linux_armv7SHA256SUMS默认运行:
./copy-fail-cve-2026-31431_linux_amd64
使用自定义目标路径:
./copy-fail-cve-2026-31431_linux_amd64 -target /path/to/binary
禁用运行后 su 执行:
./copy-fail-cve-2026-31431_linux_amd64 -spawn-su=false
打印构建元数据:
./copy-fail-cve-2026-31431_linux_amd64 -version
如果在偏移量 0 处执行失败并出现类似错误:
error: copy chunk at offset 0: splice(pipe->AF_ALG): software caused connection abort
内核很可能拒绝了易受攻击的 AEAD 就地路径(例如,因为主机已针对 CVE-2026-31431 打了补丁,或者 algif_aead 已被缓解/禁用)。
快速检查:
uname -r
grep -E "algif_aead|authencesn" /proc/modules
在已修复的系统上,此 PoC 预计会失败。
根据公开披露,易受攻击的路径允许非特权本地用户在特定条件下,对可读文件的页缓存内容实施 4 字节写入原语。
重要的操作特性是,内存中的页缓存副本在运行时可能与磁盘上的字节产生偏差,这使得仅依赖磁盘级完整性检查的团队难以进行影响分析。
Copy Fail 之所以引人注目,是因为它被报告为:
从高层来看,该问题位于三种机制的交叉点:
AF_ALG AEAD 请求处理。splice() 页缓存支持的数据移动。authencesn 解密临时缓冲区行为。在易受攻击的设计中,页缓存支持的段可以被链接到一种请求形态中,该形态在算法处理期间会接收到写入,这违反了只有预期目标区域才会被修改的关键假设。
在已记录的路径中,authencesn 在 ESN 布局处理周围使用目标侧临时缓冲区操作,并在超出预期解密输出契约的偏移量处执行写入。
当与就地 AEAD 设置和链式 scatterlist 引用结合时,该写入可以落入攻击者选定区域的页缓存支持内存中。
该披露描述了多提交的演变过程:
authencesn 行为源于早期的集成历史。AF_ALG AEAD 支持通过 splice() 交互引入了用户空间可达性。algif_aead 中的就地优化以某种方式结合了源和目标流程,使得这一交叉点变得可利用。关键教训是组合风险:单独合理的更改在组合后可能变得不安全。
公开的撰写和 PoC 描述了以下序列:
authencesn(hmac(sha256),cbc(aes)) 的 AF_ALG AEAD 套接字。splice() 将页缓存支持的文件数据路由到请求路径。本仓库的 Go 实现镜像了该公开 PoC 的逻辑,用于在授权环境中进行研究和验证。
已报告的修复将 algif_aead 中易受攻击的就地 AEAD 操作恢复为异地行为。
概念上:
AF_ALG 使用实施策略限制)。基于公开撰写:
| 日期 | 事件 |
|---|---|
| 2026-03-23 | 报告提交给 Linux 内核安全团队 |
| 2026-03-24 | 初步确认 |
| 2026-03-25 | 补丁讨论/审查 |
| 2026-04-01 | 修复提交到主线 |
| 2026-04-22 | 分配 CVE-2026-31431 |
| 2026-04-29 | 公开披露 |
已发表的研究归功于人工引导、AI 辅助的子系统分析,重点关注用户空间可达的加密代码路径以及 splice() 下的 scatterlist/页来源。
main.go:Go PoC 移植版本。Makefile:确定性的多架构 Linux 构建目标。.github/workflows/build.yml:CI 构建和发布工件工作流。工作流文件:.github/workflows/build.yml
触发器:
mainv* 的标签推送workflow_dispatch行为:
make clean checksums 构建所有 Linux 二进制文件并生成校验和。v* 的标签发布发布资源。建议的发布流程:
git tag v1.0.0
git push origin v1.0.0
| 发行版 | 内核版本 |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |