作者: byt3l0rd
针对 Linux algif_aead / authencesn 页缓存写入破坏漏洞的检测器与概念验证型本地提权(LPE)工具,该漏洞于 2026-04-29 披露。
披露文章:https://xint.io/blog/copy-fail-linux-distributions
仅可在您拥有或经明确授权评估的主机上使用。该 LPE 会修改内存状态(页缓存),但该技术是真实的权限提升手段——在未经授权的系统上运行它在大多数司法管辖区属于违法行为。
algif_aead 以就地(in-place)方式执行 AEAD 操作(req->src == req->dst)。当源数据通过 splice() 从普通文件输入时,目标 scatterlist 包含对该文件页缓存页面的引用——即内核将向其中写入数据。随后,authencesn(hmac(sha256), cbc(aes)) 算法会对 AAD 的 seqno_lo 字段(sendmsg 提供的 AAD 的第 4–7 字节)执行一次 4 字节的“临时”写入到该目标位置,从而破坏该文件的页缓存副本。
由于磁盘上的文件从未被修改,因此不存在磁盘签名;只有共享页缓存的读取者才能观察到这种破坏。/etc/passwd 和 /usr/bin/su 均为全局可读文件,因此非特权本地用户可以破坏运行中内核对其任一文件的视图。
受影响范围:携带提交 72548b093ee3(就地 AEAD,2017 年)且未应用上游回滚的内核。披露已确认 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+ 标准库实现。
# 1. 检测
python3 test_cve_2026_31431.py
# 退出码 0 = 不受影响,2 = 受影响,1 = 测试错误
# 2. 利用(交互式——su 将提示输入您自己的密码)
python3 exploit_cve_2026_31431.py --shell