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报告查看器, 内核漏洞利用, 协议分析, 安全渗透, 本地提权, 权限提升, 漏洞利用代码, 漏洞披露, 网络安全, 隐私保护, 高危漏洞