今天,一个名为“Copy Fail”的Linux内核漏洞(CVE-2026-31431)被正式公开披露。这个漏洞可以用一个仅仅732字节的Python脚本,在几乎所有2017年以来发布的Linux发行版上实现100%可靠的本地提权(LPE),直接获取root权限。更致命的是,它还是一个完美的容器逃逸原语,因为它直接修改的是主机共享的页面缓存(page cache)。这不是普通的race condition漏洞,也不需要任何内核特定偏移量。同一个脚本就能通杀Ubuntu、Amazon Linux、RHEL、SUSE等主流发行版,堪称“史诗级”。漏洞核心:直线逻辑错误(Straight-Line Logic Flaw)Copy Fail的根源位于Linux内核加密子系统(crypto)的authencesn AEAD模板中(用于IPsec的Extended Sequence Number支持)。2017年,algif_aead模块引入了一个“in-place优化”,让AF_ALG socket在处理AEAD解密时,将page cache页面直接放入可写的scatterlist(分散/聚集列表)。攻击者通过splice()零拷贝机制,把任意可读文件(如/usr/bin/su)的page cache页面传入AF_ALG socket的输入/输出scatterlist。随后,crypto_authenc_esn_decrypt()函数会把调用者的目标缓冲区当作临时暂存空间(scratch space),在输出边界之外写入4字节的seqno_lo,并且永远不会恢复原始数据。这就是经典的“Copy Fail”——复制操作“失败”了,超出了缓冲区边界。整个过程不需要race、无需重试、单次直线执行即可成功。PoC利用AF_ALG + splice() + authencesn的组合,实现对任意可读文件page cache的精确4字节覆盖。利用效果惊人
- 便携性:同一732字节Python脚本(仅依赖os、socket、zlib标准库,Python 3.10+支持os.splice),无需修改、无需编译、无需依赖,即可在所有受影响发行版上运行。
- 隐蔽性极高:仅修改内存中的page cache,不触碰磁盘文件。无inotify事件、无dirty标记、重启或drop_caches后自动恢复干净状态。普通文件完整性工具(如sha256sum、AIDE)在内存中能检测到,但磁盘镜像和forensics几乎看不出痕迹。
- 跨容器:page cache是主机级共享的,一个普通Pod就能逃逸并接管整个节点。
演示效果:同一个脚本,在Ubuntu 24.04、Amazon Linux 2023、RHEL、SUSE上全部一次性拿到root shell(官方tmux演示已公开)。PoC代码已开源(sha256校验值公开可验):
GitHub地址:https://github.com/theori-io/copy-fail-CVE-2026-31431影响范围(2017–2026,近9年窗口)几乎所有主流发行版默认内核均受影响(AF_ALG默认启用):
- Ubuntu 24.04 LTS
- Amazon Linux 2023
- RHEL 14.3
- SUSE 16
- 以及Debian、Fedora、Arch、Rocky、AlmaLinux、Oracle Linux等
高危场景(强烈建议立即处理):
- 多租户主机、共享开发/跳板机
- Kubernetes / 容器集群(节点逃逸 + 跨租户)
- CI/CD runners(GitHub Actions自托管、GitLab、Jenkins等,PR代码直接提权)
- 云SaaS中运行用户代码的环境(notebook、serverless、agent sandbox)
单用户笔记本风险较低,但仍建议打补丁。缓解措施(优先级:高)1. 立即打补丁更新内核到包含**mainline commit a664bf3d603d**的版本。该补丁回滚了2017年的algif_aead in-place优化,让page cache页面不再进入可写scatterlist。大部分主流发行版已开始推送。2. 临时紧急缓解(补丁未到前)禁用algif_aead模块(对绝大多数系统几乎无副作用):
影响:dm-crypt/LUKS、kTLS、IPsec、OpenSSL默认构建、SSH等均不受影响。只有显式使用AF_ALG的用户态程序可能回退到用户态crypto库,性能无明显变化。3. 额外加固在容器/CI环境中,通过seccomp策略直接阻断AF_ALG socket创建。与其他著名LPE的对比
特性 | 典型Linux LPE | Copy Fail |
|---|
是否需要race | 是 | 否 |
是否需要offsets | 是 | 否 |
成功率 | 30–80% | 100% 单次成功 |
受影响时间窗 | 窄 | 2017–2026(9年) |
隐蔽性 | 一般 | 极高(仅内存修改) |
容器逃逸 | 通常不是 | 是 |
总结与建议Copy Fail再次证明:内核中一个看似“优化”的小改动,如果没有严格的边界检查,就可能成为致命武器。页面缓存的共享设计在多租户时代变成了双刃剑。行动建议:
- 立即检查你的内核版本和algif_aead模块状态
- 优先为生产环境、多租户主机、K8s集群打补丁
- 关注官方补丁推送(CVE已于2026-04-29公开)
原文公告:https://copy.fail/完整技术根因分析(含scatterlist图解):https://xint.io/blog/copy-fail-linux-distributions