【紧急预警】CopyFail:CVE-2026-31431Linux内核本地提权漏洞深度解析

admin 2026-05-02 06:25:40 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: CVE-2026-31431(代号CopyFail)是Linux内核authencesn加密模板中的高危本地提权漏洞,CVSS评分7.8。漏洞源于2017年引入的in-place解密优化逻辑缺陷,允许攻击者通过可控4字节写入页缓存劫持setuid程序,影响2017年后所有主流内核版本且无需竞争条件。文档提供了漏洞原理、复现步骤、信创系统影响分析及修复方案(内核更新或禁用algif_aead模块),建议立即应用补丁并检查容器环境seccomp策略。 综合评分: 88 文章分类: 漏洞分析,应急响应,威胁情报,解决方案,漏洞预警


cover_image

【紧急预警】Copy Fail:CVE-2026-31431 Linux内核本地提权漏洞深度解析

原创

Z0安全 Z0安全

Z0安全

2026年4月30日 14:38 山东

在小说阅读器读本章

去阅读

1 漏洞简介

2026年4月29日,安全研究团队 Theori(通过 Xint Code)公开披露 CVE-2026-31431 漏洞,代号“Copy Fail”。这是一枚存在于 Linux 内核 authencesn 加密模板中的高危本地提权漏洞,CVSS 评分 7.8,攻击复杂度低,无需竞争条件、无需特定内核版本偏移,一个仅 732 字节的 Python PoC 即可在受影响系统上稳定获取 root 权限。

与近年来曝光的 Dirty Cow、Dirty Pipe 等内核提权漏洞不同,Copy Fail 的利用路径呈现”直线型”特征——没有复杂的时序依赖,没有版本特定的内存布局要求,成功率 100%。攻击者只需向系统上任意可读文件的页缓存写入 4 个可控字节,即可劫持 setuid 二进制程序的执行流程。

| | | | — | — | | CVE编号 | CVE-2026-31431 | | 漏洞代号 | Copy Fail | | CVSS评分 | 7.8(高危)① | | 攻击向量 | 本地(AV:L) | | 攻击复杂度 | 低(AC:L) | | 权限要求 | 低权限(PR:L) | | 漏洞类型 | 本地权限提升(LPE) | | 影响内核 | 2017年至今(含 5.x / 6.x 全系列) | | 漏洞引入commit | 72548b093ee3 | | 修复commit | a664bf3d603d |

① Ubuntu 安全页面评分为 7.8,Amazon Linux 评分为 5.5,存在评分差异。多租户、容器环境建议按高危处理。

这个漏洞的特殊之处在于其“逻辑缺陷”而非传统意义的内存破坏。攻击者并非通过溢出或 UAF 控制内存,而是巧妙利用了内核加密子系统的一个 in-place 优化,诱导内核在页缓存中写入未经适当授权验证的数据。

2 漏洞原理与影响范围

漏洞根因分析

2017年,内核 crypto 子系统为优化 AEAD(认证加密)性能,在 algif_aead.c 中引入了一项改进(commit 72548b093ee3):将解密操作改为 in-place 执行,即直接在目标缓冲区就地完成加解密。这个优化看似无害,却为攻击者打开了一扇侧门。

正常的 out-of-place 加密流程中,密文从用户空间读取,解密后的明文写入独立的缓冲区,两者物理隔离。但 in-place 优化后,代码将 TX SGL 中的 AAD 和密文数据复制到 RX 缓冲区,同时通过 sg_chain() 将 tag 页链式引用——而非复制——到目标 scatterlist。随后 req->src = req->dst 这行代码让解密操作作用在同一个 scatterlist 上。

问题在于:来自 splice() 的页缓存页面现在处于可写的目标 scatterlist 中。当 authencesn 在解密时,会在 dst[assoclen + cryptlen] 位置写入 4 字节的 ESN seqno_lo,这笔写入跨越了原本的数据边界,进入了链式连接的页缓存 tag 页。

关键点:这个写入发生在 HMAC 标签验证之前。即使解密操作因认证失败返回 -EBADMSG,这 4 字节的恶意写入已经持久存在于页缓存中。

攻击链全貌

攻击者控制能力

| | | | — | — | | 目标文件 | 任意可读文件(通过 splice 指定) | | 写入偏移 | 通过 splice 偏移和参数精确控制 | | 写入内容 | 来自 AAD 的 4 字节可控数据 | | 写入时机 | HMAC 验证之前,不受完整性保护 |

