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.17.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 检查内核版本

bash
uname -r

只要内核版本介于 4.14 ~ 6.19.12 之间,且未应用对应补丁,即视为受影响。Ubuntu 20.04 默认 GA 内核 5.4 / HWE 内核 5.15 均在受影响范围内。

2.2 检查 algif_aead 模块状态

漏洞利用必需加载 algif_aead。检查是否已加载:

bash
grep -qE '^algif_aead ' /proc/modules \
  && echo "[VULNERABLE] algif_aead 已加载" \
  || echo "[OK] algif_aead 未加载"

或:

bash
lsmod | grep algif_aead

注意:即使当前未加载,未受限的用户也可通过触发 AF_ALG socket 让内核自动加载该模块。因此未加载 ≠ 不受影响,仍需打补丁或硬性禁用。

2.3 列出已安装内核包与 kmod 版本

bash
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 包:

bash
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-oracleVulnerable
linux-hwe-5.15Vulnerable
linux-hwe-5.8 / 5.11 / 5.13Ignored(已 EoSS)
kmod已修复 → 27-1ubuntu2.1+esm1

由于内核包当前仍 Vulnerable,Ubuntu 20.04 用户应优先依赖 kmod 缓解 + 手工 modprobe blacklist。


3. 修复方案

3.1 推荐路径(需 Ubuntu Pro / ESM)

bash
# 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:

bash
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. 验证修复

bash
# 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_aead blacklist 作为双保险
  • rmmod algif_aead 卸载现网已加载实例
  • 评估 AF_ALG 依赖业务(IPsec、dm-crypt 加速、特定加密 sidecar)是否需要重启
  • 关注 Ubuntu Security 公告,等待 focal 内核 ESM 修复发布后再做一次 apt upgrade + 重启
  • 如系统暴露给非可信本地用户(多租户主机、CI runner、容器宿主),视为高优先级 P0

6. 参考资料

Comments (0)

No comments yet

imfht
May 6, 2026