gagaltotal/cve-2026-31431-copy-fail
GitHub: gagaltotal/cve-2026-31431-copy-fail
针对 CVE-2026-31431 Linux 内核本地提权漏洞的自动化扫描与补丁修复工具,支持批量 SSH 检测、自动内核升级和临时缓解措施。
Stars: 1 | Forks: 0
# CVE-2026-31431 "Copy Fail" 扫描器与补丁助手
   
**Copy Fail** 是一款自动化的安全扫描器与补丁助手,用于检测和修复您的 Linux 基础设施中的 CVE-2026-31431(Linux Kernel algif_aead 本地提权)漏洞。
## 目录
- [描述](#-deskripsi)
- [主要特性](#-fitur-utama)
- [系统要求](#-persyaratan)
- [安装说明](#-instalasi)
- [使用方法](#-cara-penggunaan)
- [命令选项](#-opsi-perintah)
- [使用示例](#-contoh-penggunaan)
- [输出与结果](#-output--hasil)
- [支持的发行版](#-distro-yang-didukung)
- [手动补丁指南](#-panduan-patch-manual)
- [临时缓解措施](#-mitigasi-sementara)
- [故障排除](#-troubleshooting)
- [安全参考](#-referensi-keamanan)
## 描述
**CVE-2026-31431** 是 Linux 内核 `algif_aead`(AEAD 异步密码接口)模块中的一个本地提权(LPE)漏洞。此漏洞允许本地用户将权限提升至 root 级别。
此工具可帮助您:
- **自动扫描** Linux 子网,检测存在漏洞的主机
- 基于内核版本**验证**每台主机的补丁状态
- 通过包管理器升级内核以**自动修补**
- 通过禁用 algif_aead 模块进行**临时缓解**
- 以表格和 JSON 格式生成**结构化报告**
**注意**:此工具仅供系统管理员进行内部审计和修补使用。请仅在您拥有或已获授权的系统上使用。
## 界面截图

## 主要特性
### 1. **可扩展的扫描**
- 扫描单个主机、多个主机或整个子网
- 使用线程池的并行 SSH 连接(默认:30 个线程)
- 基于 Rich UI 的实时进度条
- 针对不稳定连接,通过指数退避算法进行自动重试
### 2. **漏洞检测**
- 检查 SSH 可达性和身份验证
- 读取每台主机的内核版本
- 验证内核是否已修补(基于各发行版数据库)
- 检测 `algif_aead` 模块状态(已加载/未加载)
- 检查是否已应用 modprobe.d 缓解措施
### 3. **自动修补**
通过包管理器在易受攻击的主机上自动升级内核:
- **apt** (Debian/Ubuntu)
- **dnf** (Fedora/RHEL 8+)
- **yum** (RHEL 7, CentOS 7)
- **zypper** (SUSE/openSUSE)
- **pacman** (Arch Linux)
**选项:** 补丁完成后自动重启
### 4. **临时缓解措施**
- 通过 modprobe.d 配置禁用 `algif_aead` 模块
- 适合在等待维护窗口重启前的临时修复
- **注意**:如果模块是内核内置的,则在 RHEL 系列上无效
### 5. **灵活的 SSH 认证**
- 基于 SSH 密钥的身份验证(推荐)
- 基于密码的身份验证
- 支持自定义 SSH 端口
- 连接池优化资源使用
### 6. **完整的安全数据库**
已修补的内核版本数据库,支持:
- Ubuntu (6.8.0-60, 5.15.0-130, 5.4.0-216)
- RHEL / CentOS / AlmaLinux / Rocky (5.14.0-570)
- Fedora (6.14.4, 6.13.12, 6.12.25)
- Debian (6.1.137, 5.10.235)
- Arch Linux (6.14.4)
- Amazon Linux (6.1.134, 5.10.235, 4.14.353)
- SUSE / openSUSE (6.4.0-18, 5.14.21-150600.24)
### 7. **综合报告**
- 彩色表格显示的扫描结果(Rich 格式)
- 汇总统计(主机总数、易受攻击数、已修补数等)
- 将结果导出为 JSON,以便与其他系统集成
- 错误追踪和每台主机的重试计数
## 系统要求
### 系统要求
- **Python**:3.7 或更高版本
- **操作系统**:Linux/Mac/Windows(使用 WSL)
- **网络**:对目标主机具有 SSH 访问权限
- **SSH 密钥或密码**:用于身份验证
### Python 依赖项
```
paramiko>=3.0.0 # SSH library
rich>=13.0.0 # Beautiful terminal UI
```
## 安装说明
### 1. 克隆仓库
```
git clone https://github.com/gagaltotal/cve-2026-31431-copy-fail.git
cd cve-2026-31431-copy-fail
```
### 2. 安装虚拟环境 (VENV)
```
python3 -m venv .venv
source .venv/bin/activate
```
### 3. 安装依赖项
```
pip install -r requirements.txt
```
或手动安装:
```
pip install paramiko>=3.0.0 rich>=13.0.0
```
### 4. 验证安装
```
python3 copyfail_scanner.py --help
```
## 使用方法
### 基本语法
```
# 使用 SSH key 扫描子网
python3 copyfail_scanner.py --subnet --user --key
# 扫描多个特定主机
python3 copyfail_scanner.py --hosts ,, --user [--password ]
# 扫描 + 自动 patch
python3 copyfail_scanner.py --subnet --user --key --patch
# 扫描 + 临时缓解
python3 copyfail_scanner.py --subnet --user --key --mitigate
```
## 命令选项
| 选项 | 描述 | 示例 |
|------|-----------|--------|
| `--subnet` | 目标子网 CIDR(与 --hosts 互斥) | `--subnet 192.168.1.0/24` |
| `--hosts` | 以逗号分隔的 IP 列表(与 --subnet 互斥) | `--hosts 192.168.1.10,192.168.1.20` |
| `--user` | SSH 用户名 **(必填)** | `--user root` |
| `--password` | SSH 密码(可选,在没有密钥时使用) | `--password secret123` |
| `--key` | SSH 私钥路径 | `--key ~/.ssh/id_rsa` |
| `--port` | SSH 端口(默认:22) | `--port 2222` |
| `--threads` | 并行线程数(默认:30) | `--threads 50` |
| `--patch` | 自动修补易受攻击主机的内核 | `--patch` |
| `--reboot` | 补丁应用后自动重启(与 --patch 一起使用) | `--patch --reboot` |
| `--mitigate` | 应用临时缓解措施(禁用 algif_aead) | `--mitigate` |
| `--output` | 将扫描结果导出为 JSON 文件 | `--output hasil.json` |
| `--yes` | 在修补/缓解前跳过确认提示 | `--yes` |
## 使用示例
### 示例 1:基础子网扫描(只读)
```
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa
```
**输出**:显示扫描结果表和摘要
### 示例 2:使用密码扫描特定主机
```
python3 copyfail_scanner.py \
--hosts 10.0.1.5,10.0.1.6,10.0.1.7 \
--user admin \
--password my_password123
```
### 示例 3:扫描 + 临时缓解
```
python3 copyfail_scanner.py \
--subnet 172.16.0.0/16 \
--user root \
--key ~/.ssh/id_rsa \
--mitigate
```
**动作**:扫描所有主机,然后在易受攻击的主机上禁用 algif_aead 模块(需要确认)
### 示例 4:扫描 + 自动修补(不重启)
```
python3 copyfail_scanner.py \
--subnet 192.168.0.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--patch
```
**动作**:升级内核,但不自动重启(需要手动重启)
### 示例 5:扫描 + 修补 + 自动重启
```
python3 copyfail_scanner.py \
--subnet 10.10.0.0/24 \
--user root \
--key ~/.ssh/id_rsa \
--patch \
--reboot \
--yes
```
**动作**:扫描、修补内核、自动重启、跳过确认
### 示例 6:扫描 + 导出 JSON 结果
```
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user sysadmin \
--key ~/.ssh/id_rsa \
--output scan_results_$(date +%Y%m%d_%H%M%S).json
```
**输出**:终端显示表格 + 文件中保存 JSON 结果
### 示例 7:使用多线程和自定义端口进行扫描
```
python3 copyfail_scanner.py \
--subnet 10.0.0.0/25 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--port 2222 \
--threads 50
```
## 输出与结果
### 终端输出(表格)
扫描输出示例:
```
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┓
┃ IP ┃ Hostname ┃ Distro ┃ Kernel ┃ algif ┃ Status ┃ Action ┃ Notes ┃
┣━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━┫
┃ 192.168.1.10 ┃ web-01 ┃ Ubuntu 22.04 ┃ 6.8.0-60 ┃ LOADED ┃ ✓ AMAN ┃ - ┃ Patched ┃
┃ 192.168.1.11 ┃ web-02 ┃ Ubuntu 20.04 ┃ 5.4.0-200 ┃ NOT_LDD ┃ ✗ RENTA ┃ Patched ┃ - ┃
┃ 192.168.1.12 ┃ db-01 ┃ RHEL 8.9 ┃ 5.14.0-560 ┃ LOADED ┃ ? TIDAK ┃ - ┃ Distro ┃
┗━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┛
Ringkasan:
Total host dipindai: 12
Dapat diakses (SSH): 11
Offline: 1
RENTAN: 2
Sudah di-patch: 8
Status tidak diketahui: 1
```
### 输出列
- **IP**:目标 IP 地址
- **Hostname**:`hostname -f` 的主机名结果
- **Distro**:Linux 发行版(来自 /etc/os-release)
- **Kernel**:内核版本(来自 `uname -r`)
- **algif_aead**:模块状态(LOADED/not loaded/blocked)
- **Status**:✓ 安全 / ✗ 易受攻击 / ? 未知
- **Patch/Mitigasi**:已应用的操作(Kernel upgrade/Mitigasi)
- **Keterangan**:错误或附加信息
### JSON 导出格式
```
{
"cve": "CVE-2026-31431",
"scan_time": "2026-05-08T15:30:45.123456",
"results": [
{
"ip": "192.168.1.10",
"ssh_reachable": true,
"auth_ok": true,
"hostname": "web-01",
"distro": "Ubuntu 22.04 LTS",
"os_id": "ubuntu",
"kernel_version": "6.8.0-60-generic",
"algif_loaded": true,
"modprobe_blocked": false,
"patched": true,
"patch_applied": false,
"mitigation_applied": false,
"retry_count": 0,
"error": ""
}
]
}
```
## 支持的发行版
扫描器支持以下发行版的自动检测:
| 发行版 | 包管理器 | 已修补的内核版本 | 备注 |
|--------|-----------------|-------------------------|---------|
| **Ubuntu** | apt | 6.8.0-60, 5.15.0-130, 5.4.0-216 | LTS 及当前版本 |
| **Debian** | apt | 6.1.137, 5.10.235 | 稳定版 |
| **RHEL** | dnf/yum | 5.14.0-570 | 包括 CentOS Stream |
| **AlmaLinux** | dnf | 5.14.0-570 | RHEL 的直接替代品 |
| **Rocky** | dnf | 5.14.0-570 | 面向企业 |
| **Fedora** | dnf | 6.14.4, 6.13.12, 6.12.25 | 前沿版本 |
| **Amazon Linux** | dnf | 6.1.134, 5.10.235, 4.14.353 | AWS 兼容 |
| **SUSE / openSUSE** | zypper | 6.4.0-18, 5.14.21-150600.24 | 企业版与社区版 |
| **Arch Linux** | pacman | 6.14.4 | 滚动更新版本 |
**对于未检测到的发行版**:手动验证内核版本。通常 >= 6.14.4 的内核是安全的。
## 手动补丁指南
如果您倾向于手动修补或自动修补失败,请遵循各发行版的指南:
### Ubuntu / Debian
```
sudo apt update
sudo apt upgrade linux-image-generic kmod
sudo reboot
```
### RHEL 8+ / CentOS Stream / AlmaLinux / Rocky
```
sudo dnf clean metadata
sudo dnf upgrade kernel
sudo reboot
```
### Fedora
```
sudo dnf upgrade kernel
sudo reboot
```
### Amazon Linux 2023 / 2
```
sudo dnf upgrade kernel
sudo reboot
```
### SUSE / openSUSE
```
sudo zypper update kernel-default
sudo reboot
```
### Arch Linux
```
sudo pacman -Syu linux linux-headers
sudo reboot
```
## 临时缓解措施
如果您无法立即重启以进行内核升级,请应用缓解措施:
```
# 通过 modprobe.d 禁用 modul algif_aead
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif_aead.conf
# 如果 modul 已经 loaded 则卸载
sudo rmmod algif_aead 2>/dev/null || echo "Module not loaded"
```
**重要提示**:
- 缓解措施只是临时修复
- 不要依赖此作为长期解决方案
- 仍需尽快安排内核升级
- 在带有 `CONFIG_CRYPTO_USER_API_AEAD=y` 的 RHEL 系列中,模块是内核内置的,因此 modprobe.d 无效 → **升级内核是唯一的解决方案**
## 故障排除
### 1. 连接超时
```
Error: Port SSH tidak terbuka
```
**解决方案**:
- 检查 SSH 端口是否开放:`nc -zv 22`
- 检查防火墙规则
- 如果 SSH 运行在自定义端口,请使用 `--port`
### 2. 认证失败
```
Error: Autentikasi SSH gagal
```
**解决方案**:
- 验证 SSH 密钥权限:`chmod 600 ~/.ssh/id_rsa`
- 测试手动连接:`ssh -i ~/.ssh/id_rsa user@host`
- 如果倾向于密码认证,请使用 `--password`
- 检查用户是否已在远程主机上设置
### 3. 修补时权限被拒绝
```
Exit code 1: dpkg: error processing...
```
**解决方案**:
- 确保用户具有 sudo 权限(最好是无密码 sudo)
- 检查 sudoers 文件:`sudo visudo`
- 要实现完全自动修补,用户必须能够在没有密码提示的情况下运行 `apt/dnf/yum`
### 4. 多次重试
```
Retry: 3x | Host temporary unavailable
```
**解决方案**:
- 网络不稳定,请稍候重试
- 减少线程数:`--threads 10`
- 检查主机健康状况和 SSH 守护进程状态
### 5. “未知的发行版”
```
Status: ? TIDAK DIKETAHUI
```
**解决方案**:
- 内核 >= 6.14.4 被认为是安全的
- 手动验证:`uname -r 并与安全公告进行比较
- 如有需要,可添加至 PATCHED_KERNEL_MAP
### 6. 补丁失败
```
Exit code 1: Failed to lock apt database
```
**解决方案**:
- 主机正在运行其他包管理器
- 等待或在合适的时间手动运行补丁
- 检查日志:`sudo tail -f /var/log/apt/term.log`
## 安全参考
### 官方 CVE 信息
- **NVD**:https://nvd.nist.gov/vuln/detail/CVE-2026-31431
- **copy.fail**:https://copy.fail(官方公告)
### 供应商安全公告
- **Ubuntu**:https://ubuntu.com/security/CVE-2026-31431
- **Red Hat**:https://access.redhat.com/security/cve/cve-2026-31431
- **AlmaLinux**:https://almalinux.org/blog/2026-05-01-cve-2026-31431-copy-fail/
- **Debian**:https://security-tracker.debian.org/tracker/CVE-2026-31431
### 技术细节
- CVSS 评分:**7.8 HIGH**
- 攻击向量:本地
- 所需权限:低
- 用户交互:无需
- 影响:完全的系统入侵(机密性、完整性、可用性)
### 内核补丁参考
- **Linux Kernel Git**:https://github.com/torvalds/linux/commit/...(特定补丁哈希值)
- **LKML 讨论**:https://lkml.org/(内核邮件列表)
## 许可证与免责声明
**仅供内部使用** — 此工具仅供有权限的系统管理员进行审计和补丁管理使用。
```
DISCLAIMER:
- Use only on systems you own or have explicit authorization to access
- Automatic patching dan reboot dapat menyebabkan downtime
- Test di staging environment sebelum production deployment
- Pastikan backup tersedia sebelum patch
- Developer tidak bertanggung jawab atas data loss atau service disruption
```
## 贡献与支持
**作者**:GagalTotal
**代码仓库**:https://github.com/gagaltotal/cve-2026-31431-copy-fail
**联系方式**:ghostgtr666
如需提交 Bug 报告、功能请求或提问:
1. 开启 GitHub Issues
2. 附上输出日志和环境详细信息
3. 描述需具体,并提供可复现的步骤
**最后更新**:2026 年 5 月 8 日
**扫描器版本**:1.0
标签:algif_aead, Copy Fail, CVE-2026-31431, GPT, JSON报告, Linux内核, LPE, Python, Subnet扫描, Sysadmin, Web报告查看器, 关系图谱, 内核升级, 加密, 基线检查, 子域名枚举, 安全合规, 对称加密, 异步密码接口, 无后门, 本地提权, 漏洞扫描器, 漏洞管理, 漏洞缓解, 系统安全, 系统管理员, 网络代理, 网络安全, 自动化审计, 补丁修复, 隐私保护