Skip to main content

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.105.10.254
5.155.15.204
6.16.1.170
6.66.6.137
6.126.12.85
6.186.18.22
6.196.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 -> 加密输入
|
+-- 错误进入可写输出路径
|
+-- 文件缓存内容被改变
  • 复现应观察目标缓存内容与后续程序行为;脚本成功导入、系统版本命中或接口可用均不能代替漏洞验证
  • 作者列出的测试环境只是其报告的组合,不代表所有同系列发行版都已验证;脚本会影响特权程序的缓存内容

参考​