CVE-2026-43284 (XFRM/ESP) 与 CVE-2026-43500 (RxRPC/RXKAD) 的可读 N4C 演示程序。
该 PoC 回答一个问题:非特权进程能否通过共享的 sk_buff 片段更改 root 拥有的只读文件的页缓存?
它不会覆盖 /usr/bin/su 或 /etc/passwd、安装载荷、调用 PAM/NSS 或启动 shell。完整的公开漏洞利用仍保留在 exploit 分支上。
dirtyfrag-poc.c — 两个页缓存原语和一个小型 CLI。prepare-lab.sh — 创建两个无害的 root 拥有的测试文件。run_as_1000.c / run-as-1000 — 将虚拟机的 root shell 降级为 uid/gid 1000。Makefile — 可复现的静态构建。--esp)只读测试文件
-> splice(文件 -> 管道 -> UDP 套接字)
-> skb 分页片段
-> ESP authencesn 就地 STORE
-> 前四个缓存字节变为 "N4C!"
仅使用一个 XFRM SA 和一次四字节写入。公开漏洞利用中的 root shell ELF 及其 48 触发汇编循环已被移除。
--rxrpc)只读测试文件
-> splice(文件 -> 伪造的 RxRPC DATA 数据包)
-> RXKAD pcbc(fcrypt) 就地解密
-> 一次密钥选择的 8 字节写入
-> 缓存字节与原始测试文件不同
该 PoC 不会搜索密码形状的明文,因为任何更改的八字节块已经证明了该原语。离线 fcrypt 暴力破解、重叠写入规划器、PAM、getent、无密码 su、PTY 处理和 shell 代码均已被移除。
仅在包含所需内核功能的可丢弃、已授权的 Linux 虚拟机中使用。
make
# 以虚拟机的 root 用户身份运行一次,以重建已知的测试文件字节。
./prepare-lab.sh
# 然后辅助程序以 uid/gid 1000 运行 PoC。
./run-as-1000 ./dirtyfrag-poc --esp --verbose
./prepare-lab.sh
./run-as-1000 ./dirtyfrag-poc --rxrpc --verbose
退出状态:
0 — 标记出现在页缓存中;原语已观察到。1 — 标记未出现;共享片段写入被拒绝。2 — 测试文件无效、环境不受支持或设置失败。3 — RxRPC 触发在验证前失败。在两次运行之间重新创建测试文件,或重启可丢弃的虚拟机。
main() 选择一个原语并拒绝以 uid 0 运行。esp_poc() 展示四字节 XFRM/ESP 案例。rxrpc_poc() 展示一次触发和直接的修改前后对比。协议构造源自 Linux 内核源码和公开的 V4bel/dirtyfrag 参考实现,提交哈希为 aab16fcada27142dd8ce8704906cf6736cf213b8。N4C 将执行流程重写为这个仅含测试文件的演示程序,并移除了提权载荷和消费阶段。