与同类漏洞对比

| 漏洞特性 | Dirty Cow | Dirty Pipe | Copy Fail | | — | — | — | — | | 发布年份 | 2016 | 2022 | 2026 | | 利用方式 | 竞争条件写 | Pipe 缓冲区溢出 | In-place 加密缺陷 | | 成功率 | 需多次尝试 | 相对稳定 | 100% | | 影响版本 | 2.6.22+ | 5.8+ | 2017年至今全版本 | | 复杂度 | 高 | 中 | 极低 | | 是否需竞争 | 需要 | 不需要 | 不需要 | | 磁盘痕迹 | 有 | 有 | 无 |

影响范围

自 2017 年引入该优化以来,所有主流 Linux 发行版默认配置均受影响。研究团队已直接验证以下发行版存在漏洞:

  • Ubuntu 24.04 LTS

  • Amazon Linux 2023

  • RHEL

    (含 RHEL 8/9/10)

  • SUSE

同样受影响的发行版还包括 Debian、Arch、Fedora、Rocky、AlmaLinux、Oracle Linux 等。实测表明,内核 5.x 和 6.x 版本均可成功利用。

跨容器影响

页缓存在主机层面共享,这意味着 Copy Fail 不仅是本地提权漏洞,还是潜在的容器逃逸原语和 Kubernetes 节点攻击向量。在多租户容器环境中,一个低权限容器的恶意用户可以利用此漏洞修改宿主机上的 setuid 二进制文件,进而控制整个节点。

隐蔽性分析

这个漏洞的检测难度极高,原因有三:

  1. 绕过 VFS 写入路径

    :篡改发生在内核加密子系统的内部操作,不经过标准文件写入接口,不会触发常规的文件监控

  2. 不修改磁盘数据

    :页缓存中的修改不会同步到磁盘,statmd5sum 等工具检查的是磁盘文件,传统检测和恢复工具完全失效

  3. 重启自愈

    :系统重启或页缓存被驱逐后,文件从磁盘重新加载,攻击痕迹自动消失

这种”只改内存不改磁盘”的特性,使得基于校验和的完整性监控完全失效,也解释了为什么这个存在近 9 年的漏洞直到今天才被发现。

3 漏洞复现

⚠️ 免责声明:以下内容仅供授权环境下的安全研究与防御验证。未经授权利用此漏洞攻击他人系统属于违法行为。

PoC 获取

# GitHub 仓库(仅供安全研究)
https://github.com/theori-io/copy-fail-CVE-2026-31431

利用流程解析

整个利用过程分为五个阶段:

第一阶段:建立加密上下文

创建 AF_ALG socket,绑定 authencesn 加密模板并设置密钥。这一步利用了 AF_ALG 接口的标准权限特性——任何无特权用户都可以创建 authencesn socket,无需 root 权限。

第二阶段:页缓存注入

通过 splice() 系统调用将目标文件(通常是 /usr/bin/su)的页缓存导入到 TX buffer,然后利用 sendmsg 将精心构造的 AAD 和密文数据发送给内核。关键在于 AAD 的前 4 字节包含攻击者可控的数据。

第三阶段:触发写入

调用 recv() 触发解密操作。内核执行 in-place 解密时,会在用户控制的偏移处写入 4 字节。这 4 字节的写入发生在 HMAC 验证之前,因此即使认证失败,页缓存已被篡改。

第四阶段:迭代覆盖

重复第二、三步骤多次,每次写入 4 字节,逐步将完整的 shellcode 注入到 su 二进制文件的特定位置。现代 x86-64 调用约定下,shellcode 只需覆盖 su 的 main 函数入口几条指令即可完成权限提升。

第五阶段:执行提权

调用 execve("/usr/bin/su"),内核从页缓存加载被篡改的二进制文件。su 作为 setuid-root 程序,当它执行攻击者植入的 shellcode 时,运行在 UID 0 的上下文中。

# 复现效果示意
$ python3 copy_fail_exp.py
[*] exploit completed successfully
$ id
uid=0(root) gid=1000(test) groups=1000(test)

整个过程在数秒内完成,无需 root 权限,不需要重启服务,不依赖特定的系统状态。

4 信创系统影响分析

覆盖范围评估

信创系统基于 Linux 内核构建,几乎全部使用 2017 年之后(即引入该漏洞优化)的内核版本。主流信创操作系统受影响情况如下:

