GubiczaP/cve-2026-31431-checker
GitHub: GubiczaP/cve-2026-31431-checker
这是一个用于检测CVE-2026-31431「Copy Fail」Linux内核本地提权漏洞的Shell扫描器。
Stars: 0 | Forks: 1
# CVE-2026-31431 "Copy Fail" — 漏洞检测脚本
一个用于检测 **CVE-2026-31431 "Copy Fail"** 的基于Shell的扫描器。该漏洞是Linux内核密码子系统(`algif_aead` / AF_ALG接口)中的一个本地提权漏洞。非特权本地用户可向一个setuid二进制文件(例如 `/usr/bin/su`)的内存页缓存写入4字节数据,并获取一个root shell——且无需修改磁盘上的文件。
- **CVSS评分:** 7.8 (高危)
- **存在内核版本:** 2017年 (4.14) 起
- **上游修复提交:** [`a664bf3d603d`](https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5)
- **CISA KEV:** 于2026年5月1日添加
- **更多信息:** [copy.fail](https://copy.fail)
## 支持的发行版
| 发行版 | 版本 | 已修补版本 |
|---|---|---|
| Debian | 11 Bullseye | `5.10.251-3` |
| Debian | 12 Bookworm | `6.1.170-1` |
| Debian | 13 Trixie | `6.12.85-1` |
| Debian | Sid / Forky | `6.19.14-1` |
| Ubuntu | 20.04 LTS Focal (GA) | `5.4.0-220.240` |
| Ubuntu | 20.04 LTS Focal (HWE) | `5.15.0-135.145~20.04.1` |
| Ubuntu | 22.04 LTS Jammy (GA) | `5.15.0-135.145` |
| Ubuntu | 22.04 LTS Jammy (HWE) | `6.8.0-61.63~22.04.1` |
| Ubuntu | 24.04 LTS Noble | `6.8.0-61.63` |
| Ubuntu | 24.10 Oracular | `6.11.0-27.27` |
| Ubuntu | 25.04 Plucky | `6.14.0-15.15` |
| Ubuntu | 25.10 Questing | 主线修复 (≥ 6.15) |
| 通用 | 任意 | 主线范围检查 (4.14 – 6.14 受影响) |
基于上述版本的Ubuntu衍生版(如Pop!_OS、Linux Mint、Elementary OS等)也可通过检查 `/etc/os-release` 中的 `ID_LIKE` 字段进行检测。
## 检查项
| # | 检查项 | 方法 |
|---|---|---|
| 1 | 内核版本 | `uname -r` / `uname -v` / `dpkg` / `/proc/version_signature` |
| 2 | 补丁存在性 | Debian构建版本、Ubuntu包版本、`/proc/version`中的提交前缀 |
| 3 | `algif_aead` 模块 | `/proc/modules`, `modprobe.d`黑名单,磁盘上的`.ko`文件 |
| 4 | AF_ALG 套接字 | 通过Python 3进行实时 `socket(AF_ALG, …)` 尝试 |
| 5 | Setuid二进制文件 | 常见的setuid-root二进制文件作为写入目标 |
| 6 | 缓解措施 | AppArmor, SELinux, seccomp状态 |
| 7 | 内核配置 | `CONFIG_CRYPTO_AUTHENC`, `CONFIG_CRYPTO_USER_API_AEAD` |
| 8 | 用户命名空间 | `unprivileged_userns_clone`, `max_user_namespaces` |
| 9 | 透明大页 | THP设置及其对漏洞利用的影响 |
| 10 | 环境 | Docker / Kubernetes / WSL检测,root用户警告 |
## 使用方法
```
# 基本扫描
bash cve-2026-31431-detect.sh
# 无颜色输出(日志文件,CI)
bash cve-2026-31431-detect.sh --no-colour
# JSON 输出(机器可读,用于流水线)
bash cve-2026-31431-detect.sh --json
# 静默模式 — 仅打印摘要
bash cve-2026-31431-detect.sh --quiet
# 合并标志
bash cve-2026-31431-detect.sh --json --quiet
```
无需root权限。除标准shell(`bash` ≥ 4.3)外无需安装任何包,可选用`python3`进行实时AF_ALG套接字测试。
## 退出码
| 代码 | 含义 |
|---|---|
| `0` | 未发现漏洞条件 |
| `1` | 发现一个或多个漏洞条件 |
| `2` | 脚本错误 / 无法完成检查 |
专为DevSecOps流程设计——可将JSON输出管道传输至您的SIEM、工单系统或合规性仪表板。
## 输出
脚本以两种语言打印结果:
- **英文** — 包含状态、风险分解和逐步修复说明的完整详细摘要
- **匈牙利语 (Magyar)** — 内容与英文完全相同的匈牙利语版本
在各项检查结果之后,这两个部分都会打印到标准输出。
### 示例(干净系统)
```
=== Kernel Version ===
[INFO] Distro flavour : ubuntu (id=ubuntu, codename=jammy, version=22.04)
[INFO] Kernel release : 5.15.0-135-generic
[OK] Kernel version
Reason : Ubuntu jammy: kernel 5.15.0-135.145 >= patched version 5.15.0-135.145
...
✅ PROTECTED — SYSTEM IS NOT VULNERABLE
```
### 示例(受影响系统)
```
❌ VULNERABLE — IMMEDIATE ACTION REQUIRED
✗ Kernel version
✗ Patch presence
✗ algif_aead module
✗ AF_ALG socket
✗ Setuid binaries
```
## 修复方案
### Debian
```
sudo apt update && sudo apt full-upgrade && sudo reboot
# 重启后:uname -v → 必须显示 >= 6.1.170-1(Bookworm)
```
### Ubuntu
```
sudo apt update && sudo apt full-upgrade && sudo reboot
# 重启后:cat /proc/version_signature
```
### 临时缓解措施(如果无法立即更新内核)
仅当 `CONFIG_CRYPTO_USER_API_AEAD=m`(编译为模块)时有效。若该选项已编译进内核(`=y`),则**无效**。
```
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true
```
这**不会**影响SSH、dm-crypt/LUKS、OpenSSL、GnuTLS、NSS、Web服务器或磁盘加密。
## 重要提示
- 该脚本**不会**执行任何漏洞利用代码——仅进行配置和版本检查。
- Copy Fail**仅限本地提权**——无法通过互联网进行远程利用。
- 该漏洞修改的是**内存中的页缓存**;磁盘上的文件不会被触及,因此文件完整性工具(如AIDE、Tripwire等)**无法**检测到活跃攻击。
- 重启会清除页缓存,但漏洞依然存在——**打补丁是唯一的永久修复方案**。
- 以root身份运行脚本可能会导致AF_ALG套接字检查出现假阴性(root用户始终可以打开AF_ALG套接字)。
## 参考
- Debian安全跟踪器: https://security-tracker.debian.org/tracker/CVE-2026-31431
- Ubuntu安全: https://ubuntu.com/security/CVE-2026-31431
- Ubuntu USN-7523-1: https://ubuntu.com/security/notices/USN-7523-1
- 上游修复: https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
- 漏洞详情: https://copy.fail
- 原始检测脚本: https://github.com/liamromanis101/CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script
## 许可证
MIT
标签:0day挖掘, AF_ALG, algif_aead, Awesome, Cutter, CVE-2026-31431, Debian, JSON 输出, Linux 内核, osquery, setuid, Shell 脚本, URL发现, 内核安全, 内核模块, 加密子系统, 安全检测, 安全资源, 应用安全, 本地权限提升, 权限提升漏洞, 系统漏洞, 系统管理, 缓解措施, 补丁检查, 运维安全, 逆向工具, 页面缓存