algif_aead “复制失败”:分析针对 CVE-2026-31431(CVSS 3.1 7.8 高危,
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)的安全研究:AF_ALG AEAD 接口链中的三个可组合设计
缺陷串联成一次确定性、无竞态的 4 字节页缓存写入,可写入任意可读文件的任意偏移——磁盘副本保持干净,因此磁盘上的校验和看不到任何异常。公开漏洞利用(“复制失败”,Theori/Xint)以 732 字节的 Python 将其转化为本地提权(LPE);该缺陷存在于 2017 年至 2026 年的每一个内核中。
72548b093ee3(2017)使 _aead_recvmsg 就地解密,
将请求的标签页链接到可写目标 SGL 中。splice(file → pipe → socket) 将那些标签槽位填充为
任意可读文件的页缓存页(零拷贝)。authencesn 将其 4 字节 ESN 暂存值——该值位于
sendmsg 载荷的 AAD[4..8) 中——精确写入
dst[assoclen + cryptlen],即第一个标签字节:也就是你选择的
文件偏移。它在标签验证之前触发,因此即使是
请求也会执行该写入。-EBADMSG| 声明 | 证据 |
|---|---|
| 根因源自修复提交和内核源码,而非博客 | finding-sheet |
| 公开 PoC 解码已针对系统调用序列进行端到端验证 | finding-sheet |
| 实验室 A/B 内核,差异恰好为修复提交,两者均可启动 | lab/scripts/build.sh + lab/out/ab-diffstat.txt |
漏洞内核通过 AF_ALG 执行 authencesn AEAD 解密(冒烟测试) | lab/scripts/run.sh vuln → SMOKE=ok |
无伴随修复的回退在 crypto_authenc_esn_decrypt 中崩溃(原始发现) | lab/scripts/run.sh patched → NULL 解引用,可复现 |
| 安全检测器:漏洞内核上为 VULNERABLE(写入在 EBADMSG 下仍触发,磁盘保持 CLEAN),完整修复上为 NOT-DETECTED | poc/detector.c 在实验室中 → DETECTOR-RESULT 行 |
| 实验室内 LPE 闭环:uid 1000 修补 SUID 二进制的 4 字节页缓存并读取仅 root 可读的标志;通过块级 debugfs 读取证明磁盘副本完好无损 | poc/lpe.c + lab/rootfs/tools/secretgate.c → LPE-RESULT: ROOT-FLAG-CAPTURED,DISKCLEAN=ok |
| 在固定实验室中复现公开的页缓存写入,并附归属说明 | 上述检测器输出 + lab README |
| SGL 压力测试:两种内核上 5 种形态——无崩溃、无内核挂起(诚实的阴性结果)+ 两个已记录的 AF_ALG 契约怪癖 | poc/sgl-stress.c 在实验室中 → SGL-STRESS 行 |
# 在 Docker 中构建三个内核 + 工具 + 探测磁盘(首次运行约 15 分钟)
lab/scripts/build.sh
# 启动 A/B/C 预言机(Docker 中的 QEMU,如可用则使用 KVM)
lab/scripts/run.sh vuln # DETECTOR VULNERABLE + LPE ROOT-FLAG-CAPTURED + DISKCLEAN=ok
lab/scripts/run.sh patchedfull # DETECTOR NOT-DETECTED + LPE NOT-VULNERABLE
lab/scripts/run.sh patched # authencesn NULL 解引用(伴随修复缺口)
完整的页缓存写入链遵循 Theori / Xint Code(“复制失败”,被认定的报告者)已发表的方法,
并附归属说明——参见 finding-sheet 的先前工作章节。本仓库的原创工作包括:以修复提交为锚点的机制映射、不完整修复系列发现(无伴随修复的 authencesn 回退崩溃及其稳定版发布窗口)、从不触碰非自有文件的安全页缓存与磁盘差分检测器、针对专门构建的 SUID 目标(secretgate——绝不针对任何真实世界二进制文件)的实验室内 LPE 闭环、SGL 边界探索(诚实的阴性结果加两个已记录的 AF_ALG 契约怪癖),以及全部八个修复提交的已验证分支归属。
| 文档 | 内容 |
|---|---|
| docs/finding-sheet.md | 单页数据表:版本、CVSS、根因、修复提交、攻击面 |
| docs/report-ptes.md | PTES 结构化报告(7 个阶段),附实验室证据 |
| docs/research-writeup.md | 调查叙事——方法论、死胡同、可迁移经验、先前工作对比 |
docs/ finding sheet · PTES 报告 · 研究写述
poc/ detector.c(安全预言机)· lpe.c(实验室内 LPE)· sgl-stress.c(SGL 探索)
lab/ QEMU 内核实验室:5.15.203 ± 修复(A/B)+ 伴随修复后 5.15.y(C)
lab/rootfs/ secretgate.c — 专门构建的 SUID 目标(唯一被攻击的对象)
72548b093ee3 “crypto: algif_aead - copy AAD from src to dst”(2017)a664bf3d603d “crypto: algif_aead - Revert to operating out-of-place”
(+ 8 个稳定版回移——参见 finding-sheet)教育研究工件。仅针对你拥有或明确授权测试的系统运行。该漏洞已修复——请运行 2026 年稳定分支或更高版本的最新内核。