CVE-2026-31431 (Copy Fail) 是 Linux 内核本地提权漏洞,通过 AF_ALG 套接字(address family 38)结合 splice() 零拷贝系统调用,绕过文件写权限篡改页缓存(page cache),实现无写权限的 SUID 二进制文件篡改,进而获取 root 权限。
socket(AF_ALG, SOCK_SEQPACKET, 0) # 创建 AF_ALG 套接字
-> bind(authencesn(hmac(sha256),cbc(aes))) # 绑定 AEAD 加密模板
-> sendmsg(AEAD 操作) # 触发内核加密路径
-> splice(-> 目标文件) # 零拷贝写入,绕过权限检查
-> 篡改 /usr/bin/su 等 SUID 文件 # 提权至 root
| 内核分支 | 受影响范围 | 已修复版本 |
|---|---|---|
| mainline / 6.19.x | < 6.19.12 | >= 6.19.12 |
| 6.18.x (stable) | < 6.18.22 | >= 6.18.22 |
| 6.12.x (LTS) | < 6.12.23 | >= 6.12.23 |
| 6.6.x (LTS) | < 6.6.87 | >= 6.6.87 |
| 6.1.x (LTS) | < 6.1.130 | >= 6.1.130 |
| 4.14 ~ < 7.0 | 全部受影响 | 升级至安全版本 |
| < 4.14 | 不受影响 | - |
| >= 7.0 | 已含修复 | - |
# 下载脚本
wget https://raw.githubusercontent.com/tangjie1/CVE-2026-31431-Check/main/cve-2026-31431-check.sh
# 赋予执行权限并运行(需要 root)
chmod +x cve-2026-31431-check.sh
sudo ./cve-2026-31431-check.sh
# 无交互模式(适用于自动化/CI)
sudo ./cve-2026-31431-check.sh --non-interactive
| 编号 | 检测内容 | 说明 |
|---|---|---|
| [1.0] | 受影响版本范围表 | 展示各分支受影响/已修复版本对照 |
| [1.1] | 内核版本 | 对照已知受影响范围和已修复基线 |
| [1.2] | algif_aead 模块状态 | 四态: 内建 / 已加载 / 存在可按需加载 / 不存在 |
| [1.3] | authencesn 加密模板 | /proc/crypto 中是否可用 |
| [1.4] | 缓解措施 | initcall_blacklist + modprobe.d 黑名单 |
| [1.5] | 综合判定 | 多因素交叉给出 safe/medium/high/critical 结论 |
| 编号 | 检测内容 | 说明 |
|---|---|---|
| [2.1] | SUID 页缓存检测 | dd direct I/O vs 缓存哈希对比 |
| [2.2] | 模块加载历史 | dmesg + lsmod 加载时长 |
| [2.3] | Shell 历史扫描 | 全用户 .bash_history 关键字匹配 |
| [2.4] | 系统文件检测 | UID=0 异常用户 / passwd & SUID 修改时间 |
| [2.5] | 临时目录扫描 | /tmp /var/tmp /dev/shm 近24h 可疑文件 |
| [2.6] | 系统日志审计 | su 失败记录 + sudo 漏洞关键词 |
| [2.7] | 容器逃逸检测 | Docker 环境 + seccomp + /proc/1/root |
| 方式 | 原理 | 是否需要重启 | 适用场景 |
|---|---|---|---|
| 方式一 | modprobe.d 黑名单 + rmmod | 否 | CONFIG=m (模块模式) |
| 方式二 | initcall_blacklist 内核参数 | 是 | CONFIG=y (内建模式) 或深度防御 |
| 方式三 | 升级内核至安全版本 | 是 | 永久修复(推荐) |
Ubuntu / Debian / Kali / CentOS / RHEL / Rocky / AlmaLinux / Fedora / openSUSE / Arch Linux / Alpine Linux
MIT License
本工具仅用于安全研究和授权渗透测试。使用者需确保遵守当地法律法规,在获得明确授权的目标系统上使用。开发者不对任何未授权使用后果负责。