针对CVE-2026-43284 (DirtyFrag) Linux LPE的实验室验证报告和检测工件。提供针对XFRM/ESP页缓存写入路径的auditd遥测、事件关联规则以及面向SOC的检测逻辑。
范围: 针对 CVE-2026-43284 的 XFRM/ESP 路径的 Linux 本地权限提升(LPE)验证。
该仓库包含一份英文报告以及从公开 DirtyFrag PoC 的受控实验室验证中提取的证据工件。重点不在于提供利用指南,而在于记录 Linux 审计日志中可见的事件,以及如何将这些事件转化为实用的 SOC 检测逻辑。
完整 PDF 报告:
EN: reports/DirtyFrag_CVE-2026-43284_EN.pdf
PL: reports/DirtyFrag_CVE-2026-43284_PL.pdf
测试旨在验证普通本地用户能否在易受攻击的实验室虚拟机中获得 root shell,并确定可通过 auditd 捕获哪些事件。
CVE-2026-43284 涉及 ESP/IPsec 操作期间对共享页面片段的错误处理。在特定条件下,本地攻击者可影响页面缓存中的数据并提升权限。Ubuntu Security 将此漏洞评级为 CVSS 3.1:7.8 高危。
| 漏洞 | 范围 | 组件 | CVSS |
|---|---|---|---|
| CVE-2026-43284 | XFRM/ESP 页面缓存写入 | XFRM / ESP, esp4/esp6 | 7.8 高危 |
技术参考:
完整系统基线:evidence/logs/system-info-table.md
执行 PoC 前,测试上下文为普通用户账户。运行 ./exp 后,获得 root shell,并通过 whoami 和 id 确认。

测试后,将 auditd 日志和摘要输出导出到本地证据目录,并复制到该仓库中。






最有用的检测并非单个事件。最强的信号是在短时间窗口内观察到的完整链:
用户命名空间 -> vmsplice/splice -> ESP/XFRM -> su -> 以普通用户 AUID 运行的 root shell
IF
由 auid>=1000 触发的 dirty_frag_unshare
AND 在 600 秒内,同一 exe 或 pid 的 dirty_frag_vmsplice + dirty_frag_splice 计数 >= 3
AND 在 1200 秒内的 MAC_IPSEC_EVENT / XFRM 活动
AND 在 1200 秒内的 (dirty_frag_su_exec 或 euid=0 且 auid>=1000 的 execve)
THEN
告警 = "可能的 DirtyFrag CVE-2026-43284 Linux LPE"
严重性 = 高/严重
euid=0 事件发出告警;这也可能捕获合法的 sudo 使用。unshare、vmsplice、splice、XFRM/ESP 活动、su 以及从普通用户会话创建的 root 进程。kernel.unprivileged_userns_clone。lost 应保持为 0。收集的 auditd 状态显示 lost=2555,这意味着某些审计事件可能已被丢弃。关键链仍然可见,但未来的测试应先增加审计积压队列并确认 lost=0 后再运行 PoC。
报告特意聚焦于 CVE-2026-43284 / XFRM/ESP,以避免将 SOC 检测范围与其他 DirtyFrag 相关路径混淆。
| 参数 | 值 |
|---|
| 发行版 | Ubuntu 24.04.4 LTS / noble |
| 测试内核 | 6.17.0-23-generic |
| 架构 | x86_64 |
| 虚拟化 | Oracle VirtualBox |
| CPU | 12代 Intel(R) Core(TM) i5-12450H, 1 vCPU |
| 内存 | 12 GiB |
| 根文件系统 | ext4 |
| 测试用户 | uid=1000(user), gid=1000(user), 组包含 sudo, adm, lpadmin |
| unprivileged_userns_clone | 1 |
| auditd | 已启用,已加载 DirtyFrag/LPE 审计规则 |
| AppArmor | 已启用;日志中可见 unprivileged_userns 配置文件 |
| 路径 | 描述 |
|---|
docs/DirtyFrag_CVE-2026-43284_auditd_detection_report.docx | 英文 DOCX 报告。 |
evidence/logs/audit.log | 包含原始事件的完整 auditd 日志。 |
evidence/logs/dirtyfrag-filtered.log | 包含 DirtyFrag/LPE 相关事件的过滤日志。 |
evidence/logs/dirty_frag_vmsplice.log | PoC 进程的 vmsplice 事件。 |
evidence/logs/dirty_frag_splice.log | PoC 进程的 splice 事件。 |
evidence/logs/dirty_frag_execve_su.log | PoC 活动后执行的 /usr/bin/su。 |
evidence/logs/lpe_root_exec_from_user_session.log | 从原始用户会话中以 root 身份执行的进程。 |
evidence/logs/audit-key-summary.txt | 按 auditd 键统计的事件计数摘要。 |
evidence/logs/audit-exec-summary.txt | 来自 aureport 的可执行文件摘要。 |
evidence/logs/audit-rules-loaded.txt | 已加载的审计检测规则。 |
evidence/logs/system-info-table.md | 系统基线表。 |
evidence/screenshots/01-dirtyfrag-root-shell.png | 确认用户 → root shell 转换的截图。 |
tools/generate-system-info-table.sh | 用于生成系统信息表的辅助脚本。 |
| 键 | 含义 |
|---|
dirty_frag_unshare | 非特权用户执行的 unshare;表明用户命名空间准备。 |
dirty_frag_vmsplice | 用户进程的 vmsplice 活动;主要的页面缓存信号。 |
dirty_frag_splice | 用户进程的 splice 活动;与 vmsplice 相关。 |
dirty_frag_su_exec / dirty_frag_execve_su | 页面缓存阶段后执行 /usr/bin/su。 |
lpe_root_exec_from_user_session | 在 auid>=1000 拥有的会话中执行 execve 且 euid=0;关联时具有强 LPE 证据。 |
| 时间 | 事件 | 工件 | 含义 |
|---|
| 21:10:48 | 加载 auditd 规则 | audit-rules-loaded.txt, audit.log | 在 PoC 执行前监控已激活。 |
| 21:11:32 | ./exp 执行 unshare | dirtyfrag-filtered.log | 用户进程进入 unprivileged_userns。 |
| 21:11:32-21:11:39 | ./exp 执行 vmsplice / splice | dirty_frag_vmsplice.log, dirty_frag_splice.log | 通过系统调用遥测可见页面缓存行为。 |
| 21:11:32-21:11:39 | MAC_IPSEC_EVENT / XFRM ESP | audit.log | 在 127.0.0.1 上发生 SAD-add 和 SA-icv-failure 事件,SPI 0xdeadbeXX。 |
| 21:11:39 | su - | dirty_frag_execve_su.log | PoC 执行后尝试进入 root shell。 |
| 21:11:39 | 以 root 身份运行 sh / dash | lpe_root_exec_from_user_session.log | UID=root 且 EUID=root,而 AUID=user。 |
| 21:11:48 | 以 root 身份运行 whoami | lpe_root_exec_from_user_session.log, 截图 | 手动确认提权成功。 |
| 21:11:49 | 以 root 身份运行 id | lpe_root_exec_from_user_session.log, 截图 | 手动确认 uid=0(root)。 |