一句话概述:任何能登录 Linux 服务器的普通用户,运行一段不到 1KB 的 Python 脚本,几秒内即可获得 root 权限。利用成功率 100%,不会导致系统崩溃。该漏洞自 2017 年存在至今,PoC 已于 4 月 29 日公开。安多多已经成功复现并支持用户处置。
概述
2026-04-29,Theori 研究员 Taeyang Lee 公开披露该漏洞,并发布 732 字节 Python PoC。
漏洞位于内核 crypto/algif_aead.c,根源是 authencesn AEAD 模板的直线逻辑缺陷。攻击者仅需低权限本地账户即可 100% 确定性提权至 root — 无竞争条件、无内核偏移、无崩溃。

利用链路
// 1. 创建 AF_ALG socketsocket(38, SOCK_SEQPACKET, 0)
// 2. 绑定有漏洞的 AEAD 算法bind("aead", "authencesn(hmac(sha256),cbc(aes))")
// 3. sendmsg 携带 payload + splice 目标文件 page cachesendmsg(AAD[4:7] = payload) + splice(target_fd)
// 4. recv 触发解密 → 4 字节写入 page cacherecv() → scatterwalk_map_and_copy → kmap_local_page
// 5. 执行被篡改的 SUID binaryexecve("/usr/bin/su") → root
攻击者完全控制:写入目标(任何可读文件)、写入偏移(splice offset + assoclen)、写入值(AAD bytes 4-7)。每次 4 字节,多次调用注入完整 shellcode。PoC 仅需 Python 3.10+ 标准库。
根本原因
漏洞由三个独立改动在交叉点上形成:
2011a5079d084f8b — authencesn 加入内核,使用 dst scatterlist 作为临时空间,当时无害。
2015104880a6b470 — 转换为新 AEAD 接口,引入 assoclen+cryptlen 越界写。AF_ALG 此时 out-of-place,尚不可利用。
201772548b093ee3 — 漏洞引入。algif_aead 增加 in-place 优化(req->src = req->dst),splice() 传入的 page cache 页面进入可写目标 scatterlist。
关键代码路径 — crypto_authenc_esn_decrypt():
// 读取 AAD[0:7]scatterwalk_map_and_copy(tmp, dst, 0, 8, 0);// 写回 seqno_hi 到 dst[4:7]scatterwalk_map_and_copy(tmp, dst, 4, 4, 1);// VULNERABLE: seqno_lo 写到 dst[assoclen+cryptlen]// 越过 AEAD 输出边界 → 直接写入 page cache 页面scatterwalk_map_and_copy(tmp+1, dst, assoclen+cryptlen, 4, 1);
被写入的页面永远不会标记为 dirty,磁盘文件不变 — 传统文件完整性工具无法检测。
影响范围
引入 commit 72548b093ee3 (2017)
修复 commit a664bf3d603d (2026-04-01)
范围 所有 2017 年以来构建的 Linux 内核
经 Theori 实测确认:
经安多多确认受影响(内核在漏洞窗口内):
openEuler 22.03 / 24.03 | 5.10 / 6.6 |
Alibaba Cloud Linux 3 / 4 | 5.10 / 6.6 |
Amazon Linux 2023 | 6.18 |
SUSE 15 / 16 | 5.14 / 6.12 |
CentOS 7(内核 3.10)和 FreeBSD 不受影响。Page cache 跨容器共享,该漏洞可作为容器逃逸原语。
与历史漏洞对比
风险评估
修复建议
1. 升级内核(等待官方方案)
修复将 algif_aead 恢复为 out-of-place 操作,彻底移除 2017 年 in-place 优化。
Fix commit: a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5Fixes: 72548b093ee3 (2017)合入: 2026-04-01 mainline状态: 各发行版补丁陆续推送中
// algif_aead.c — the fix- aead_request_set_crypt(&req, rsgl_src, rsgl_src, ...); // in-place+ aead_request_set_crypt(&req, tsgl_src, rsgl_src, ...); // out-of-place
2. 临时缓解(无法立即升级,无需重启)
注意:截至 2026 年 4 月 30 日,国内各云厂商(腾讯云、阿里云、华为云)均未发布针对此漏洞的内核补丁。请先执行临时缓解方案。
# 禁止模块加载echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
cat /etc/modprobe.d/disable-algif.conf
# 卸载已加载模块rmmod algif_aead 2>/dev/null || true
# 验证lsmod | grep algif_aead
3. 容器环境加固
通过 seccomp 禁止 AF_ALG socket 创建(family=38):
"syscalls": [{ "names": ["socket"], "action": "SCMP_ACT_ERRNO", "args": [{"index": 0, "value": 38, "op": "SCMP_CMP_EQ"}]}]
禁用 algif_aead 不影响 dm-crypt、kTLS、IPsec、SSH、OpenSSL/GnuTLS 等常规加密功能。仅影响显式启用 AF_ALG afalg engine 的极少数场景,受影响路径自动回退用户态加密库。
自查
# 内核版本uname -r
# 内核配置是否启用grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)
# 模块是否已加载lsmod | grep algif
# AF_ALG socket 是否可创建python3 -c "import socket; socket.socket(38,5,0); print('VULNERABLE')"
时间线
2017 — 漏洞引入(commit 72548b093ee3)
2026-03-23 — 报告至 Linux 内核安全团队
2026-03-24 — 收到确认
2026-03-25 — 补丁审查通过
2026-04-01 — 修复合入主线
2026-04-22 — CVE-2026-31431 分配
2026-04-29 — 公开披露(copy.fail)
2026-04-30 — 本预警发布
参考
https://copy.fail
https://xint.io/blog/copy-fail-linux-distributions
https://github.com/theori-io/copy-fail-CVE-2026-31431
https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
让龙虾🦞真正干安全运营,首个AI查资产、看风险、出PPT的安全Skill上线
捕获攻击者利用OpenClaw自动化攻击,云上AKSK泄露后3分钟窃取AI算力
安多多-Wiz级多云安全平台,资产真实风险一张图看清,正式开放使用
