flawopen.com/Teardowns/cve-2026-31431-linux-algif-aead-copy-fail
●
CVE-2026-31431 · CVSS 7.8 · 高危
安全研究 · FlawOpen
CVE-2026-31431:Linux 内核 Copy Fail 漏洞
Copy Fail 是 Linux AF_ALG AEAD 路径中的本地提权漏洞。原地优化混淆了源和目标映射;上游修复恢复非原地处理,CISA 已将该 CVE 列入 KEV。[1], [2], [5]
💡 通俗易懂的原理解析 (ELI5)
图书管理员要在复印件上做标记,但机器的快捷方式让铅笔落在原书上。加密路径的原地快捷处理使结果写入可能到达另一映射页面。内核修复分别处理源和目标,确保写入只落在指定的副本页面。[3], [8]
核心概念与专有名词
AEAD- 带关联数据的认证加密:加密数据并认证额外的未加密元数据。[8]
algif_aead- AF_ALG 对 AEAD 算法的实现,包括存在源/目标处理缺陷的路径。[3]
Page cache- 内核中的文件内容缓存;对映射页面的写入可能影响磁盘回写前的读取。[8]
框架映射
- 本指南所述弱点的 CWE 参考: CWE-669 CWE-1288
- CISA KEV — 收录日期 2026-05-01 — CVE-2026-31431
根本原因剖析 (Root Cause)
2017 年变更 72548b093ee3 在 algif_aead 中引入原地优化。源和目标可能来自不同映射。authencesn 处理可能把临时数据写出预期输出区域;原地 scatterlist 可能使写入落到通过 splice() 提供的文件页缓存页面。Linux CVE 通知将修复描述为恢复非原地处理,同时保留关联数据复制。需要本地访问且易受影响路径已启用。CVSS 7.8(AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H);不是未经身份验证的远程入口。[1], [3], [8], [7], [9], [10]
攻击执行流程分解
源代码对比:漏洞与安全实现
这是概念性总结,并非内核源码原文或可编译补丁。上游通知称修复基本回退 72548b093ee3,但保留关联数据复制,因为源和目标映射不同。[3], [2]
源码摘录: crypto/algif_aead.c (_aead_recvmsg)
存在漏洞的实现
/* 修复前:让加密操作在原缓冲区中就地执行。 */
rsgl_src = areq->first_rsgl.sgl.sg;
if (ctx->enc) {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, processed);
af_alg_pull_tsgl(sk, processed, NULL, 0);
} else {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, outlen);
/* 为认证标签构建并串联 TX scatterlist。 */
areq->tsgl_entries = af_alg_count_tsgl(sk, processed, processed - as);
/* ... */
}
aead_request_set_crypt(&areq->cra_u.aead_req, rsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
加固后的安全修复
/* 修复后:为每个请求保留单独的源 scatterlist。 */
processed = used + ctx->aead_assoclen;
areq->tsgl_entries = af_alg_count_tsgl(sk, processed);
/* 分配并初始化 areq->tsgl,然后将 TX 页面加入其中。 */
af_alg_pull_tsgl(sk, processed, areq->tsgl);
tsgl_src = areq->tsgl;
/* 复制关联数据,同时保持源和目标分离。 */
rsgl_src = areq->first_rsgl.sgl.sg;
memcpy_sglist(rsgl_src, tsgl_src, ctx->aead_assoclen);
aead_request_set_crypt(&areq->cra_u.aead_req, tsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
工程与系统安全加固清单
- ✓通过发行版支持渠道更新内核,并在软件包公告中确认已修复
CVE-2026-31431;不能仅凭通用上游版本号判断。[1], [5], [7] - ✓优先处理共享内核且存在不可信本地用户的主机,如多租户主机、构建节点和容器节点。[5], [7]
- ✓若无法立即更新,只采用操作系统供应商文档说明的缓解措施并验证影响;相关代码可能直接编入内核。[5], [7]
- ✓检查整个设备群的内核清单和软件包来源,包括不可变镜像及含回移修复的 LTS 分支。[5], [7]
- ✓容器共享宿主机内核,因此内核本地提权可能削弱基于 namespace 的隔离。[5], [8]
- ✓修复后继续关注供应商回移公告,并跟踪未修复主机;列入 KEV 不能替代补丁。[1], [5]
参考来源
- Linux kernel CVE notice for CVE-2026-31431
- Upstream stable patch: revert algif_aead to out-of-place operation
- Stable patch source with the algif_aead.c code diff
- CVE record and CVSS vector
- Canadian Centre for Cyber Security alert AL26-009
- CISA Known Exploited Vulnerabilities catalog entry
- Red Hat CVE analysis and affected product status
- Xint technical disclosure: Copy Fail — 732 Bytes to Root on Linux
- MITRE CWE-1288: Improper Validation of Consistency within Input
- MITRE CWE-669: Incorrect Resource Transfer Between Spheres
- NVD — CVE-2026-31431 weakness mapping (source: redhat-SADP)