meowteusz/copyfailautopatch

GitHub: meowteusz/copyfailautopatch

针对 Linux 内核 CVE-2026-31431 漏洞的自动化检测与临时缓解脚本,以非破坏性方式判断主机是否受影响并提供应急修补方案。

Stars: 0 | Forks: 0

# copyfailautopatch 检测并(可选地)缓解 Linux 主机上的 **CVE-2026-31431**(“Copy Fail”)。 该漏洞是一个通过 `AF_ALG` 套接字族使用 `authencesn(hmac(sha256),cbc(aes))` AEAD 变换触发的页缓存写入原语。此脚本复现了 Theori 演示的相同原语,但目标是自行创建的临时文件而非 setuid 二进制文件,因此测试本身是非破坏性的。 如果内核存在漏洞,脚本会提供缓解方案:通过 `/etc/modprobe.d/disable-algif-aead.conf` 将 `algif_aead` 加入黑名单,并卸载该模块。要彻底修复,仍需更新内核。 ## 环境要求 - Linux(此漏洞是 Linux 内核特有的;该脚本在 macOS/Windows 上没有任何作用) - Python 3.10+(需要 `os.splice`) - [`uv`](https://docs.astral.sh/uv/),用于运行指定了固定 Python 版本的脚本 - `sudo` / root —— 应用缓解措施(写入 `/etc/modprobe.d` 和执行 `rmmod`)时需要;仅执行检测无需此权限,但脚本会交互式地询问是否进行修补 ## 使用方法 ``` sudo $(which uv) run --python 3.10 /path/to/copy_fail_test.py ``` 使用 `$(which uv)` 是为了让 `sudo` 在 `PATH` 中保留正确的 `uv` 二进制文件。 该脚本会: 1. 探测 `AF_ALG` + `authencesn(hmac(sha256),cbc(aes))` 是否可访问。 2. 创建一个临时文件,尝试在偏移量 16 处进行 4 字节的页缓存写入,并检查字节是否成功写入。 3. 打印以下信息之一: - `✅ NOT VULNERABLE` —— 以状态码 0 退出 - `🚨 VULNERABLE` —— 提示应用缓解措施,然后重新测试 - `⚠️ INCONCLUSIVE` —— 以状态码 2 退出(例如,`splice`/`sendmsg` 调用报错) ## 缓解措施 如果您接受提示,脚本将: 1. 将 `install algif_aead /bin/false` 写入 `/etc/modprobe.d/disable-algif-aead.conf`。 2. 运行 `rmmod algif_aead`。 如果该模块是内置到内核中的(不可动态加载),则需要重新启动才能使黑名单生效。无论哪种情况,请在有可用更新时**修补内核** —— 黑名单仅移除了一个入口点。 等效的手动操作: ``` echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf rmmod algif_aead 2>/dev/null ``` ## 安全性 检测步骤会向其创建的 `tempfile.NamedTemporaryFile` 写入数据,随后将其删除;不会触碰任何系统文件。缓解措施步骤是唯一修改主机环境的部分,并且仅在您在提示处确认时才会执行。
标签:AF_ALG, algif_aead, CVE-2026-31431, Linux内核安全, Python, SysAdmin, uv, Web报告查看器, 内核提权, 数字取证, 无后门, 漏洞修复, 漏洞缓解, 系统管理员, 网络安全, 网络安全培训, 自动化脚本, 隐私保护, 页缓存