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报告查看器, 一键脚本, 内核升级, 安全防护, 应用安全, 本地提权, 漏洞缓解, 系统加固, 网络安全, 自动化运维, 补丁修复, 运维工具, 隐私保护, 页缓存