CVE-2026-31431
- Copy Fail - Linux AF_ALG 加密接口错误地原地处理共享页,可导致本地权限提升
- CVE 记录公开:2026-04-22;研究者公开披露:2026-04-29
- 上游引入版本:Linux
4.14 - 严重性:CVSS 3.1
7.8 High(Linux CNA)CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
成因与利用条件
algif_aead的原地处理优化使通过AF_ALG、splice()引入的文件页缓存可能进入可写目标散列表- 研究者通过
authencesn路径实现 4 字节的页缓存写入,进而修改特权程序所读取的内容 - 需要本地执行能力,以及可达的 AF_ALG AEAD 接口、相应加密算法和相关系统调用
- 普通本地用户可访问该接口时,不需要先取得 root
- 容器内是否可达取决于宿主机内核、功能配置、seccomp 等限制;不能据此认定所有容器均可逃逸
- 该公开路径是逻辑错误,不依赖竞态窗口;与 Dirty COW 的写时复制竞态不同
- 页缓存修改不保证持久落盘,但已经获得的权限仍可被用于进一步入侵
修复与缓解
| 上游分支 | Linux CNA 列出的修复版本 |
|---|---|
| 5.10 | 5.10.254 |
| 5.15 | 5.15.204 |
| 6.1 | 6.1.170 |
| 6.6 | 6.6.137 |
| 6.12 | 6.12.85 |
| 6.18 | 6.18.22 |
| 6.19 | 6.19.12 |
| 主线正式版 | 7.0 |
- 上游修复:
a664bf3d603d,撤销相关原地处理优化,改为使用独立输出缓冲区 - 使用发行版包含修复的内核并确认已运行;表中未列出的老分支需另查厂商回补,不能套用其他分支的版本号
- 暂时禁用
algif_aead可阻断相关入口,但应确认模块已卸载并阻止再次加载;内建功能不能靠模块黑名单关闭- 会影响实际使用 AF_ALG AEAD 的程序,需按业务评估
- 对不可信任务限制 AF_ALG socket 创建可以缩小攻击面,但不能据此假定既有或传入的相关文件描述符也已失效
- 以上 AF_ALG 缓解不覆盖 Dirty Frag 的网络栈路径
PoC
- 作者仓库
theori-io/copy-fail-CVE-2026-31431提供copy_fail_exp.py - 该实现使用 AF_ALG、authencesn 与 splice 路径,目标包含
/usr/bin/su;它是页缓存篡改和提权演示 - 原理示意:
文件页缓存 -> splice -> 加密输入
|
+-- 错误进入可写输出路径
|
+-- 文件缓存内容被改变
- 复现应观察目标缓存内容与后续程序行为;脚本成功导入、系统版本命中或接口可用均不能代替漏洞验证
- 作者列出的测试环境只是其报告的组合,不代表所有同系列发行版都已验证;脚本会影响特权程序的缓存内容