检测是否暴露于 CVE-2026-31431(Copy Fail),并可选地在受影响系统上通过禁用 algif_aead 内核模块来应用主机级缓解措施。
copyfail-check.sh — 检查内核补丁状态、运行时模块暴露情况及缓解状态。--mitigate 提供可选的自动缓解功能。NOT AFFECTED、PATCHED、NOT EXPLOITABLE、MITIGATED、MITIGATED (REBOOT PENDING) 或 AFFECTED。2017 年的一项就地 AEAD 优化(提交 72548b093ee3,内核 4.14)允许无特权的本地攻击者针对任何可读文件获得受控的页缓存写入原语,从而实现向 root 的权限提升。在容器环境中,同一原语可能促成容器逃逸。
4.14 之前的内核不受影响。 这包括 Ubuntu 的 3.13 内核(Trusty 14.04 GA)和 4.4 内核(Xenial 16.04 GA、Trusty HWE)——这些内核早于存在漏洞的提交。
| 角色 | 提交 |
|---|---|
| 漏洞引入 | 72548b093ee3(内核 4.14,2017 年) |
| 修复 — 主线 / 内核 7.0 | a664bf3d603d |
| 修复 — 稳定版 6.18.x |
各发行版使用自己的提交标识符进行补丁移植。该脚本会在软件包变更日志中搜索 CVE ID,这对于移植内核而言比上游哈希更可靠。
Ubuntu 安全团队分发的 kmod 软件包更新会将 install algif_aead /bin/false 写入 /etc/modprobe.d/disable-algif_aead.conf。本脚本会创建内容相同的同名文件,与该方案完全兼容。在 Ubuntu 上,应用官方软件包更新(sudo apt install --only-upgrade kmod)是推荐路径;本脚本为非 Ubuntu 系统或更新前的排查提供等效覆盖。
chmod +x copyfail-check.sh
sudo ./copyfail-check.sh # 仅检测
sudo ./copyfail-check.sh --mitigate # 检测 + 若受影响则应用缓解
直接从 main 分支流式传输脚本并执行。bash -s -- 形式会将 -- 之后的参数转发到脚本本身,因此 --mitigate 会传递给脚本而非 bash。
# 仅检测
curl -fsSL https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/main/copyfail-check.sh | sudo bash
# 检测 + 缓解
curl -fsSL https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/main/copyfail-check.sh | sudo bash -s -- --mitigate
wget 等效命令:
wget -qO- https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/main/copyfail-check.sh | sudo bash
wget -qO- https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/main/copyfail-check.sh | sudo bash -s -- --mitigate
安全说明。 将远程脚本直接通过管道输入特权 shell,意味着信任该 URL 在执行时提供的任何内容。 对于一次性排查这是可接受的;对于重复或生产环境使用,请固定到特定提交并先检查脚本:
curl -fsSL https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/<commit-sha>/copyfail-check.sh -o copyfail-check.sh less copyfail-check.sh sudo bash copyfail-check.sh --mitigate
NOT AFFECTED 退出/sys/kernel/livepatch/ 下已加载的内核实时补丁,以及 kpatch list 和 canonical-livepatch statusubuntu-security-status --cves、dnf updateinfo list cves、zypper patch-checkalgif_aead 模块可用性(modinfo)和加载状态(lsmod)/etc/modprobe.d/ 下现有的基于 modprobe 的阻止规则 — 接受等效的中和器(install … /bin/false|/bin/true|/sbin/nologin)和 blacklist;识别阻止是否来自 Ubuntu kmod 软件包当在受影响系统上使用 --mitigate 时,脚本将:
install algif_aead /bin/false 的 /etc/modprobe.d/disable-algif_aead.confalgif_aead 当前已加载,则尝试卸载文件名 /etc/modprobe.d/disable-algif_aead.conf 与官方 Ubuntu kmod 软件包更新写入的文件一致,因此两种方法可互换且兼容。
algif_aead 对常见加密路径是安全的:dm-crypt、LUKS、kTLS、IPsec、默认 OpenSSL/GnuTLS 用法、SSH 和内核密钥环加密均不受影响。afalg 引擎的应用程序将失去硬件加速;它们应回退到软件加密,但可能需要重启才能触发回退。| 日期 | 事件 |
|---|---|
| 2026-03-23 | 报告给 Linux 内核安全团队 |
| 2026-04-01 | 修复已提交至主线 |
| 2026-04-29 | 公开披露 |
sudo 或 root shell)uname、modinfo、lsmod、awk、grepdpkg — Debian/Ubuntu 变更日志扫描和 kmod 版本检查lsb_release — 用于 kmod 提示的 Ubuntu 版本检测rpm — RHEL/Fedora 变更日志扫描kpatch / canonical-livepatch 和 /sys/kernel/livepatch/ — 实时补丁检测ubuntu-security-status、dnf updateinfo、 — 发行版 CVE 工具.
├── copyfail-check.sh
└── README.md
| 属性 | 值 |
|---|
| CVE ID | CVE-2026-31431 |
| 严重性 | 高(CVSS 3.1:7.8) |
| 组件 | algif_aead — 内核 AF_ALG AEAD 加密接口 |
| 攻击类型 | 本地权限提升;容器逃逸(尚无公开 PoC) |
| 受影响内核 | 4.14 及更高版本(见下文) |
| 披露日期 | 2026-04-29 |
fafe0fa2995a |
| 修复 — 稳定版 6.19.x | ce42ee423e58 |
| 版本 | linux 内核 | kmod 缓解(修复版本) |
|---|
| Trusty 14.04 | 仅 4.15 内核;3.13 和 4.4 不受影响 | 15-0ubuntu7+esm1 |
| Xenial 16.04 | 仅 4.15 内核;4.4 不受影响 | 22-1ubuntu5.2+esm1 |
| Bionic 18.04 | 受影响 | 24-1ubuntu3.5+esm1 |
| Focal 20.04 | 受影响 | 27-1ubuntu2.1+esm1 |
| Jammy 22.04 | 受影响 | 29-1ubuntu1.1 |
| Noble 24.04 | 受影响 | 31+20240202-2ubuntu7.2 |
| Questing 25.10 | 受影响 | 34.2-2ubuntu1.1 |
| Resolute 26.04 | 不受影响 | 无需更新 |
/proc/modules(第 3 列)中模块的引用计数检查活动的 AF_ALG 使用情况;同时标记 /etc/ssl 或 /etc/pki/tls 中的 OpenSSL afalg 引擎引用| 判定 | 含义 |
|---|
NOT AFFECTED | 内核早于 4.14,或已打补丁且模块不可用 |
PATCHED | 内核变更日志/工具确认修复已存在 |
NOT EXPLOITABLE | 此系统上模块不可用 |
MITIGATED | 模块已通过 modprobe.d 阻止;内核仍未打补丁 — 尽可能更新 |
MITIGATED (REBOOT PENDING) | 阻止已写入但模块仍已加载;使用 rmmod 卸载或重启 |
AFFECTED | 内核处于受影响范围且 algif_aead 可用 |
zypper patch-check