mgiay/CVE_2026_31431_FIXED
GitHub: mgiay/CVE_2026_31431_FIXED
提供 CVE-2026-31431(Copy Fail)Linux 内核本地权限提升漏洞的官方修复方案与补丁信息。
Stars: 0 | Forks: 0
# CVE-2026-31431 — "Copy Fail"
## 概述
**CVE-2026-31431**(绰号 **“Copy Fail”**)是 **Linux kernel** 中的一个严重的本地权限提升(Local Privilege Escalation — LPE)漏洞,位于 `AF_ALG`(userspace crypto API)加密子系统的 `algif_aead` 模块中。未授权攻击者(unprivileged user)可以利用此漏洞可靠地获取 **root** 权限,无需竞争条件。
该漏洞于 **2026年4月22日** 正式披露,且已在实际环境中被利用。概念验证(PoC) exploit 仅有约 732 字节的 Python 代码,可在多种 Linux 发行版上稳定运行。
## CVE 信息
| 属性 | 值 |
| ----------------------- | ------------------------------------------------------- |
| **CVE 编号** | CVE-2026-31431 |
| **名称** | Copy Fail |
| **漏洞类型** | Incorrect Resource Transfer Between Spheres (CWE-669) |
| **CVSS 3.1 分数** | **7.8 (HIGH)** |
| **CVSS 向量** | `CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H` |
| **影响范围** | 机密性 HIGH,完整性 HIGH,可用性 HIGH |
| **利用条件** | 本地访问,低权限,无需用户交互 |
| **CISA KEV** | 于 2026 年 5 月 1 日加入 — 修复截止日期 2026 年 5 月 15 日 |
| **状态** | 已发布修复,正在被野外利用 |
### CVSS 3.1 分数详解
| 组件 | 值 | 含义 |
| ------------------------ | ------------- | ----------------------------------- |
| Attack Vector (AV) | **L**ocal | 需要本地访问机器 |
| Attack Complexity (AC) | **L**ow | 无需特殊条件 |
| Privileges Required (PR) | **L**ow | 只需普通用户(非 root) |
| User Interaction (UI) | **N**one | 无需受害者交互 |
| Scope (S) | **U**nchanged | 限制在 kernel 内 |
| Confidentiality (C) | **H**igh | 可读取全部系统数据 |
| Integrity (I) | **H**igh | 可覆盖/完全修改系统 |
| Availability (A) | **H**igh | 可导致 DoS/完全控制 |
## 技术根因(Root Cause)
### 背景
该漏洞存在于 **`algif_aead`** — Linux kernel 的一个模块,通过 socket 接口(`AF_ALG`)提供来自 userspace 的 **AEAD**(Authenticated Encryption with Associated Data)加密操作接口。
### 根因
2017 年(commit `72548b093ee3`)引入 kernel 的一个优化补丁允许 `algif_aead` 进行 **in-place**(原地)加密操作 — 即使用同一内存区域作为加密操作的源(source)和目标(destination)。
问题出现在 `AF_ALG` socket 接口与 **`splice()`** 系统调用交互时。当复制操作失败(failed copy)时,in-place AEAD 路径中的错误处理机制不正确,导致 kernel **向任意可读文件的 page cache 写入 4 字节可控数据**。
```
┌──────────────┐ splice() ┌──────────┐ recv() ┌──────────────┐
│ File đọc │ ──────────────▶ │ Pipe │ ──────────────▶ │ AF_ALG │
│ (bất kỳ) │ │ │ │ socket │
└──────────────┘ └──────────┘ └──────┬───────┘
│
in-place AEAD
sai đường dẫn
│
┌───────▼───────┐
│ 4-byte ghi │
│ vào page │
│ cache │
└───────────────┘
```
### 关键点
- 攻击者修改 RAM 中 setuid 二进制文件(例如:`/usr/bin/su`)的 **page cache**,而**完全不修改磁盘上的文件**。
- Page cache 在 **containers 和 host 之间共享**,可实现容器逃逸。
- 攻击是 **确定性的(deterministic)** — 不依赖竞争条件。
- **KASLR、SMEP、SELinux、AppArmor** 等保护机制均无法阻止,因为这是 kernel 层的逻辑错误,而非传统内存错误。
## 受影响版本
### Linux Kernel
所有从 **4.14** 及以上(2017 年发布)的 kernel 直至修复版本:
| 版本范围 | 修复版本 |
| ----------------- | -------- |
| 4.14 → 5.10.x | 5.10.254 |
| 5.11 → 5.15.x | 5.15.204 |
| 5.16 → 6.1.x | 6.1.170 |
| 6.2 → 6.6.x | 6.6.137 |
| 6.7 → 6.12.x | 6.12.85 |
| 6.13 → 6.18.x | 6.18.22 |
| 6.19.x | 6.19.12 |
| 7.0-rc1 → 7.0-rc6 | 7.0-rc7+ |
### 受影响发行版
| 发行版 | 状态 |
| ------------------------------------ | -------------------------------------------------- |
| **Ubuntu** (24.04 LTS, ...) | 已修复 |
| **RHEL** (8.x, 9.x, 10.x) | 已修复(RHEL 9: RHSA-2026:13565, 2026/05/04) |
| **Amazon Linux** (2, 2023) | 已修复 |
| **SUSE Linux** (15, 16) | 已修复 |
| **Debian**(近期版本) | 已修复 |
| **Fedora** | 已修复 |
| **Arch Linux** | 已修复 |
| **CloudLinux** (8, 9, 10) | 已修复 |
| **OpenShift Container Platform 4.x** | 已修复 |
## 利用机制(Exploitation)
### 前置条件
1. 以普通用户(非 root)进行 **本地访问**(local access)
2. `AF_ALG` / `algif_aead` 模块必须启用(通常直接编译进 kernel)
3. **无需**:容器内 root、自定义内核模块、网络权限或特殊 capability
### 攻击链(5 个阶段)
| 阶段 | 描述 |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **1. 侦察** | 检查 kernel 版本以确定是否易受攻击 |
| **2. 工具准备** | 精简的 Python 脚本(约 732 字节),仅使用标准 syscall,无需编译 |
| **3. 执行** | 以普通用户或被入侵的容器进程身份运行 |
| **4. 破坏** | 打开 `AF_ALG` socket → 使用特殊 AAD 发送 `sendmsg()` → 通过 pipe 执行 `splice()` → `recv()` 返回 `EBADMSG` → 向 setuid 文件的 page cache 写入 4 字节可控数据 |
| **5. 提权** | 修改 `/etc/passwd` 或 `/usr/bin/su` 的 page cache → UID 改为 0 → 调用 `su` 获取 root shell |
### 公开的 Exploit 代码
- **GitHub 仓库**:`rootsecdev/cve_2026_31431`(detector + exploit)
- **GitHub 仓库**:`theori-io/copy-fail-CVE-2026-31431`(732 字节 PoC)
- **披露页面**:`copy.fail`
## 影响(Impact)
| 方面 | 程度 |
| ------------------------ | ----------------------------------------------- |
| **权限提升** | 普通用户 → root(UID 0) |
| **容器逃逸** | 容器 → host root |
| **多租户环境** | 一个 tenant 被入侵 → 整个 node 被控制 |
| **CI/CD pipeline** | 恶意 CI job → runner 上的 root |
| **共享 SSH 服务器** | 一个用户 → 整个系统 root |
| **Cloud/Kubernetes** | 跨容器、跨 pod 权限提升 |
**这是自 Dirty Pipe(CVE-2022-0847)以来 Linux 上最危险的 LPE 漏洞。**
## 检测与 IOC(入侵指标)
IOC(Indicators of Compromise)是网络安全术语,指**表明系统已被入侵或被利用的迹象**。在 CVE-2026-31431(Copy Fail)的背景下,IOC 用于回答:“我的系统是否真的通过此漏洞被攻击了?” — 这与仅检查“系统是否在受影响范围内”不同。
以下是 6 个主要 IOC 组,由脚本 `CVE-2026-31431-CHECKER.sh --scan-ioc` 使用。大多数 IOC 检查需要 **root 权限**,因为需要读取 `/root`、`/home/*`、audit log、auth log 或使用 `lsof` 查看其他用户的进程。
### 第 1 组:磁盘上的 exploit — 检测攻击工具
扫描 `/tmp`、`/var/tmp`、`/dev/shm`、`/home`、`/root`、`/opt` 目录:
| IOC | 描述 |
| ------------------------------------ | ----------------------------------------------------------------- |
| `test_cve_2026_31431.py` | 检测脚本 — 用于检查 kernel 是否易受攻击 |
| `exploit_cve_2026_31431.py` | LPE exploit 脚本 — 修改 page cache 以获取 root |
| `copy_fail_exp.py` | 独立 PoC 约 732 字节 — 跨发行版工作 |
| `rootsecdev/cve_2026_31431` | 包含 detector + exploit 的 GitHub 仓库 |
| `theori-io/copy-fail-CVE-2026-31431` | Theori(发现者)的 GitHub 仓库 |
### 第 2 组:Shell 历史 — 追踪命令历史
读取所有用户(包括 root)的 `.bash_history` 和 `.zsh_history`,搜索关键词:
- `CVE-2026-31431`
- `copy.fail`
- `copy_fail`
历史记录中出现这些关键词表明攻击者(或用户)曾研究或执行过 exploit。
### 第 3 组:正在使用 AF_ALG 的进程 — 检测正在运行的 exploit
使用 `lsof` 列出所有打开 **AF_ALG socket** 的进程。来自非 root 进程的 AF_ALG socket 非常可疑 — 这正是 exploit 用于触发 in-place AEAD 错误的接口。
此外还监控:
- 来自 non-root 上下文的 `authencesn(hmac(sha256),cbc(aes))` 算法访问
- 通过 pipe 到 AF_ALG socket 的 `splice()` 系统调用
- AF_ALG socket 上 `recv()` 返回 `EBADMSG` — AEAD 认证检查失败的迹象
- 输出中的 `PWND` 标记(detector 信标确认 page cache 已被修改)
### 第 4 组:Page cache 完整性 — Copy Fail 最独特的 IOC
这是 CVE-2026-31431 **最重要且最独特** 的 IOC。机制如下:
```
Lần chạy 1: Tạo baseline (snapshot)
cp /etc/passwd → /etc/passwd.cve202631431_snapshot
cp /usr/bin/su → /usr/bin/su.cve202631431_snapshot
cp /usr/bin/sudo → /usr/bin/sudo.cve202631431_snapshot
cp /bin/su → /bin/su.cve202631431_snapshot
Lần chạy 2: So sánh MD5 hash giữa file thật và snapshot
Nếu KHÁC NHAU → page cache đã bị sửa trong RAM
(file trên đĩa thực tế KHÔNG hề thay đổi!)
Nếu GIỐNG NHAU → an toàn, không có dấu hiệu bị can thiệp
```
此机制利用了 Copy Fail 的本质:exploit **仅修改 RAM 中的 page cache**,不触碰磁盘。比较两个时间点的哈希值可检测 page cache 中的异常变化。超过 24 小时的旧快照会自动删除以创建新 baseline,避免因合法系统更新导致的误报。
### 第 5 组:Audit log — 检测异常权限提升
使用 `ausearch` 检查 audit log,查找:
- 升至 **UID 0**(root)的事件,但**没有**相应的 `sudo` 或 `su` 记录
- Syscall audit 记录显示普通进程突然以 `euid=0` 运行
这是典型的 LPE 迹象:一个普通用户进程突然获得 root 权限,未通过任何合法机制。
### 第 6 组:Auth log — 检测异常 root shell
读取 `/var/log/auth.log`(Debian/Ubuntu)或 `/var/log/secure`(RHEL/SUSE),统计:
- 近期 **root 登录**(SSH 密钥、密码)次数 — 超过 5 次即可疑
- 模式:普通用户 SSH 登录 → 随后立即有 UID 0 的命令运行
- 来自非交互式上下文的 root shell:CI runner、容器、服务账户
### IOC 汇总表
| # | IOC 组 | 检测技术 | 可信度 | 需要 root |
| --- | -------------------- | ------------------------------------ | --------------------------------------- | ------------ |
| 1 | Exploit 文件 | `find` 扫描文件系统 | **高** — 文件明确 | 是 |
| 2 | Shell 历史 | 在 `.bash_history` 中搜索关键词 | **高** — 历史证据 | 是 |
| 3 | AF_ALG 进程 | `lsof` + syscall 检查 | **中等** — 可能误报 | 是 |
| 4 | Page cache 完整性 | 两次运行比较 MD5 哈希 | **非常高** — Copy Fail 特有 | 是 |
| 5 | Audit log | `ausearch` 查找异常 UID 0 | **中等** — 需要 auditd 开启 | 是 |
| 6 | Auth log | 统计 root 登录 + 模式分析 | **低-中等** — 易误报 | 是 |
## 修复与缓解(Remediation)
### 优先级 1:Kernel 修复(0–24 小时)
从厂商更新 kernel 到已修复版本:
| 发行版 | 最低修复版本 |
| --------------------- | ---------------------------------------- |
| **Ubuntu 24.04 LTS** | `6.17.0-1007-aws` |
| **Amazon Linux 2023** | `6.18.8-9.213.amzn2023` |
| **RHEL 10.1** | `6.12.0-124.45.1.el10_1` |
| **SUSE 16** | `6.12.0-160000.9-default` |
| **CloudLinux 8** | `kernel-4.18.0-553.121.1.lve.el8.x86_64` |
| **CloudLinux 9** | `kernel-5.14.0-611.49.2.el9_7` |
| **CloudLinux 10** | `kernel-6.12.0-124.52.2.el10_1` |
### 优先级 2:临时缓解措施(如无法立即修复)
添加内核启动参数以禁用受影响模块:
```
# 方法 1:阻止全部 algif_aead
initcall_blacklist=algif_aead_init
# 方法 2:阻止全部 af_alg 接口
initcall_blacklist=af_alg_init
# 方法 3:阻止受影响的算法
initcall_blacklist=crypto_authenc_esn_module_init
```
### 优先级 3:额外加固
- 确保 **SELinux** 处于 enforcing 模式
- 禁用不必要的 SSH
- 以 non-root 身份运行工作负载
- 限制 OpenShift 中的 `oc debug` 权限
- 使用默认的 Security Context Constraints
- 对容器实施网络隔离
### 检查受影响状态
```
# 检查当前内核版本
uname -r
# 检查 AF_ALG 是否受支持
grep -q af_alg /proc/crypto && echo "AF_ALG available — potentially vulnerable"
# 检查受影响的算法
grep -q authencesn /proc/crypto && echo "authencesn available — vulnerable algorithm present"
```
## 时间线(Timeline)
| 日期 | 事件 |
| -------------- | ------------------------------------------------------------------- |
| **2017 年** | Commit `72548b093ee3` 将漏洞引入 kernel(in-place AEAD 优化) |
| **2026/04/01** | 修复补丁提交到 Linux mainline(commit `a664bf3d603d`) |
| **2026/04/22** | CVE-2026-31431 正式披露 |
| **2026/04/25** | Upstream 给出 CVSS 7.8 分值 |
| **2026/04/30** | Red Hat 发布安全公告 RHSB-2026-02 |
| **2026/05/01** | CISA 加入 KEV(Known Exploited Vulnerabilities)列表 |
| **2026/05/01** | Microsoft 发布详细分析 |
| **2026/05/04** | RHEL 9 首个修复(RHSA-2026:13565) |
| **2026/05/04** | Qualys 确认野外利用 |
| **2026/05/06** | NVD 为所有 kernel 范围更新 CPE 配置 |
| **2026/05/15** | **截止日期** CISA KEV 要求美国联邦机构必须修复 |
## 与其他著名 Linux kernel 漏洞的比较
| 漏洞 | 年份 | CVSS | 机制 | 利用复杂度 |
| ------------------------------ | ---- | ---- | --------------------------------------- | --------------------- |
| **Dirty COW** (CVE-2016-5195) | 2016 | 7.8 | 写时复制中的竞争条件 | 中等 |
| **Dirty Pipe** (CVE-2022-0847) | 2022 | 7.8 | 覆盖 pipe buffer 到 page cache | 低 |
| **Copy Fail** (CVE-2026-31431) | 2026 | 7.8 | In-place AEAD 写入 4 字节到 page cache | **非常低** |
Copy Fail 与 Dirty Pipe 的相似之处在于都利用 page cache 修改 setuid 文件而不触碰磁盘,但机制不同:Copy Fail 使用错误的 in-place 加密路径,而非 pipe buffer。
## 参考资料
- [NVD - CVE-2026-31431](https://nvd.nist.gov/vuln/detail/CVE-2026-31431)
- [Microsoft Security Blog - Copy Fail 分析](https://www.microsoft.com/en-us/security/blog/2026/05/01/cve-2026-31431-copy-fail-vulnerability-enables-linux-root-privilege-escalation/)
- [Red Hat 安全公告 RHSB-2026-02](https://access.redhat.com/security/vulnerabilities/RHSB-2026-02)
- [CERT-EU 安全咨询 2026-005](https://cert.europa.eu/publications/security-advisories/2026-005/)
- [Ubuntu 博客 - Copy Fail 漏洞修复](https://ubuntu.com/blog/copy-fail-vulnerability-fixes-available)
- [Kodem Security Copy Fail 分解与修复手册](https://www.kodemsecurity.com/resources/cve-2026-31431-copy-fail-linux-kernel-lpe-breakdown-and-remediation-runbook)
- [Sophos - Copy Fail PoC Exploit 已发布](https://www.sophos.com/en-us/blog/proof-of-concept-exploit-available-for-linux-copy-fail-cve-2026-31431)
- [Tenable - Copy Fail 常见问题](https://www.tenable.com/blog/copy-fail-cve-2026-31431-frequently-asked-questions-about-linux-kernel-privilege-escalation)
- [Bugcrowd - 我们所知的 Copy Fail](https://www.bugcrowd.com/blog/what-we-know-about-copy-fail-cve-2026-31431/)
- [Qualys ThreatPROTECT - 野外利用确认](https://threatprotect.qualys.com/2026/05/04/linux-kernel-vulnerability-exploited-in-the-wild-copy-fail-cve-2026-31431/)
- [LinuxFabrik - 立即修复您的 Linux Kernel](https://www.linuxfabrik.ch/en/blog/kernel-luecke-cve-2026-31431)
- [官方披露页面](https://copy.fail)
- [GitHub: theori-io/copy-fail-CVE-2026-31431](https://github.com/theori-io/copy-fail-CVE-2026-31431)
标签:AF_ALG, algif_aead, CISA KEV, Crypto API, Cutter, CVE-2026-31431, Linux Kernel, Linux内核漏洞, LPE, Privilege Escalation, Root提权, Web报告查看器, 内核漏洞利用, 协议分析, 安全渗透, 本地提权, 权限提升, 漏洞利用代码, 漏洞披露, 网络安全, 隐私保护, 高危漏洞