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" 扫描器与补丁助手 ![CVE-2026-31431](https://img.shields.io/badge/CVE-2026--31431-red) ![CVSS](https://img.shields.io/badge/CVSS-7.8%20HIGH-red) ![Python](https://img.shields.io/badge/Python-3.7%2B-blue) ![License](https://img.shields.io/badge/License-Internal-orange) **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 格式生成**结构化报告** **注意**:此工具仅供系统管理员进行内部审计和修补使用。请仅在您拥有或已获授权的系统上使用。 ## 界面截图 ![Screen Capture](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/6498e11c37130944.png) ## 主要特性 ### 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报告查看器, 关系图谱, 内核升级, 加密, 基线检查, 子域名枚举, 安全合规, 对称加密, 异步密码接口, 无后门, 本地提权, 漏洞扫描器, 漏洞管理, 漏洞缓解, 系统安全, 系统管理员, 网络代理, 网络安全, 自动化审计, 补丁修复, 隐私保护