| 操作系统 | 内核版本 | 是否受影响 | | — | — | — | | 银河麒麟桌面 V10 SP1 | 5.4 / 5.10 / 5.15 | 受影响 | | 银河麒麟服务器 OS | 5.10+(基于 openEuler) | 受影响 | | 统信 UOS | 5.10 | 受影响 | | openEuler | 5.10+ | 受影响 |

结论:信创系统使用的内核版本均在漏洞引入时间之后,且 AF_ALG 在默认配置中启用,因此所有主流信创操作系统均受此漏洞影响。

信创环境的特殊性

  • 部署场景敏感

    :信创系统广泛应用于政务、金融、能源等关键基础设施,这些场景往往是高级威胁行为者的重点目标

  • 多用户共享内核

    :信创 OS 多部署于服务器和桌面共享场景,本地用户提权风险直接威胁整体安全边界

  • 容器化部署增加暴露面

    :信创云平台大量采用容器技术,Copy Fail 的容器逃逸能力在这些环境中尤为危险

  • 补丁更新周期长

    :相比社区发行版,信创 OS 的补丁发布和推送流程更为复杂,可能存在较长的暴露窗口

建议信创系统管理员立即查询厂商安全通告,同时检查当前内核版本和 AF_ALG 模块状态。

5 修复与临时缓解方案

主线内核修复

Linux 内核安全团队已于 2026 年 4 月 1 日将修复补丁合入主线。修复方案通过 commit a664bf3d603d 恢复 algif_aead 的 out-of-place 操作模式,消除了 in-place 优化引入的页缓存写入路径。

修复状态:各主流发行版已发布或正在发布安全更新,具体修复版本请查询各发行版安全通告。

建议各发行版用户通过系统包管理器执行全面更新:

# Ubuntu / Debian
sudo apt update && sudo apt upgrade

# RHEL / CentOS / Rocky / AlmaLinux
sudo dnf update

# SUSE
sudo zypper patch

临时缓解措施

对于暂时无法应用内核更新的系统,可通过禁用 algif_aead 模块实现缓解:

# 创建黑名单配置
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf

# 尝试卸载模块(如正在使用需重启)
sudo rmmod algif_aead 2>/dev/null || true

# 验证模块已卸载
lsmod | grep algif_aead

禁用影响评估

| 场景 | 是否受影响 | 说明 | | — | — | — | | dm-crypt/LUKS 磁盘加密 | 不受影响 | 使用内核 crypto API 的独立实现 | | IPsec/XFRM 网络层加密 | 不受影响 | 独立加密路径 | | 内核 TLS (kTLS) | 不受影响 | 独立实现 | | OpenSSL / GnuTLS / NSS | 不受影响 | 用户态实现 | | SSH / GPG | 不受影响 | 不走 AF_ALG | | 内核密钥环加密 | 不受影响 | 独立实现 |

可能受影响的场景:

  • 显式启用 AF_ALG 引擎的 OpenSSL 构建
  • 直接绑定 aead socket 的嵌入式应用
  • 部分硬件加密卸载路径

影响范围排查

如需确认系统是否有应用依赖 AF_ALG,可执行以下命令:

# 检查是否有进程使用 AF_ALG
lsof 2>/dev/null | grep AF_ALG

# 或使用 ss 命令
ss -xa | grep alg

# 快速验证系统是否可创建 AF_ALG socket(输出 VULNERABLE 则存在风险)
python3 -c "import socket; socket.socket(38,5,0); print('VULNERABLE')"

如果上述命令无输出(最后一行无输出表示 socket 创建被阻止),说明系统未使用 AF_ALG 接口,禁用 algif_aead 模块是安全的。

容器环境特殊建议

对于运行不可信工作负载的容器环境(沙箱、CI/CD、多租户 Pod),无论内核补丁状态如何,建议通过 seccomp filter 阻止 AF_ALG socket 创建,从根本上消除攻击面:

{
  "syscalls": [{
    "names": ["socket"],
    "args": [{"index": 0, "value": 38, "op": "SCMP_CMP_EQ"}],
    "action": "SCMP_ACT_ERRNO"
  }]
}

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Z0安全 Z0安全 Z0安全《【紧急预警】Copy Fail:CVE-2026-31431 Linux内核本地提权漏洞深度解析》

评论:0   参与:  0