abdullaabdullazade/CVE-2026-31431

GitHub: abdullaabdullazade/CVE-2026-31431

对 Linux 内核 authencesn 加密模板中 CVE-2026-31431(Copy Fail)漏洞的综合分析报告,涵盖根因分析、利用机制及修复方案。

Stars: 0 | Forks: 0

# Copy Fail (CVE-2026-31431) - 综合分析报告 ## 1. 漏洞概述 - **漏洞名称:** Copy Fail - **CVE 标识符:** CVE-2026-31431 - **发现者 / 作者:** Xint Code 研究团队(基于 Theori 研究员 Taeyang Lee 的初期基础研究)。 “Copy Fail”是 Linux 内核 `authencesn` 加密模板中的一个严重逻辑漏洞。它允许无特权的本地用户触发一次确定性的、受控的 4 字节写入,将其写入系统上任何可读文件的页缓存中。通过针对 setuid 二进制文件(例如 `/usr/bin/su`),攻击者可以编辑内存中的执行缓存,从而将权限提升至 **Root (UID 0)**。 与 “Dirty Cow” 或 “Dirty Pipe” 等早期漏洞不同,Copy Fail 是一个直接的逻辑缺陷,在触发时不需要竞争条件、重试或容易崩溃的时间窗口。它具有高度的可移植性和隐蔽性,因为它只修改内存中的页缓存,而磁盘上的文件保持完全不变,从而绕过了标准的文件完整性监控工具。 ## 2. 根本原因分析 该漏洞存在于三个不同的内核组件的交汇处: 1. **AF_ALG 与原位 AEAD:** AF_ALG 是一种套接字类型,它将内核的加密子系统暴露给用户空间。2017 年,添加了一项优化以执行*原位*(in-place)AEAD 操作,这意味着相同的分散/聚集列表(scatterlist)同时作为加密算法的输入和输出。 2. **`splice()` 系统调用:** `splice()` 系统调用在文件描述符和管道之间传输数据时不进行拷贝,而是通过引用传递*页缓存页*。当用户将一个文件(如 `/usr/bin/su`)拼接(splice)到一个 AF_ALG 套接字时,该套接字的输入分散/聚集列表会持有对该文件内核缓存页的直接引用。 3. **`authencesn` 暂存写入:** `authencesn` 算法(用于 IPsec 扩展序列号)需要重新排列字节。为此,它将 4 个字节的序列号作为“暂存空间”临时写入输出缓冲区。然而,它的写入越过了合法的输出边界。 由于 2017 年的原位优化,输出分散/聚集列表包含了由 `splice()` 传递的只读页缓存页。当 `authencesn` 越过输出边界写入时,它会直接覆盖目标文件内核缓存内存中的 4 个字节。 ## 3. 利用机制 攻击者可以按照以下步骤利用此漏洞: 1. **套接字设置:** 打开一个无特权的 `AF_ALG` 套接字并绑定到 `authencesn(hmac(sha256),cbc(aes))`。 2. **构造写入:** 发送一个经过精心构造的 `sendmsg()`,其附带已认证的关联数据(AAD)负载,包含攻击者想要写入的 4 个字节。 3. **拼接目标:** 使用 `splice()` 将目标文件(`/usr/bin/su`)通过管道传输到套接字。偏移量和长度精确定义了这 4 个字节将被写入页缓存中的*位置*。 4. **触发解密:** 调用 `recv()` 触发解密操作,执行越界暂存写入,直接写入目标文件的页缓存。 5. **执行:** 运行目标二进制文件(例如,`execve("/usr/bin/su")`)。内核执行包含注入的恶意 shellcode 的被篡改页缓存版本,从而授予 root 访问权限。 ## 4. 缓解与修复 ### 临时解决方法 如果无法立即为内核打补丁或重新启动,可以通过将所有相关的 `af_alg` 模块列入黑名单并将它们从内存中卸载来缓解此漏洞。 要阻止这些模块,请执行以下命令: ``` # 如果 modules 当前已加载,则从内存中卸载它们 sudo modprobe -r algif_hash algif_skcipher algif_aead algif_rng af_alg # 将 modules 添加到 blacklist echo -e "blacklist af_alg\nblacklist algif_hash\nblacklist algif_skcipher\nblacklist algif_aead\nblacklist algif_rng" | sudo tee /etc/modprobe.d/stop-exploit.conf # 完全阻止 af_alg module 被加载 echo "install af_alg /bin/true" | sudo tee -a /etc/modprobe.d/stop-exploit.conf # Reboot 系统以确保更改完全生效 sudo reboot ``` ### 永久修复 Linux 内核安全团队已经修补了此漏洞(提交:`a664bf3d603d`)。该补丁将 AF_ALG AEAD 操作恢复为非原位(out-of-place)模型,分离了源和目标分散/聚集列表。这防止了页缓存页暴露在可写的目标分散/聚集列表中。 **所需操作:** 将您的发行版内核更新为供应商(Ubuntu、Amazon Linux、RHEL、SUSE 等)提供的最新版本,并重新启动系统。
标签:0day挖掘, AF_ALG, Copy Fail, CSV导出, Cutter, CVE-2026-31431, Dirty Cow替代, Linux内核漏洞, Root提权, setuid, splice系统调用, Web报告查看器, 内存安全, 内存破坏, 内存页修改, 内核安全, 协议分析, 安全渗透, 无竞争条件, 本地提权, 权限提升, 漏洞分析, 绕过文件完整性监控, 网络安全, 路径探测, 逻辑漏洞, 隐私保护, 隐藏提权, 页面缓存污染