当前位置:首页>Linux>Linux 内核曝 CVE-2026-31431 高危漏洞,可实现 Root 提权

Linux 内核曝 CVE-2026-31431 高危漏洞,可实现 Root 提权

  • 2026-10-11 08:22:56
Linux 内核曝 CVE-2026-31431 高危漏洞,可实现 Root 提权

一、漏洞概述

CVE-2026-31431(CopyFail)是 Linux 内核 AF_ALG AEAD 接口 中的一个本地权限提升漏洞。该漏洞由一个 逻辑缺陷 引起——不是竞态条件,不需要特定内核偏移量——稳定利用,影响 自 2017 年以来的所有主流 Linux 发行版。

该漏洞允许本地无特权用户通过修改任意只读文件的页缓存(page cache),在不修改磁盘文件的前提下篡改 setuid 二进制文件(如 /usr/bin/su)的内存映像,从而实现从普通用户到 root 的权限提升。


二、技术原理深度分析

2.1 根本原因

2017 年,commit 72548b093ee3 为 algif_aead.c 引入了一项"原地操作"(in-place)优化:在 AEAD 解密时,将源 scatterlist 和目标 scatterlist 设置为同一对象(req->src = req->dst),省去了数据拷贝开销。

然而,当用户通过 splice() 系统调用将文件页缓存页引入 AF_ALG 的输入缓冲区时,这些页缓存页同时出现在了可写的目标 scatterlist 中。

2.2 触发链条

1. splice()    将目标文件(如 /usr/bin/su)的页缓存页引入 AF_ALG 的 TX 缓冲区       ↓2. algif_aead  将 tag 字节从 TX SGL 移动并链接到 RX SGL(此时 RX SGL 包含文件页缓存页)       ↓3. authencesn  将 req->src = req->dst 视为原地缓冲区       ↓4. 解密过程中   在 dst[assoclen + cryptlen] 位置执行 4 字节越界写入(scratch write)       ↓5. 写入发生在 tag 校验之前,即使解密失败(-EBADMSG),页缓存已被修改       ↓6. execve() 目标文件时加载被篡改的页缓存 → root shell

2.3 关键代码路径

根据 oss-security 邮件列表披露的技术细节:

  • algif_aead.c:235-244:将 tag 字节从 TX SGL 移至 RX SGL
  • algif_aead.c:251-252:设置 req->src = req->dst(in-place 优化)
  • authencesn.c:277-279:执行 4 字节写入到 tag 区域
  • authencesn.c:222-223:tag 校验(此时写入已完成,返回 -EBADMSG 为时已晚)

2.4 为什么是"逻辑缺陷"而非竞态

大多数内核 LPE 漏洞需要精确的竞态窗口(race window)或内核版本特定的偏移量。CopyFail 的特殊之处在于:

  • 确定性执行:每次 splice + decrypt 操作必定触发 4 字节写入
  • 无竞态条件:不依赖时序,100% 可靠
  • 跨架构通用:不依赖特定内核偏移量
  • 利用代码已广泛传播:GitHub 上已有 27+ 个相关仓库,包含多语言实现

三、影响范围评估

3.1 受影响内核版本

项目
详情
引入 commit
72548b093ee3
(2017 年 8 月,v4.14 起)
修复 commit
a664bf3d603d
(2026-04-01,主线)
受影响窗口
2017.08 → 2026.04(近 9 年)
受影响 LTS 版本
5.10、5.15、6.1、6.6、6.12(截至公开日均未修复)
已修复版本
6.18 LTS(6.18.22 起)

稳定分支修复 commits(来自 NVD):

  • a664bf3d603d(主线)
  • ce42ee423e58(稳定分支)
  • fafe0fa2995a(稳定分支)

3.2 受影响发行版

实际验证:

Theori 官方直接验证的发行版:

发行版
内核版本
Ubuntu 24.04 LTS
6.17.0-1007-aws
Amazon Linux 2023
6.18.8-9.213.amzn2023
RHEL 10.1
6.12.0-124.45.1.el10_1
SUSE 16
6.12.0-160000.9-default

此外,Debian、Arch、Fedora、Rocky、Alma、Oracle Linux、Kali 以及各类嵌入式发行版同样受影响(使用相同内核代码路径)。

3.3 前提条件

  • ✅ 本地普通用户权限(无需 root)
  • ✅ AF_ALG 内核支持(主流发行版默认启用)
  • ✅ 目标系统存在 setuid 二进制文件
  • ❌ 不需要网络访问
  • ❌ 不需要内核调试功能
  • ❌ 不需要额外预装工具

