一个针对 Copy Fail Linux 内核本地权限提升漏洞的只读检测脚本。
不含漏洞利用代码。不打开 AF_ALG 套接字。除/etc/modprobe.d外不写入任何文件(仅当您手动应用缓解措施时)。
Copy Fail(CVE-2026-31431)是 Linux 内核 algif_aead 模块中的一个逻辑缺陷——该模块属于 AF_ALG 用户空间加密 API。该漏洞由 Theori / Xint Code 于 2026 年 4 月 29 日披露。
一个 732 字节的 Python 脚本即可让非特权本地用户在几乎所有自 2017 年以来构建的主流 Linux 发行版上获得完全 root 权限——无需竞态条件、无需内核偏移、无需编译载荷。
| 属性 | 详情 |
|---|---|
| CVE | CVE-2026-31431 |
| CVSS | 7.8 高危 |
| 类型 | 本地权限提升(LPE) |
| 受影响内核 | 4.14 – 6.18.21、6.19.0 – 6.19.11 |
| 根本原因 | algif_aead 原地优化(提交 72548b093ee3,2017 年) |
| 上游修复 | 通过提交 a664bf3d603d 回滚 |
| 漏洞利用可靠性 | 确定性——无需竞态条件 |
modprobe.d 黑名单、initcall_blacklist 内核命令行参数kmod 软件包版本关于 Ubuntu / Debian 的说明: Ubuntu 在回溯安全补丁时不会提升上游内核版本。因此,脚本检查的是
kmod软件包版本(根据 USN-8226-1 要求>= 31+20240202-2ubuntu7.2),而非仅依赖内核版本字符串。
# 下载
curl -O https://raw.githubusercontent.com/kw-soft/copyfail/main/copyfail.sh
# 赋予执行权限
chmod +x copyfail.sh
# 运行(建议使用 root 以获得完整的模块可见性)
sudo ./copyfail.sh
============================================
CVE-2026-31431 'Copy Fail' — 安全检测
============================================
[*] 内核: 6.8.0-71-generic
[!] 内核 6.8.0-71-generic 处于受影响的上游版本范围内 (4.14 – 6.19.11)
[~] 接下来进行发行版回溯补丁检查 — 仅凭版本号不足以得出结论
[*] algif_aead 模块状态:
[!] algif_aead 已加载 — 攻击面处于活跃状态
[*] 发行版补丁状态:
发行版 : Ubuntu 24.04
已安装 kmod : 31+20240202-2ubuntu6
所需 kmod : >= 31+20240202-2ubuntu7.2
[!] kmod 31+20240202-2ubuntu6 < 31+20240202-2ubuntu7.2 — 缓解措施未应用
============================================
检测结果
============================================
[!] 存在漏洞 — 内核受影响且 algif_aead 处于活跃状态
============================================
CVE-2026-31431 'Copy Fail' — 安全检测
============================================
[*] 内核: 6.8.0-71-generic
[!] 内核 6.8.0-71-generic 处于受影响的上游版本范围内 (4.14 – 6.19.11)
[~] 接下来进行发行版回溯补丁检查 — 仅凭版本号不足以得出结论
[*] algif_aead 模块状态:
[✓] algif_aead 未加载
[✓] modprobe 黑名单已生效: /etc/modprobe.d/disable-algif_aead.conf
[*] 发行版补丁状态:
发行版 : Ubuntu 24.04
已安装 kmod : 31+20240202-2ubuntu7.2
所需 kmod : >= 31+20240202-2ubuntu7.2
[✓] kmod >= 31+20240202-2ubuntu7.2 — USN-8226-1 缓解措施已生效
============================================
检测结果
============================================
[✓] 已缓解 — algif_aead 已被阻止
[~] 请在可用时应用已修补的内核以彻底解决问题
sudo apt update && sudo apt upgrade && sudo reboot
这将安装已修补的 kmod 软件包(USN-8226-1),该软件包会添加一条阻止 algif_aead 的 modprobe.d 规则。
如果无法立即重启:
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif.conf
sudo update-initramfs -u
sudo rmmod algif_aead 2>/dev/null || echo "模块正在使用中 — 需要重启"
⚠️ 在 RHEL 系列内核中,
algif_aead内建于内核(CONFIG_CRYPTO_USER_API_AEAD=y)。
modprobe.d规则无效。请改用 grub 参数:
sudo grubby --update-kernel=ALL --args='initcall_blacklist=algif_aead_init'
sudo reboot
sudo pacman -Syu linux && sudo reboot
该缓解措施不会影响以下任何组件:
dm-crypt / LUKS 全盘加密只有明确配置为使用 afalg 引擎或直接绑定 AF_ALG AEAD 套接字的应用程序可能受到影响——这在标准部署中很少见。
Hetzner 不会自动应用操作系统更新。Ubuntu 预装了 unattended-upgrades,但必须启用并配置。
# 检查自动安全更新是否已启用
cat /etc/apt/apt.conf.d/20auto-upgrades
# 查看更新历史
grep "^Start-Date\|^Commandline" /var/log/apt/history.log | tail -30
# 检查 kmod 缓解措施是否已自动应用
grep "kmod\|algif" /var/log/apt/history.log
# 查看最近一次 unattended-upgrades 运行记录
tail -30 /var/log/unattended-upgrades/unattended-upgrades.log
注意: 即使启用了
unattended-upgrades,自动重启默认关闭。
新内核只有在手动执行reboot后才会生效。
本脚本仅供在您拥有或获得授权测试的系统上使用。
它仅执行只读检查,不以任何方式利用该漏洞。
| 发行版 | 检查方法 |
|---|
| Ubuntu / Linux Mint | kmod 软件包版本(USN-8226-1) |
| Debian | kmod 软件包版本 + 安全跟踪器 |
| Parrot OS | kmod 软件包版本(Debian rolling) |
| RHEL / CentOS / AlmaLinux / Rocky | dnf updateinfo + initcall_blacklist 命令行参数 |
| Fedora | dnf updateinfo |
| Amazon Linux | dnf check-update --security |
| SUSE / openSUSE | zypper lp |
| Arch Linux | pacman -Syu linux |
| 资源 | 链接 |
|---|