CVE-2026-31431“复制失败”的Shell扫描器 — 通过Linux内核页缓存损坏(algif_aead/AF_ALG)进行本地权限提升。检查内核版本、补丁状态、模块状态、setuid暴露和缓解措施。支持Debian 11–13和Ubuntu 20.04–25.10。CI/CD就绪(退出代码+JSON输出)。
基于 Shell 的扫描器,用于检测 CVE-2026-31431 "Copy Fail",这是 Linux 内核加密子系统(algif_aead / AF_ALG 接口)中的一个本地权限提升漏洞。一个无特权的本地用户可以向内存中的 setuid 二进制文件(例如 /usr/bin/su)的页缓存写入 4 个字节,从而获得 root shell —— 无需接触磁盘上的文件。
a664bf3d603d| 发行版 | 版本 | 已修补版本 |
|---|---|---|
| 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 检测。
# 基本扫描
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、工单系统或合规仪表板。
该脚本以两种语言打印结果:
两个部分都在逐项检查结果之后打印到标准输出。
=== 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
✗ 内核版本
✗ 补丁存在性
✗ algif_aead 模块
✗ AF_ALG 套接字
✗ Setuid 二进制文件
sudo apt update && sudo apt full-upgrade && sudo reboot
# 重启后: uname -v → 必须显示 >= 6.1.170-1 (Bookworm)
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 服务器或磁盘加密。
MIT
| # | 检查项 | 方法 |
|---|
| 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 警告 |