Copy Fail 是 Linux 内核中的一个本地提权漏洞,漏洞编号为 CVE-2026-31431。

这个漏洞的危险点在于:攻击者不需要远程入口,只要已经拿到系统上的普通本地用户权限,就可能进一步提权到 root。对于多用户服务器、CI Runner、容器宿主机、Kubernetes 节点、在线代码运行环境等共享内核的场景,需要优先关注。

漏洞概况

根据 NVD 信息,CVE-2026-31431 位于 Linux kernel 的 crypto: algif_aead 相关逻辑中,kernel.org 给出的 CVSS 3.1 分数为 7.8,评级为 High,向量为:

1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

简单解释一下:

  • AV:L:需要本地访问权限。
  • AC:L:攻击复杂度低。
  • PR:L:需要低权限用户。
  • UI:N:不需要用户交互。
  • C:H/I:H/A:H:可能影响机密性、完整性和可用性。

CISA 已将该漏洞加入 Known Exploited Vulnerabilities Catalog,并要求相关系统按厂商说明修复或采取缓解措施。

原理简述

Copy Fail 的核心问题出现在 Linux 内核 crypto 子系统中,涉及 AF_ALGalgif_aeadauthencesnsplice() 等机制。

公开分析中提到,漏洞可被构造成一次受控的 page cache 写入。也就是说,攻击者可以影响内存中的文件缓存内容,而磁盘上的原始文件并不会被普通写入路径直接修改。

这类行为比较棘手,因为传统的磁盘文件校验可能看不出异常,但系统实际读取文件时,读到的是 page cache 中被影响后的内容。攻击者可以借此影响 setuid 程序等敏感文件在内存中的表现,从而完成本地提权。

这里不展开利用过程,也不放 PoC。对运维和防守来说,重点是确认系统是否受影响,并尽快更新内核。

影响范围

公开页面 copy.fail 提到,2017 年以来的主流 Linux 发行版内核都可能在影响范围内,研究者验证过 Ubuntu、Amazon Linux、RHEL、SUSE 等发行版。

需要注意的是,发行版内核经常会 backport 安全补丁,所以不能只看主版本号判断是否安全。更可靠的做法是查看发行版安全公告和内核包更新记录。

重点排查这些环境:

  • 多用户 Linux 服务器。
  • 跳板机、开发机、教学机等共享 Shell 环境。
  • 自托管 GitHub Actions、GitLab Runner、Jenkins Agent 等 CI 机器。
  • Kubernetes 节点和运行不可信容器的宿主机。
  • 在线判题、Notebook、沙箱、Serverless 等运行用户代码的环境。

排查方法

查看当前内核版本:

1
uname -a

查看是否加载了 algif_aead 模块:

1
lsmod | grep algif_aead

查看系统中是否存在 AF_ALG 相关使用:

1
ss -xa | grep ALG

也可以检查发行版安全更新。

Debian / Ubuntu:

1
apt list --upgradable | grep linux

RHEL / Rocky / AlmaLinux / Fedora:

1
dnf updateinfo list --security | grep kernel

如果系统运行容器或 CI 任务,不要只在容器内检查,应该在宿主机上确认内核状态。

修复建议

最推荐的方式是升级到发行版已经修复的内核版本,然后重启进入新内核。

Debian / Ubuntu:

1
2
3
sudo apt update
sudo apt upgrade
sudo reboot

RHEL / Rocky / AlmaLinux / Fedora:

1
2
sudo dnf upgrade
sudo reboot

重启后再次确认:

1
uname -a

如果暂时无法升级内核,可以按厂商建议临时禁用 algif_aead 模块:

1
2
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead

如果模块正在被使用,rmmod 可能失败。生产环境操作前建议先确认业务是否依赖 AF_ALG,必要时安排维护窗口。

对于容器、沙箱、CI 等运行不可信代码的场景,还建议通过 seccomp 阻止创建 AF_ALG socket,降低类似攻击面的暴露。

小结

Copy Fail 不是远程漏洞,但它非常适合被用作攻击链中的“提权一步”。例如 Web 服务先被打出普通用户权限,再利用该漏洞拿到 root;或者用户提交的 CI 代码、容器任务进一步逃逸到宿主机层面。

处理优先级建议:

  1. 多租户、容器、CI、沙箱环境优先修。
  2. 普通服务器尽快随发行版安全更新升级内核。
  3. 暂时无法升级时,评估禁用 algif_aead 和限制 AF_ALG socket。
  4. 修复后重启,并确认当前运行内核已经切换到修复版本。

参考资料: