g0thamRabb1t/dirtyfrag-cve-2026-43284-auditd-detection
GitHub: g0thamRabb1t/dirtyfrag-cve-2026-43284-auditd-detection
针对 DirtyFrag CVE-2026-43284 Linux 本地提权漏洞的 auditd 检测验证报告,提供完整的事件链重构、证据日志和 SIEM 关联检测逻辑。
Stars: 0 | Forks: 0
# DirtyFrag CVE-2026-43284 PoC 验证与 auditd 检测
**范围:** 针对与 **CVE-2026-43284** 相关的 XFRM/ESP 路径进行的 Linux 本地提权 (LPE) 验证。
本仓库包含一份英文报告及证据工件,这些证据来源于对公开的 DirtyFrag PoC 进行的受控实验室验证。本文档的重点不在于提供漏洞利用指南,而是记录在 Linux audit 日志中可见的事件,以及如何将这些事件转化为实用的 SOC 检测逻辑。
完整的 PDF 报告:
EN: [`reports/DirtyFrag_CVE-2026-43284_EN.pdf`](reports/DirtyFrag_CVE-2026-43284_EN.pdf)
PL: [`reports/DirtyFrag_CVE-2026-43284_PL.pdf`](reports/DirtyFrag_CVE-2026-43284_PL.pdf)
## 目的与范围
执行此测试是为了验证普通本地用户是否能在存在漏洞的实验 VM 中获取 root shell,并确定 auditd 可以捕获哪些事件。
CVE-2026-43284 涉及在 ESP/IPsec 操作期间对共享页面片段的不当处理。在特定条件下,本地攻击者可以影响页缓存中的数据并提升权限。Ubuntu Security 将此漏洞评级为 **CVSS 3.1: 7.8 High**。
| 漏洞 | 范围 | 组件 | CVSS |
|---|---|---|---|
| CVE-2026-43284 | XFRM/ESP 页缓存写入 | XFRM / ESP, esp4/esp6 | 7.8 High |
技术参考:
- 公开的 DirtyFrag PoC 仓库:
- Ubuntu Security - CVE-2026-43284:
- Ubuntu 博客 - Dirty Frag Linux 漏洞修复已发布:
## 测试环境
| 参数 | 值 |
|---|---|
| 发行版 | Ubuntu 24.04.4 LTS / noble |
| 测试内核 | 6.17.0-23-generic |
| 架构 | x86_64 |
| 虚拟化 | Oracle VirtualBox |
| CPU | 12th Gen Intel(R) Core(TM) i5-12450H, 1 vCPU |
| 内存 | 12 GiB |
| Root 文件系统 | ext4 |
| 测试用户 | uid=1000(user), gid=1000(user), groups include sudo, adm, lpadmin |
| unprivileged_userns_clone | 1 |
| auditd | 活跃,已加载 DirtyFrag/LPE audit 规则 |
| AppArmor | 活跃;日志中可见 unprivileged_userns profile |
完整系统基线:[`evidence/logs/system-info-table.md`](evidence/logs/system-info-table.md)
## 结果
在 PoC 执行前,测试上下文为普通用户账户。运行 `./exp` 后,获取了 root shell 并通过 `whoami` 和 `id` 进行了确认。

## 证据收集
测试完成后,auditd 日志和摘要输出被导出到本地证据目录,并复制到了该仓库中。






## 仓库结构
| 路径 | 描述 |
|---|---|
| `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 key 分组的事件计数摘要。 |
| `evidence/logs/audit-exec-summary.txt` | 来自 aureport 的可执行文件摘要。 |
| `evidence/logs/audit-rules-loaded.txt` | 处于活跃状态的 auditd 检测规则。 |
| `evidence/logs/system-info-table.md` | 系统基线表。 |
| `evidence/screenshots/01-dirtyfrag-root-shell.png` | 确认 user -> root shell 转换的截图。 |
| `tools/generate-system-info-table.sh` | 用于生成系统信息表的辅助脚本。 |
## auditd 检测逻辑
最有效的检测并非单一事件。最强的信号是在短时间窗口内观察到的完整链条:
```
user namespace -> vmsplice/splice -> ESP/XFRM -> su -> root shell with AUID of a normal user
```
### 相关 auditd key
| Key | 含义 |
|---|---|
| `dirty_frag_unshare` | 由非特权用户执行的 `unshare`;指示正在进行 user namespace 准备。 |
| `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` 所拥有的会话中 `euid=0` 的 `execve`;当存在关联时,是 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` | 通过 syscall 遥测可见的页缓存行为。 |
| 21:11:32-21:11:39 | `MAC_IPSEC_EVENT` / XFRM ESP | `audit.log` | 在 `127.0.0.1` 上带有 `SPI 0xdeadbeXX` 的 `SAD-add` 和 `SA-icv-failure` 事件。 |
| 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` | 当 `AUID=user` 时,`UID=root` 且 `EUID=root`。 |
| 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)`。 |
## SIEM 关联示例
```
IF
dirty_frag_unshare by auid>=1000
AND count(dirty_frag_vmsplice + dirty_frag_splice by same exe or pid) >= 3 within 600s
AND MAC_IPSEC_EVENT / XFRM activity within 1200s
AND (dirty_frag_su_exec OR execve with euid=0 and auid>=1000) within 1200s
THEN
alert = "Possible DirtyFrag CVE-2026-43284 Linux LPE"
severity = high/critical
```
## SOC 建议
- 为内核打补丁,并在更新后强制重启进入已打补丁的内核。
- 使用 auditd、Falco、基于 eBPF 的工具或 EDR 收集 syscall 遥测数据。
- 不要仅凭单一的 `euid=0` 事件发出警报;这也会捕获合法的 `sudo` 使用情况。
- 将 `unshare`、`vmsplice`、`splice`、XFRM/ESP 活动、`su` 以及来自普通用户会话的 root 进程创建关联起来。
- 考虑在应用程序兼容性允许的情况下,限制 `kernel.unprivileged_userns_clone`。
- 审查特定主机类型是否需要 ESP/IPsec 模块,并在适当情况下限制不必要的模块加载。
- 将日志转发到远程收集器或 SIEM;发生 LPE 后,攻击者可能会修改本地日志。
- 监控 auditd 质量:在测试和生产监控期间,`lost` 应保持为 `0`。
- 维护一份 Linux LPE 分类处置手册,涵盖主机隔离、audit 日志收集、正在运行的内核验证以及已加载模块捕获。
## 备注
收集到的 auditd 状态显示 `lost=2555`,这意味着可能丢弃了一些 audit 事件。关键链条仍然可见,但在未来的测试中,应增加 audit backlog 并在运行 PoC 之前确认 `lost=0`。
该报告特意专注于 **CVE-2026-43284 / XFRM/ESP**,以避免将 SOC 检测范围与其他与 DirtyFrag 相关的路径混淆。
标签:AMSI绕过, auditd, Docker镜像, Maven, SOC检测, Web报告查看器, 威胁检测, 应用安全, 本地提权, 漏洞验证