paulorlima9/copyfail-fix

GitHub: paulorlima9/copyfail-fix

针对 Linux 内核 CVE-2026-31431 本地提权漏洞的一键缓解与修复脚本,通过禁用 algif_aead 模块和内核升级来消除威胁。

Stars: 1 | Forks: 0

# CopyFail-Fix 修复 🌐 **English** | [Português](README.pt-BR.md) | [Español](README.es.md) | [中文](README.zh.md) | [Íslenska](README.is.md) 针对 [CVE-2026-31431](https://ubuntu.com/security/CVE-2026-31431)(Linux 内核 "Copy Fail" 本地权限提升漏洞)的一键缓解与修复脚本。该脚本会禁用受影响的 `algif_aead` 模块,通过 `apt` 升级内核,并(可选)安装一个 `systemd` 定时器以保持系统最新。 专为 **Ubuntu 服务器** 设计(也兼容基于 Debian 的系统)。 ## 为什么需要它? CVE-2026-31431("Copy Fail")是内核 `algif_aead`(用户空间 crypto API 的 AEAD 套接字接口)中的一个逻辑缺陷。本地无特权用户可以触发对任何可读文件(包括 setuid 二进制文件)页面缓存进行确定性的 4 字节写入,并在几秒钟内获取 root 权限。该缺陷于 2017 年引入(提交 `72548b093ee3`),影响了 2017 年至修复期间构建的所有内核。此脚本可在您应用发行版内核补丁期间禁用受影响的模块。 ## 系统要求 - **Ubuntu 20.04+**(或基于 Debian 的系统) - 需要使用 `apt-get` 和 `awk` - Root 权限(`sudo`) ## 快速开始 ``` wget -O copyfail.sh https://raw.githubusercontent.com/paulorlima9/copyfail-fix/main/copyfail.sh chmod +x copyfail.sh sudo ./copyfail.sh ``` 首次运行时,脚本将会: 1. 写入 `/etc/modprobe.d/disable-algif.conf` 以将 `algif_aead` 模块列入黑名单 2. 如果 `algif_aead` 已加载,则将其卸载 3. 运行 `apt-get update && apt-get upgrade -y` 拉取已修复的内核 4. 询问您是否要启用 **Supervision**(每日自动更新) 升级后需要重启以加载新内核。 ## 用法 ``` sudo ./copyfail.sh [options] ``` | 选项 | 缩写 | 描述 | |---|---|---| | `--help` | `-h` | 显示帮助信息 | | `--mitigate` | `-m` | 仅应用缓解措施(禁用 `algif_aead` 模块) | | `--upgrade` | `-u` | 仅升级内核/软件包(`apt-get upgrade`) | | `--check` | `-c` | 显示当前状态(内核版本、模块、缓解措施) | | `--revert` | `-r` | 撤销缓解措施(在内核已修复并重启后使用) | | `--supervision` | `-s` | 通过 systemd 定时器启用每日自动更新 | ## 示例 **完整修复** — 应用缓解措施并升级内核: ``` sudo ./copyfail.sh ``` **仅检查状态**: ``` sudo ./copyfail.sh --check ``` **仅缓解**(不升级内核): ``` sudo ./copyfail.sh --mitigate ``` 在确认内核已修复并重启后,**撤销缓解措施**: ``` sudo ./copyfail.sh --revert ``` **启用每日自动更新**(Supervision): ``` sudo ./copyfail.sh --supervision ``` ## 监督 Supervision 功能会安装一个 **systemd 定时器**,每 24 小时运行一次 `apt-get upgrade`,确保一旦您的发行版发布内核补丁就能立即获取。 启用后,将创建两个 systemd 单元: - `copyfail-fix-supervision.service` — 执行带有 `--upgrade` 参数的脚本的一次性服务 - `copyfail-fix-supervision.timer` — 每日(以及开机 5 分钟后)触发该服务的定时器 ### 管理定时器 ``` # 检查 timer 状态 systemctl status copyfail-fix-supervision.timer # 查看下次计划的运行 systemctl list-timers copyfail-fix-supervision.timer # 禁用自动更新 sudo systemctl stop copyfail-fix-supervision.timer sudo systemctl disable copyfail-fix-supervision.timer # 手动触发更新 sudo systemctl start copyfail-fix-supervision.service ``` ## 工作原理 1. 将 `install algif_aead /bin/false` 写入 `/etc/modprobe.d/disable-algif.conf`,使该模块在下次启动时无法被加载 2. 调用 `rmmod algif_aead` 从运行中的内核卸载它(如果模块正在使用中则跳过 — 需要重启) 3. 运行 `apt-get update`,随后进行非交互式的 `apt-get upgrade` 以安装最新的内核软件包 4. 使用 `--check` 时,检查 `uname -r`、`lsmod`、modprobe 文件以及最新安装的 `linux-image-*` 软件包 5. 使用 `--revert` 时,删除 modprobe 文件并通过 `modprobe` 重新加载模块 ## 输出图例 在执行过程中,脚本会显示进度指示器: - **`+`**(绿色)— 已应用的操作 - **`-`**(红色)— 已撤销的操作 - **`.`**(灰色)— 已跳过的操作(已应用或不适用) - **`!`**(黄色)— 警告(例如需要重启) ## CVE 参考 - [Ubuntu 安全公告 — CVE-2026-31431](https://ubuntu.com/security/CVE-2026-31431) - [Red Hat — RHSB-2026-002 Copy Fail](https://access.redhat.com/security/vulnerabilities/RHSB-2026-002) - [CERT-EU 2026-005](https://cert.europa.eu/publications/security-advisories/2026-005/) ## 许可证 MIT
标签:algif_aead, apt, Copy Fail, CVE-2026-31431, Debian, Linux内核漏洞, setuid, sudo, systemd, VPS安全, Web报告查看器, 一键脚本, 内核升级, 安全防护, 应用安全, 本地提权, 漏洞缓解, 系统加固, 网络安全, 自动化运维, 补丁修复, 运维工具, 隐私保护, 页缓存