rootsecdev/cve_2026_31431

GitHub: rootsecdev/cve_2026_31431

针对 Linux 内核 algif_aead 就地 AEAD 操作页缓存临时写入漏洞(CVE-2026-31431)的非破坏性检测器与本地提权概念验证工具。

Stars: 353 | Forks: 68

# CVE-2026-31431 ("Copy Fail") 工具包 用于 2026-04-29 披露的 Linux `algif_aead` / `authencesn` 页缓存临时写入漏洞的检测器和本地提权 (LPE) 概念验证。 漏洞披露详情: ## 授权 仅在你拥有或受明确授权进行评估的主机上使用。该本地提权 (LPE) 会修改内存中的状态(页缓存),但此技术属于真实的 权限提升——在未经授权的系统上运行它,在大多数司法管辖区 都是违法的。 ## 漏洞概述 `algif_aead` 就地执行 AEAD 操作(`req->src == req->dst`)。 当源数据通过 `splice()` 从常规文件传入时, 目标散列表包含对文件页缓存页的引用——即 内核将写入这些页面。 `authencesn(hmac(sha256), cbc(aes))` 算法随后会执行一次 4 字节的 AAD 的 `seqno_lo` 字段(sendmsg 提供的 AAD 的第 4–7 字节)的"临时"写入 到该目标位置,从而破坏了文件的页缓存副本。 由于磁盘上的文件从未被修改,因此没有磁盘上的 签名;这种破坏只能被共享该页缓存的读取者观察到。 `/etc/passwd` 和 `/usr/bin/su` 都是全局可读的,因此 无特权的本地用户可以破坏运行中内核对这两者的视图。 受影响系统:包含 commit `72548b093ee3`(就地 AEAD,2017 年) 但未包含上游 revert 的内核。披露信息确认了 Ubuntu 24.04 LTS、 Amazon Linux 2023、RHEL 14.3 和 SUSE 16 受到影响,但底层原语 早于该范围。 ## 文件 | 文件 | 用途 | | --- | --- | | `test_cve_2026_31431.py` | 非破坏性检测器。在临时目录中的哨兵文件上操作;绝不触碰系统二进制文件。 | | `exploit_cve_2026_31431.py` | 本地提权 (LPE)。在 `/etc/passwd` 的页缓存中将当前用户的 UID 翻转为 0,然后调用 `su` 获取 root shell。 | 这两个脚本均为纯 Python 3.10+ stdlib。 ## 快速开始 ``` # 检测 python3 test_cve_2026_31431.py # exit 0 = 未受影响, 2 = 受影响, 1 = 测试错误 # 漏洞利用 (交互式 — su 将提示您输入自己的密码) python3 exploit_cve_2026_31431.py --shell ``` ## 检测器用法 ``` python3 test_cve_2026_31431.py ``` 它的功能: 1. 确认 `AF_ALG` 和 `authencesn(hmac(sha256),cbc(aes))` 算法可被无特权进程访问。 2. 在临时目录中创建一个 4 KiB 的哨兵文件,并填充页缓存。 3. 通过带有 `seqno_lo` 设置为标记 `PWND` 的 `sendmsg`+`cmsg` 内联发送 8 字节的 AAD,然后使用 `os.splice()` 将哨兵文件页缓存页中的 32 字节拼接到 AF_ALG 操作套接字。 4. 调用 `recv()` 驱动解密。认证检查失败并返回 `EBADMSG`;但临时写入依然会触发。 5. 重新读取文件(来自页缓存,而非磁盘)并查找标记。 输出类别: - `Precondition not met` — `AF_ALG` 或 `authencesn` 不可用。退出码 0。 - `VULNERABLE to CVE-2026-31431` — 标记 `PWND` 成功写入被拼接的页中。退出码 2。 - `Page cache MODIFIED via in-place AEAD splice path` — 页面被写入,但标记未出现在预期位置。应当作受漏洞影响处理。退出码 2。 - `Page cache intact` — 已修补。退出码 0。 检测器绝不触碰 `/usr/bin/su`、`/etc/passwd` 或其创建的临时目录之外的任何其他文件,并且该文件在退出时会被删除。 ## LPE 用法 ``` python3 exploit_cve_2026_31431.py # patch only, print next steps python3 exploit_cve_2026_31431.py --shell # patch and exec `su ` ``` 它的功能: 1. 在 `/etc/passwd` 中查找当前运行用户的 UID 行,并找到 4 字符 UID 字段的字节偏移量。 2. 针对该偏移量发起一次 `write4` 操作,将 UID 替换为 `0000`。 3. 调用 `pwd.getpwnam(user)` 确认 libc 现在报告 UID 为 0。 4. 如果带有 `--shell` 参数,则执行 `execvp("su", ["su", user])`。输入你自己的密码。PAM 会根据(未被修改的)`/etc/shadow` 进行验证,然后 `setuid(getpwnam(user).pw_uid)` 将会被设置为 0。 ### 要求 - 运行脚本的用户具有 4 位数字的 UID(1000–9999)。1 到 3 位的 UID 需要多次写入——请相应地扩展 `write4`。 - 没有 NSS 缓存守护进程(`nscd`、`sssd`、`systemd-userdbd`)掩盖对 `/etc/passwd` 的读取。如果在修补之后 `getpwnam` 仍然返回真实的 UID,请重启或绕过缓存,或者选择其他用户。 - `/etc/passwd` 页面在修补之后到执行 `su` 期间必须保留在缓存中。在实践中,这在具有正常内存压力的任何系统上都是可靠的。 ### 恢复 磁盘上的 `/etc/passwd` 保持不变。 **空运行**(不带 `--shell` 参数运行 `exploit_cve_2026_31431.py`)在退出时会通过 `POSIX_FADV_DONTNEED` 自动驱逐损坏的页面,因此 UID 到名称的查找会立即恢复正常。 **在执行 `--shell` 之后**,页面将保持损坏状态,直到你清除它。 在它损坏期间,任何将 UID 1000 解析为名称的操作(例如 `ls`、 文件管理器、scp/sftp 所有权检查)都将失败或显示数字 ID。要清除: ``` # 无特权 - 请求对 /etc/passwd 进行 page-cache eviction: python3 -c "import os; fd=os.open('/etc/passwd', os.O_RDONLY); \ os.posix_fadvise(fd, 0, 0, os.POSIX_FADV_DONTNEED); os.close(fd)" # 从 root shell 中: echo 3 > /proc/sys/vm/drop_caches ``` 重新启动也可以清除它。 ## `write4` 工作原理 ``` sendmsg([8-byte AAD], cmsg=[ALG_SET_OP=DECRYPT, ALG_SET_IV, ALG_SET_AEAD_ASSOCLEN=8], flags=MSG_MORE) splice(target_fd, pipe_w, 32, offset_src=file_offset) splice(pipe_r, op_fd, 32) recv(op_fd) # EBADMSG; scratch write has already landed ``` 来自 AAD 位置 4–7(`seqno_lo`)的 4 个字节由 `authencesn` 写入目标散列表,而在此代码路径上, 该目标即为我们从 `target_fd` 拼接的页缓存页面。在页面内的 落地偏移量对应于我们传递给 `splice()` 的 `offset_src`。 ## 缓解措施 在修补后的内核到达你的发行版之前: ``` sudo tee /etc/modprobe.d/disable-algif-aead.conf <<<'install algif_aead /bin/false' sudo rmmod algif_aead 2>/dev/null ``` 应用后,`test_cve_2026_31431.py` 应当报告 `Precondition not met` 并以退出码 0 退出。 上游修复将就地 AEAD 操作还原为非就地操作, 从而将页缓存页面排除在可写散列表之外。 ## 参考资料 - Xint 漏洞披露详情: - CVE-2026-31431
标签:0day挖掘, algif_aead, authencesn, CVE-2026-31431, Exploit, LPE, Page Cache, POC, Python, Web报告查看器, Zero-Day, 内核安全, 内核漏洞, 协议分析, 攻击路径可视化, 数据展示, 文件包含, 无后门, 本地提权, 权限提升, 红队, 网络安全, 隐私保护, 黑客工具