CVE-2026-31431 (Copy Fail) — Ubuntu 20.04 受影响确认与修复指南
TL;DR:CVE-2026-31431 是 Linux 内核中的本地提权漏洞(CVSS 7.8),影响 4.14 ~ 6.19.12 的所有内核。Ubuntu 20.04 已结束标准支持(2025-04),只有 Ubuntu Pro / ESM 订阅用户可获取修复。当前 Ubuntu 20.04 内核包仍标记为 Vulnerable,唯一可立即应用的官方缓解是 ESM 提供的
kmod更新(27-1ubuntu2.1+esm1),通过禁用algif_aead模块阻断利用路径。
1. 漏洞概览
| 项目 | 内容 |
|---|---|
| CVE 编号 | CVE-2026-31431 |
| 别名 | Copy Fail |
| 披露时间 | 2026-04-29(Theori) |
| 类型 | 本地提权 (LPE) |
| CVSS v3.1 | 7.8 (High) |
| 受影响内核 | Linux 4.14(2017)~ 6.19.12 |
| 受影响组件 | Crypto API 中的 algif_aead 模块(通过 AF_ALG socket family 触发) |
| 在野利用 | 是,已被 CISA 列入 KEV 清单;PoC 已公开 |
根因:authencesn 加密 template 中的逻辑错误,允许非特权本地用户对任意可读文件的 page cache 执行确定性、可控的 4 字节写入。攻击者借此篡改可读可执行文件(如 setuid 程序)的内存副本,待特权进程后续运行该被污染版本时即可获得 root 权限,并可被利用于容器逃逸与多租户环境横向移动。
2. 确认是否受影响(Ubuntu 20.04)
2.1 检查内核版本
uname -r
只要内核版本介于 4.14 ~ 6.19.12 之间,且未应用对应补丁,即视为受影响。Ubuntu 20.04 默认 GA 内核 5.4 / HWE 内核 5.15 均在受影响范围内。
2.2 检查 algif_aead 模块状态
漏洞利用必需加载 algif_aead。检查是否已加载:
grep -qE '^algif_aead ' /proc/modules \
&& echo "[VULNERABLE] algif_aead 已加载" \
|| echo "[OK] algif_aead 未加载"
或:
lsmod | grep algif_aead
注意:即使当前未加载,未受限的用户也可通过触发
AF_ALGsocket 让内核自动加载该模块。因此未加载 ≠ 不受影响,仍需打补丁或硬性禁用。
2.3 列出已安装内核包与 kmod 版本
dpkg -l 'linux-image*' | grep ^ii
dpkg -l kmod
对于 Ubuntu 20.04 (focal),kmod 修复版本为 27-1ubuntu2.1+esm1(USN-8226-1 / USN-8226-2,2026-04-30)。低于该版本即未应用 ESM 缓解。
2.4 检查 ESM 订阅状态(Ubuntu 20.04 必备)
Ubuntu 20.04 已于 2025-04 结束标准支持,必须开启 Ubuntu Pro 才能拿到 ESM 包:
pro status
# 关注 esm-infra 是否 enabled
未启用时所有 ESM 修复包均无法安装。
2.5 Ubuntu Security 页面状态速查(截至发布)
| 包 | focal (20.04) 状态 |
|---|---|
linux (5.4 GA) | Vulnerable(尚无修复内核) |
linux-aws / linux-azure / linux-gcp / linux-oracle | Vulnerable |
linux-hwe-5.15 | Vulnerable |
linux-hwe-5.8 / 5.11 / 5.13 | Ignored(已 EoSS) |
kmod | 已修复 → 27-1ubuntu2.1+esm1 |
由于内核包当前仍 Vulnerable,Ubuntu 20.04 用户应优先依赖 kmod 缓解 + 手工 modprobe blacklist。
3. 修复方案
3.1 推荐路径(需 Ubuntu Pro / ESM)
# 1) 启用 ESM(如果尚未启用)
sudo pro attach <YOUR_TOKEN>
sudo pro enable esm-infra
# 2) 升级 kmod(核心缓解)
sudo apt update
sudo apt install --only-upgrade kmod
# 3) 顺带升级所有可用安全包,等内核 ESM 补丁发布后会自动覆盖
sudo apt upgrade
# 4) 卸载已加载的脆弱模块(无需重启即可阻断利用)
sudo rmmod algif_aead 2>/dev/null || true
# 5) 验证
dpkg -l kmod | awk '/^ii/{print $2,$3}'
lsmod | grep algif_aead && echo "still loaded" || echo "unloaded"
kmod 更新的作用是阻止 algif_aead 再被加载,是 Ubuntu 官方在内核补丁发布前的过渡缓解方案。
3.2 备用路径(无 ESM 订阅或暂不能升级)
手工硬性禁用 algif_aead:
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/manual-disable-algif_aead.conf
sudo rmmod algif_aead 2>/dev/null || true
# 验证写入
cat /etc/modprobe.d/manual-disable-algif_aead.conf
# 验证模块无法再被加载
sudo modprobe algif_aead && echo "FAIL: module loaded" || echo "OK: blocked"
副作用:依赖 AF_ALG /
algif_aead做硬件加密加速的应用会回退到软件实现,可能影响性能。如有 IPsec、dm-crypt + AEAD、特定 VPN/CDN 组件,需提前评估。重启后这些应用才会以软件实现重新初始化。
3.3 容器与多租户环境额外注意
- 容器主机:宿主机内核共享,需在宿主机层修复,不能只补容器镜像。
- K8s 节点:建议先在一个节点验证缓解后无业务影响,再批量滚动应用。
- 未启用 user namespace 隔离的容器会显著放大风险,优先处理。
4. 验证修复
# kmod 已升级
dpkg -l kmod | awk '/^ii/{print $2,$3}'
# 期望: kmod 27-1ubuntu2.1+esm1 或更高
# 模块已无法加载
lsmod | grep algif_aead || echo "not loaded"
sudo modprobe algif_aead 2>&1 | tee /tmp/modprobe.out
# 期望: 报错或被 /bin/false 拦截
# 等待官方内核补丁后
apt-cache policy linux-image-$(uname -r)
# 留意 USN-8226 系列后续 kernel 修复公告
5. 行动清单(Ubuntu 20.04 运维 checklist)
- 确认当前
pro status,如无 ESM 立即决策是否购买 / 评估迁移到 22.04+ -
apt update && apt install --only-upgrade kmod,确保kmod >= 27-1ubuntu2.1+esm1 - 在
/etc/modprobe.d/添加algif_aeadblacklist 作为双保险 -
rmmod algif_aead卸载现网已加载实例 - 评估 AF_ALG 依赖业务(IPsec、dm-crypt 加速、特定加密 sidecar)是否需要重启
- 关注 Ubuntu Security 公告,等待 focal 内核 ESM 修复发布后再做一次
apt upgrade+ 重启 - 如系统暴露给非可信本地用户(多租户主机、CI runner、容器宿主),视为高优先级 P0
6. 参考资料
- Ubuntu Security — CVE-2026-31431
- Canonical Blog — Fixes available for CVE-2026-31431 (Copy Fail)
- Microsoft Security Blog — Copy Fail enables Linux root privilege escalation
- Sophos — PoC available for Linux Copy Fail
- Unit 42 — What you need to know about Copy Fail
- The Hacker News — CISA adds CVE-2026-31431 to KEV
- CSA Singapore — High severity advisory
- CERT-EU — Copy Fail advisory