本仓库包含用于在 Ubuntu 系统上消除关键漏洞 CVE-2026-31431(代号 "Copy Fail")的脚本。
[!IMPORTANT] 兼容性: 这些脚本专为 Ubuntu Server 24.04 LTS 定制并经过测试。虽然其逻辑在其他发行版上类似,但尚未在 Debian 或其他 Linux 发行版上进行测试。
在应用补丁之前,请下载官方检测脚本(由 rootsecdev 开发),以验证您系统的当前状态:
# 下载检测脚本
wget https://raw.githubusercontent.com/rootsecdev/cve_2026_31431/main/test_cve_2026_31431.py
# 确保您已安装 python3
python3 --version
CVE-2026-31431 漏洞($CVSS\ 7.8$)影响 Linux 内核的加密子系统(algif_aead 模块)。
本地用户可通过利用 splice() 函数中"就地"优化的缺陷来破坏系统的页面缓存。这允许攻击者强制内核将任意数据(序列号)写入本应只读的文件内存页(例如 SUID 二进制文件或敏感系统文件)。
modprobe -r 不够Linux 内核使用一种称为自动加载的机制。如果某个进程或脚本(如检测器)请求 AF_ALG 类型的套接字,内核会自动重新加载该模块,即使它已被手动移除。本补丁中使用的方法("硬阻断")从物理上阻止内核加载该模块的二进制文件。
运行测试器以确认您当前的内核是否暴露于漏洞:
python3 test_cve_2026_31431.py
如果脚本显示 [!] VULNERABLE,请继续下一步。
patch-CVE-2026-31431.sh 脚本可永久消除攻击向量。它会在 /etc/modprobe.d/ 中创建一个配置文件,并更新 initramfs 以确保重启后阻断仍然生效。
chmod +x patch-CVE-2026-31431.sh
sudo ./patch-CVE-2026-31431.sh
再次运行检测脚本。您现在应该会看到一条消息,提示前提条件未满足:
[+] Precondition not met ('authencesn(...) cannot be instantiated)。
这确认该模块已成功被中和。
一旦 Ubuntu 通过内核更新发布官方修复(请查看 apt upgrade 中关于 CVE-2026-31431 的说明),您应恢复原生加密功能:
chmod +x unpatch-CVE-2026-31431.sh
sudo ./unpatch-CVE-2026-31431.sh
该保护依赖于 /etc/modprobe.d/cve-2026-31431-mitigation.conf 中的以下指令:
blacklist algif_aead
install algif_aead /bin/true
install 命令将内核加载该模块的尝试重定向到 /bin/true,后者返回"成功"退出码,而不会执行任何易受攻击的代码。