本仓库记录了一个用于评估 Linux 主机(重点为 Ubuntu)对 CVE-2026-31431 暴露情况的 Bash 脚本,并通过阻止 algif_aead 模块来应用简单的缓解措施。
语言版本:
README.mdREADME.pt-BR.md该脚本支持三种模式:
--check:收集主机信息并分类当前状态。--mitigate:创建 modprobe 规则以阻止易受攻击的模块,并尝试卸载该模块。--update:通过 apt 运行内核软件包升级。CVE-2026-31431,公开名称为 ,是 Linux 内核中的一个本地权限提升漏洞,与 模块相关,该模块通过 实现内核用户空间加密 API 的 AEAD 接口。
Copy Failalgif_aeadAF_ALG实际上,该问题允许低权限本地用户滥用此子系统内存处理路径中的逻辑缺陷,并将影响升级为完全的系统完整性破坏。kernel.org 发布并在 NVD 中反映的评分为 CVSS 7.8,向量为 AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H,意味着该攻击需要本地执行,但对机密性、完整性和可用性具有高影响。
2017 年引入内核,当时对 algif_aead 添加了就地优化。2026 年 4 月 22 日 在 NVD 中发布。Copy Fail 名称及公开的概念验证代码于 2026 年 4 月 29 日 进行了更广泛的公开披露。2026 年 4 月 1 日 提交,早于广泛的最终用户披露。根据已发布的技术公告,该缺陷依赖于以下因素的组合:
AF_ALG 接口algif_aead 模块splice() 链接实际结果是,本地进程能够对可读文件的页缓存支持页面执行一次小型的受控写入。在有利条件下,这足以将有限的本地立足点转变为 root 权限提升。
真正的风险不仅仅是"运行易受攻击的 Linux 内核",而是允许低信任度的本地代码访问此内核路径。在企业环境中,这通常意味着以下场景的暴露程度更高:
如果攻击者已经拥有某种形式的本地执行能力,即使没有 root 权限,此 CVE 也可能成为主机被攻陷的下一步。实际上,这扩大了以下风险:
algif_aead 模块的用途algif_aead 是内核用户空间加密接口(AF_ALG)的一部分。它允许应用程序通过套接字使用内核加密原语,尤其是 AEAD 操作(带关联数据的认证加密)。
对于大多数标准服务器工作负载,此模块通常不是必需的。根据 CERT-EU 发布的缓解指南,禁用 algif_aead 作为临时缓解措施:
dm-crypt 或 LUKSkTLSIPsec/XFRMOpenSSL、GnuTLS、NSS 或 SSH另一方面,禁用它可能会影响:
afalg 引擎的应用程序AF_ALG 套接字的软件aead、skcipher 或 hash 的自定义集成换句话说,对于大多数企业主机,阻止该模块的影响往往较低。在设备、自定义加密栈或高度优化的软件路径中,应在部署前验证影响。
阻止该模块可立即降低暴露程度,但也带来权衡:
AF_ALG 的应用程序可能无法启动或失去内核支持的加密加速对于生产环境,更安全的方法是在受控维护窗口内应用缓解措施,并在之后验证关键应用程序。
将模块加入黑名单仅是临时缓解措施。永久修复是:
其他推荐措施:
seccomp 限制 AF_ALG 套接字创建afalg 或内核加密 API 的位置脚本检查:
/etc/os-release 获取的操作系统algif_aead 模块是否存在modprobe 规则阻止/var/run/reboot-required)pro fix CVE-2026-31431 --dry-run 报告的 Ubuntu Pro 状态基于此,它返回以下分类之一:
PATCHED_OR_NOT_AFFECTEDLIKELY_NOT_VULNERABLEMITIGATEDVULNERABLE_MODULE_LOADEDPOTENTIALLY_VULNERABLEUNKNOWN总结:
PATCHED_OR_NOT_AFFECTED。algif_aead 模块,则状态倾向于 LIKELY_NOT_VULNERABLE。MITIGATED。VULNERABLE_MODULE_LOADED。POTENTIALLY_VULNERABLE。modinfomodprobelsmodawkgrephostnameunameapt-get(用于 --update)sudopro,用于丰富 Ubuntu 上的分析如果脚本文件名为 check_cve_2026_31431.sh:
chmod +x check_cve_2026_31431.sh
./check_cve_2026_31431.sh --check
./check_cve_2026_31431.sh --check
示例输出:
Host: srv-app-01
OS: Ubuntu 24.04 LTS
Kernel: 6.8.0-58-generic
CVE: CVE-2026-31431
Module exists: 1
Module loaded: 0
Module blocked: 1
Ubuntu affected: yes
Fix available: yes
Reboot required: 0
Status: MITIGATED
Reason: algif_aead exists but is blocked and not loaded
./check_cve_2026_31431.sh --check --json
示例:
{"host":"srv-app-01","os":"Ubuntu 24.04 LTS","kernel":"6.8.0-58-generic","cve":"CVE-2026-31431","module":"algif_aead","module_exists":1,"module_loaded":0,"module_blocked":1,"ubuntu_affected":"yes","fix_available":"yes","reboot_required":0,"status":"MITIGATED","reason":"algif_aead exists but is blocked and not loaded"}
此输出适用于自动化、资产清单和合规流水线。
--mitigate 模式创建文件:
/etc/modprobe.d/disable-algif_aead-CVE-2026-31431.conf
内容如下:
install algif_aead /bin/false
blacklist algif_aead
之后,脚本尝试使用以下命令从内存中移除模块:
modprobe -r algif_aead
用法:
./check_cve_2026_31431.sh --mitigate
如果用户不是 root,脚本将尝试使用 sudo。
--update 模式运行:
apt-get update
apt-get install --only-upgrade -y 'linux-image-*' 'linux-modules-*' 'linux-aws*'
用法:
./check_cve_2026_31431.sh --update
此模式尝试在基于 Debian 和 Ubuntu 的系统上升级内核相关软件包。在其他环境中,此步骤可能不适用。
./check_cve_2026_31431.sh --help
输出:
Usage: ./check_cve_2026_31431.sh [--check|--mitigate|--update] [--json]
ubuntu_affected 和 fix_available 字段依赖于 pro 命令的存在。--update 步骤使用面向 Ubuntu 和 Debian 的软件包模式,可能无法覆盖所有自定义内核。--check 评估主机。--mitigate。--update 或应用官方供应商更新。--check --json 验证最终状态并保留证据。为便于发布清晰,脚本理想情况下应使用描述性名称,例如:
check_cve_2026_31431.sh
材料整理并发布,致谢 SEC17。
官方网站:
https://sec17.com