3.4 风险等级评估

场景
风险等级
说明
多租户 Linux 主机
高
共享开发机、跳板机、构建服务器 → 任意用户可提权为 root
K8s/容器集群
高
页缓存在主机共享,Pod 可突破至节点级别
CI/CD Runner
高
GitHub Actions 自托管 Runner、GitLab Runner → PR 代码可获取主机 root
云 SaaS(运行用户代码)
高
Notebook 主机、Agent 沙箱、Serverless → 租户可提权为宿主 root
标准生产服务器
中
单租户环境,但可与其他漏洞链式组合(如 Web RCE)
个人工作站
较低
单用户场景,仅作为后渗透提权手段

3.5 容器逃逸原语

特别值得注意的是,CopyFail 提供了容器逃逸原语。由于页缓存在宿主机内核中共享,容器内的攻击者可以修改宿主机上 setuid 二进制文件的页缓存,从而逃逸到宿主机并获得 root 权限。这对 Kubernetes 多租户环境构成严重威胁。


四、修复与缓解措施

4.1 正式修复方案

更新内核至包含修复 commit a664bf3d603d 的版本。该修复回退了 2017 年的 in-place 优化,将源和目标 scatterlist 分离,使页缓存页不再出现在可写的加密目标中。

各发行版补丁状态(截至 2026-04-30):

  • 主线内核:已合并(2026-04-01)
  • 各 LTS 稳定分支:回移补丁已发布
  • 主流发行版:正在推送更新包

4.2 临时缓解措施

在打补丁前,立即禁用 algif_aead 模块:

echo"install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.confrmmod algif_aead 2>/dev/null || true

兼容性影响评估:

  • ❌ 不影响: dm-crypt/LUKS、kTLS、IPsec/XFRM、OpenSSL/GnuTLS/NSS 默认构建、SSH、内核 keyring 加密(这些使用内核内部 crypto API,不走 AF_ALG)
  • ⚠️ 可能影响: 显式启用 AF_ALG engine 的 OpenSSL、部分嵌入式加密卸载路径、直接绑定 aead/skcipher/hash socket 的应用
  • 💡 性能影响: AF_ALG 是用户态到内核 crypto API 的接口,禁用后受影响应用回退到用户态加密库,性能基本无感知

4.3 加固建议(针对不可信工作负载)

对于容器、沙箱、CI 环境中的不可信工作负载,无论是否已打补丁,都应通过 seccomp 阻止 AF_ALG socket 创建。


五、信息披露时间线

日期
事件
2017-08
引入 commit 72548b093ee3(AF_ALG iov_iter rework)
2026-03-23
向 Linux 内核安全团队报告漏洞
2026-03-24
内核安全团队初步确认
2026-03-25
补丁提出并审查
2026-04-01
补丁合入主线内核
2026-04-22
CVE-2026-31431 正式编号
2026-04-29
公开披露(copy.fail)+ oss-security 邮件列表公告

六、参考链接

  1. 官方漏洞网站: https://copy.fail[1]
  2. NVD CVE 详情: https://nvd.nist.gov/vuln/detail/CVE-2026-31431[2]
  3. 修复 commit: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a664bf3d603d[3]
  4. 引入 commit: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72548b093ee3[4]
  5. oss-security 公告: http://www.openwall.com/lists/oss-security/2026/04/29/23[5]

七、总结与建议

核心结论

CopyFail 是近十年来影响最广泛的 Linux 内核 LPE 漏洞之一:

  1. 覆盖面极广:影响 2017 年以来几乎所有 Linux 系统,时间跨度近 9 年
  2. 利用门槛极低:无需竞态、无偏移量依赖、确定性触发
  3. 利用代码已广泛传播:GitHub 上已有 27+ 个相关仓库,包含多语言实现
  4. 影响多种部署形态:传统服务器、容器、CI/CD、云 SaaS 均受影响

行动建议

  1. 立即执行临时缓解:在所有 Linux 服务器上禁用 algif_aead 模块
  2. 尽快更新内核:升级至包含 a664bf3d603d 的发行版内核包
  3. 容器环境加固:通过 seccomp 禁止 AF_ALG socket 创建
  4. 排查入侵痕迹:检查系统中 setuid 二进制文件的页缓存是否被异常修改
  5. 持续关注发行版公告:各发行版正在推送补丁,保持关注更新状态

最新文章

随机文章