Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
Dirty-Frag-CVE-2026-43284 — 针对 DirtyFrag (CVE-2026-43284) 的实验室检测练习 - 通过 xfrm-ESP 页面缓存破坏实现 Linux 内核权限提升。完整文档涵盖漏洞利用执行、检测盲区以及使用 Elastic Stack 修正后的 EQL 规则。 | Kitploit
工具/GitHubGitHub/atlasvector/dirty-frag-cve-2026-43284
权限提升漏洞分析取证分析学习与教育事件响应二进制利用实验室与实践
GitHubatlasvector/dirty-frag-cve-2026-43284

Dirty-Frag-CVE-2026-43284

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

针对 DirtyFrag (CVE-2026-43284) 的实验室检测练习 - 通过 xfrm-ESP 页面缓存破坏实现 Linux 内核权限提升。完整文档涵盖漏洞利用执行、检测盲区以及使用 Elastic Stack 修正后的 EQL 规则。

查看仓库
23个月前尚未审核

DirtyFrag (CVE-2026-43284) - 实验室检测练习报告

分类: 内部实验室 - CyberLAB
日期: 2026年5月24日
平台: Elastic Stack v9.4.1
状态: 检测已确认


目录

  • A - 执行摘要
  • B - 完整发现报告
    • 1. 目标与威胁模型
    • 2. 漏洞背景
    • 3. 实验室环境
    • 4. 第一阶段 - 执行前设置
    • 5. 第二阶段 - 漏洞利用执行
    • 6. 第三阶段 - 利用后活动
    • 7. 第四阶段 - 检测工程
    • 8. 检测参考
    • 9. 主要发现总结
    • 10. 参考

A - 执行摘要

测试内容

一个受控的利用练习,模拟一个使用 DirtyFrag (CVE-2026-43284)(一个Linux内核权限提升漏洞)的后初始访问攻击者。模拟的攻击者场景:通过钓鱼凭证获得的低权限用户(saskia,uid=1001)试图在内部Linux主机上提权至root。实验室使用了一台故意配置了漏洞的Ubuntu机器(ubuntu-vuln,内核6.0.0-22-generic),与生产网络隔离。

结果:利用成功 - 检测已确认

攻击者在实验室环境中获得了完全的root访问权限(uid=0)。Elastic Security检测栈生成了 3条高严重性告警(风险评分73),正确识别了利用链。然而,检测需要手动调整——默认配置存在漏洞,否则会导致告警遗漏。

底线: 运行内核 <= 6.x 的未打补丁的Linux主机存在漏洞。如果攻击者已经拥有低权限立足点,该漏洞利用会悄悄且快速地授予他们完全的root权限,且不会在磁盘上留下文件完整性工具可检测到的痕迹。

风险陈述

主要发现

  1. 默认的auditd规则不会产生任何证据。 如果没有为socket、splice和unshare设置明确的系统调用规则,漏洞利用会静默运行——没有日志,没有告警。默认的Elastic Agent部署不会自动添加这些规则。
  2. 检测需要规则调整。 已发布的Elastic Security Labs检测逻辑使用process.parent.pid作为关联键。在实践中,DirtyFrag会fork中间进程,破坏该关联。修复方法——通过auditd.session进行关联——在本练习中被识别并实施。
  3. 利用后的操作非常广泛。 获得root权限后,攻击者读取了/etc/shadow,访问了SSH授权密钥,写入了持久化标记(/root/pwned.txt),并通过nc发起了网络侦察。所有这些都发生在初始访问后的30分钟内。

建议


B - 完整发现报告

1. 目标与威胁模型

目标: 验证家庭实验室SOC中针对DirtyFrag利用的检测覆盖率,识别检测差距,并根据观察到的攻击者行为生成修正后的检测规则。

威胁模型: 模拟一个使用钓鱼凭证获得低权限用户账户(saskia,uid=1001)的后初始访问攻击者。目标:通过DirtyFrag利用xfrm-ESP接收路径实现权限提升至root。实验室执行通过Proxmox控制台进行——功能上等同于SSH后访问。

考虑了两个攻击者能力层级:

  • 普通(吵闹): 没有进行任何规避的漏洞利用
  • 规避(安静): 降低噪音,刻意清理

本次练习涵盖了普通层级。


2. 漏洞背景

DirtyFrag是系列相关Linux内核漏洞中的第三个,它们都利用相同的根本原因:

根本原因: IPv4/IPv6数据报追加路径在skb_splice_from_iter()将页缓存页植入套接字缓冲区(sk_buff)后,未设置SKBFL_SHARED_FRAG。然后ESP输入路径对攻击者控制的页缓存页执行了就地加密,将其视为普通的未克隆的非线性skb。

利用原语: 向页缓存写入4或8字节的控制数据。确定性——不需要竞争条件。

利用链:

  1. 攻击者将目标二进制文件(例如/usr/bin/su)读入页缓存
  2. 通过splice()构造一个数据包,使文件的页面位于struct sk_buff的frag[0]中
  3. 内核将数据包传递给xfrm-ESP解密路径
  4. ESP执行就地加密——源和目标都指向攻击者的页面
  5. 加密将攻击者控制的字节写入页缓存
  6. 随后对该文件的所有读取——包括内核的execve()——都会返回被篡改的字节

关键的规避特性: 磁盘上的文件从未被修改。文件完整性监控工具(AIDE、Tripwire、哈希检查)都报告目标文件是干净的。

已确认受影响的发行版: Ubuntu 24.04.4、RHEL 10.1、AlmaLinux 10、openSUSE Tumbleweed、CentOS Stream 10、Fedora 44。


3. 实验室环境

练习时的活跃遥测:


4. 第一阶段 - 执行前设置

4.1 实验室隔离

实验室网络在练习前已隔离。防火墙别名Cyber_escape_door确认已禁用——防止横向移动到其他VLAN或互联网。

实验室隔离确认

4.2 受害主机验证

在ubuntu-vuln上确认了有漏洞的内核和低权限账户:``` saskia@ubuntu-vuln:$ uname -r 6.0.0-22-generic saskia@ubuntu-vuln:$ whoami saskia saskia@ubuntu-vuln:~$ id uid=1001(saskia) gid=1001(saskia) groups=1001(saskia),27(sudo),100(users)

root@kitploit:~
![内核与用户验证](https://assets.kitploit.com/production/public/readmes/15419/bd607abf9c63cc6bf7cfd3432bd406c5fcd51b6e29e4585543f80af99218fd92.png)

#### 4.3 栈健康检查

**Suricata:正在运行并捕获流量(systemctl status)**
![Suricata 服务激活并已启用](https://assets.kitploit.com/production/public/readmes/15419/3bd0f2a2eb3695861aa36f58545b85567d3a8bdeb4e847060e9dbb63391abf9b.png)

**Kibana/Elasticsearch:绿色/健康(API 检查)**
![通过 curl 返回 302 进行的 ELK 健康检查](https://assets.kitploit.com/production/public/readmes/15419/fcd860faf9fbe62adeb94e889ced2a8c4b649f7240b9f7a9eb572a132c56402d.png)

**在变更前拍摄的虚拟机快照**

![ELK 虚拟机快照 - elk-VM-snapshot](https://assets.kitploit.com/production/public/readmes/15419/6d7c0af2ac6a6b526e21696f83ecea29e3b5d2a433b00eeaa104746ac87b155c.png)

![Suricata 虚拟机快照 - suricata_pre_dirty_frag(2026 年 5 月 24 日 11:15:53)](https://assets.kitploit.com/production/public/readmes/15419/679983fc0d92d9b73c3e33439c4a167732eec5685e852ccfe91738e29930f5fa.png)

![Ubuntu-Vuln-Host 快照](https://assets.kitploit.com/production/public/readmes/15419/0c66bce642d8508ac2dddfe5930a84ba3f936fc8507fb96717ced5bc2bd77f8d.png)

#### 4.4 网络捕获
在 Suricata 主机上启动 tcpdump(`emp6s19`,抓包长度 262144 字节),用于完整捕获 `172.66.66.27` 的流量。
![suricata 流量事件副本](https://assets.kitploit.com/production/public/readmes/15419/12c4e8bd2f5749a5ff3afda1613fecf69d635fbb87003808d83cc89815430e3c.png)


![在 Suricata 传感器上启动的 tcpdump](https://assets.kitploit.com/production/public/readmes/15419/09e4a4ab1a4f692ee24f168c2094bf159590b9c6bb4ea8a977f0c004687ae341.png)

---

### 5. 第二阶段 - 漏洞利用执行

#### 5.1 暂存

来自 V4bel/dirtyfrag PoC 的漏洞利用源码(`exp.c`)已暂存到受害者主机上。```bash
ubuntu-vuln@ubuntu-vuln:~/dirtyfrag$ ls
exp  exp.c  README.md
ubuntu-vuln@ubuntu-vuln:~/dirtyfrag$ cp exp.c /tmp/exp/

右侧终端显示了用户 saskia 可见的暂存副本。

Exploit source staged in /tmp/exp/

5.2 编译

通过 sudo gcc 以 root 身份编译(用户 saskia 在 sudoers 中):``` saskia@ubuntu-vuln:$ sudo gcc -o /tmp/exp/clean_frag /tmp/exp/exp.c saskia@ubuntu-vuln:$ ls -la /tmp/exp/ -rwxr-xr-x 1 root root 62320 May 24 12:18 clean_frag -rw-rw-r-- 1 ubuntu-vuln ubuntu-vuln 67803 May 24 12:13 exp.c saskia@ubuntu-vuln:~$ id uid=1001(saskia) gid=1001(saskia) groups=1001(saskia),27(sudo),100(users)

root@kitploit:~
二进制:ELF 64位LSB可执行文件,x86-64,动态链接。

![Exploit compiled - clean_frag binary ready](https://assets.kitploit.com/production/public/readmes/15419/0449b71e0aa5ab6acc1483dc1109e40a59108fe2fb1c438413daa05e3e8c4f3c.png)

#### 5.3 执行 - 获取Root权限

漏洞以 `saskia`(uid=1001)身份执行。进程(`clean_frag`,pid=4326)打开了 `AF_RXRPC` 和 `AF_ALG` 套接字,然后调用 `splice()` 将页面缓存页植入网络缓冲区。ESP路径上的原位加密将攻击者控制的字节写入页面缓存。子进程(pid=4327)调用 `unshare`,参数 `a0=50000000`(`CLONE_NEWUSER | CLONE_NEWNET`),以获取命名空间级能力。```
saskia@ubuntu-vuln:~$ /tmp/exp/clean_frag
...
root@ubuntu-vuln:~# id
uid=0(root) gid=0(root) groups=0(root)
root@ubuntu-vuln:~# ls

在 12:22 CEST (10:22 UTC), 2026年5月24日 获得完整的root shell。

捕获的Auditd系统调用序列(UTC):

所有事件共享 auditd.session=2。

获得的漏洞利用后root shell


6. 阶段3 - 后渗透活动

所有操作均以 root 身份在 ubuntu-vuln 上执行,从 ~12:22 CEST 开始。

6.1 持久化标记```bash

root@ubuntu-vuln:# echo "Dirty Frag PoC executed at $(date)" > /root/pwned.txt root@ubuntu-vuln:# cat /root/pwned.txt Dirty Frag PoC executed at Sun May 24 12:28:05 PM CEST 2026

root@kitploit:~
![已写入 /root/pwned.txt 的持久化标记](https://assets.kitploit.com/production/public/readmes/15419/a4c9f7d5eaf9f165aa382692c89c6e98c50884858bae6929aec9251bb09ba06e.png)

#### 6.2 凭据访问```bash
root@ubuntu-vuln:~# cat /etc/shadow | head -2
root:*:19823:0:99999:7:::
daemon:*:19823:0:99999:7:::
root@ubuntu-vuln:~# cat /home/ubuntu-vuln/.ssh/authorized_keys
ssh-ed25519 AAAA[...]

shadow文件和SSH授权密钥被访问。在实际入侵中,这将导致离线密码破解和持久的SSH后门访问。

Credential access - shadow and SSH keys read as root

6.3 网络侦察```bash

root@ubuntu-vuln:~# nc -vz 172.66.66.1 100-8000

root@kitploit:~
对实验网关(`172.66.66.1`,端口100-8000)的端口扫描,于12:51 CEST从root上下文执行。这展示了横向移动能力以及从提权会话进行的网络映射。

![从root进行的网络扫描 - 针对网关的nc扫描](https://assets.kitploit.com/production/public/readmes/15419/350b4904ab94e991640582b63d0bc61c679c754fdce22b856bb92ab177a02ef5.png)

#### 6.4 Suricata网络可见性

Suricata在整个练习窗口中捕获了与`172.66.66.27`相关的**105个事件**(88个mdns,17个flow)。在截图拍摄时(约为12:53 CEST的nc扫描期间),仪表板中可见29个事件。

DirtyFrag漏洞本身是内核内部的,不产生网络签名——该提权原语不会在线路上产生异常流量。启用Suricata是为了收集利用后流量和枚举尝试的pcap,而不是为了检测漏洞本身。

| 事件类型 | 计数 |
| ---------- | ----- |
| mdns | 88 |
| flow | 17 |
| **总计** | **105** |

flow事件集中在nc端口扫描窗口期间(10:50-11:10 UTC / 12:50-13:10 CEST)。

![针对172.66.66.27的Suricata事件](https://assets.kitploit.com/production/public/readmes/15419/de8249b1c4230a57841799e7806ca97796db4de2321a57c0891f043d842c54b0.png)

---

### 7. 阶段4 - 检测工程

#### 7.1 已部署的检测规则

基于Elastic Security Labs的文章,在Kibana检测引擎中创建了两条EQL序列规则。

**规则1 - AF_RXRPC或AF_ALG套接字使用splice后跟执行**(未触发——见下文差距)```eql
sequence with maxspan=60s
  [any where host.os.type == "linux" and
   (
    (event.category == "process" and auditd.data.syscall == "socket"
     and auditd.data.a0 in ("26", "21")) or
    (event.category == "process" and auditd.data.syscall == "splice") or
    (event.category == "network" and event.action == "bound-socket"
     and data_stream.dataset == "auditd_manager.auditd"
     and auditd.data.socket.family == "38")
   )
   and user.id != "0"] by process.pid, host.id, user.id with runs=10
  [process where host.os.type == "linux" and event.action == "executed" and
   (
     (user.effective.id == "0" and user.id != "0") or
     (process.name in ("bash", "sh", "zsh", "dash", "fish", "ksh", "busybox")
      and process.args in ("-c", "--command", "-ic", "-ci", "-cl", "-lc",
                            "-bash", "-sh", "-zsh", "-dash", "-fish", "-ksh"))
    )] by process.parent.pid, host.id, user.id

规则 2 - 命名空间操纵后权限提升 (在修复后触发)```eql sequence by host.id, auditd.session with maxspan=30s [process where host.os.type == "linux" and auditd.data.syscall == "unshare" and auditd.data.a0 in ("10000000", "50000000", "70000000", "10020000", "50020000", "70020000") and user.id != "0" and user.id != null] [process where host.os.type == "linux" and user.id == "0" and user.id != null and (process.name in ("bash", "sh", "zsh", "dash", "fish", "ksh", "su", "sudo", "pkexec", "busybox", "mksh") or process.name like ("python*", "perl*", "ruby*", "php*", "lua*"))]

root@kitploit:~
#### 7.2 初始检测缺口 - 缺失的系统调用覆盖

规则1返回零结果。`ubuntu-vuln`上的默认auditd配置仅捕获了:`write`、`bpf`、`openat`、`unshare`。

缺失:`socket`、`splice`、`bind`——核心利用原语。

**补救措施:** 已添加到 `/etc/audit/rules.d/dirtyfrag.rules`:```
-a always,exit -F arch=b64 -S socket -k socket_syscall
-a always,exit -F arch=b32 -S socketcall -k socket_syscall
-a always,exit -F arch=b64 -S splice -k splice-syscall
-a always,exit -F arch=b32 -S splice -k splice-syscall
-a always,exit -F arch=b64 -S unshare -k unshare-syscall
-a always,exit -F arch=b32 -S unshare -k unshare-syscall

272 个新的 auditd 事件在漏洞利用运行后的几秒内就出现在 Elasticsearch 中。

7.3 EQL 关联间隙 - 进程树碎片化

尽管事件被捕获,规则 2 仍返回 0 个匹配。

根本原因 - 实际进程树 (来自 Elasticsearch):

原始规则通过 process.parent.pid 进行关联。unshare 事件的 ppid=4326,但 root shell 具有不同的父进程——DirtyFrag 分叉了中间进程,破坏了关联。

修复: 通过 auditd.session 进行关联。漏洞利用链中的所有事件共享 session=2,正确连接了序列,无论分叉深度如何。

7.4 告警结果

3 个高严重性告警,风险评分 73,位于 Kibana Security - Alerts,时间 2026-05-24T10:25:57Z UTC(12:25:57 CEST)。

告警时间戳 (UTC)信号
序列匹配 - unshare 事件10:25:57.869process=clean_frag, user=saskia (uid=1001)
序列匹配 - root shell10:25:57.881process=bash, user=root (uid=0)
复合序列告警10:25:57.893host=ubuntu-vuln
  • 规则:DirtyFrag - Namespace Manipulation Followed by Privilege Escalation
  • 严重性:高
  • 风险评分:73
  • 主机:ubuntu-vuln

Kibana 告警详情 - 风险评分 73, 打开状态

Kibana 告警概览 - ubuntu-vuln 上 3 个高严重性告警


8. 检测参考

MITRE ATT&CK 映射

战术技术

关键系统调用值

KQL 参考查询

所有与 dirtyfrag 相关的 auditd 事件:```kql data_stream.dataset: "auditd_manager.auditd" and auditd.summary.how: dirtyfrag

root@kitploit:~
**非root用户的命名空间操作:**```kql
data_stream.dataset: "auditd_manager.auditd" and auditd.data.syscall: "unshare" and auditd.data.a0: "50000000"

同一会话中提权后的root活动:```kql data_stream.dataset: "auditd_manager.auditd" and user.id: "0" and auditd.session: "2"

root@kitploit:~
**漏洞利用窗口期间的所有auditd事件:**```kql
data_stream.dataset: "auditd_manager.auditd" and @timestamp >= "2026-05-24T10:20:00Z" and @timestamp <= "2026-05-24T10:30:00Z"

来自利用进程的套接字和拼接系统调用:```kql data_stream.dataset: "auditd_manager.auditd" and auditd.summary.how: "/tmp/exp/clean_frag"

root@kitploit:~
---

### 9. 关键发现总结

| # | 发现 | 严重性 | 修复状态 |
| - | ---- | ------ | -------- |
| 1 | 默认的 auditd 规则遗漏了 `socket`、`splice`、`unshare`——没有明确规则就没有证据 | 严重 | 是 - 已将自定义规则部署到 `/etc/audit/rules.d/dirtyfrag.rules` |
| 2 | 通过 `process.parent.pid` 进行的 EQL 关联在分叉的利用链中失败 | 高 | 是 - 已更改为 `auditd.session` |
| 3 | 文件完整性监控对 DirtyFrag 盲视——磁盘上的文件全程未改变 | 高 | 否,在范围内未修复 - 修复方法是修补内核 |
| 4 | 后渗透:影子文件、SSH 密钥和网络侦察均在警报驱动响应之前以 root 身份执行 | 高 | 通过 auditd 日志检测到;未触发针对凭据访问或侦察阶段的专用规则 |

---

### 10. 参考文献

- Elastic Security Labs: [Copy Fail and DirtyFrag: Linux Page Bugs in the Wild](https://www.elastic.co/security-labs/copy-fail-dirtyfrag-linux-page-bugs-in-the-wild)
- 公开 PoC: [V4bel/dirtyfrag on GitHub](https://github.com/V4bel/dirtyfrag)
- MITRE ATT&CK: [T1068 - Exploitation for Privilege Escalation](https://attack.mitre.org/techniques/T1068/)
- MITRE ATT&CK: [TA0004 - Privilege Escalation](https://attack.mitre.org/tactics/TA0004/)
- MITRE ATT&CK: [T1003.008 - /etc/passwd and /etc/shadow](https://attack.mitre.org/techniques/T1003/008/)
下载工具
项目详情
漏洞DirtyFrag - CVE-2026-43284 (xfrm-ESP路径), CVE-2026-43500 (RxRPC路径)
CVSS影响完全本地权限提升至root
受影响的内核Linux内核 >= 2017年1月 (9年生命期)
受影响的发行版Ubuntu 24.04.4, RHEL 10.1, AlmaLinux 10, openSUSE, CentOS Stream 10, Fedora 44
文件完整性绕过磁盘文件不变 - AIDE、Tripwire、哈希监控均报告干净
公开PoC可用 (GitHub上的V4bel/dirtyfrag)
提权时间从低权限立足点 < 10分钟
优先级操作
立即在所有主机上将Linux内核修补到已修复版本。应用Ubuntu、RHEL、AlmaLinux、openSUSE、CentOS、Fedora的供应商安全公告。
短期在所有由Elastic Agent监控的Linux主机上为socket、splice和unshare部署明确的auditd系统调用规则。
短期更新EQL检测规则,对于命名空间操作序列,使用auditd.session而非process.parent.pid进行关联。
持续将风险评分 >= 73的权限提升告警视为高优先级分类。当前规则在提权后数秒内触发。
CVE昵称引入时间路径
CVE-2022-0847Dirty Pipe-pipe
CVE-2026-31431Copy Fail-splice
CVE-2026-43284DirtyFrag2017年1月 (提交 cac2661c53f3)xfrm-ESP
CVE-2026-43500DirtyFrag2023年6月 (提交 2dc334f1a63a)RxRPC
组件详情
Fleet Server / ELK主机ubuntu-tm / elk-docker - 172.66.66.30 (实验室内部)
Elastic Stackv9.4.1 (Elasticsearch, Kibana, Logstash - Docker)
目标(受害)主机ubuntu-vuln - 172.66.66.27
受害内核6.0.0-22-generic (有漏洞)
受害用户saskia - uid=1001, groups=1001(saskia),27(sudo),100(users)
Elastic Agentv9.4.1 with auditbeat
网络IDSSuricata 8.0.5 on dedicated sensor
Kibanahttp://172.66.66.30:5601 (实验室内部)
数据集占比
suricata.eve75.2%
elastic_agent.fleet_server10.8%
elastic_agent9.1%
elastic_agent.filebeat1.9%
elastic_agent.auditbeat1.4%
auditd_manager.auditd0.5%
system.auth0.2%
system.syslog0.1%
时间戳 (UTC)系统调用参数进程 (pid)用户
10:21:11.054unsharea0=50000000clean_frag (4327)saskia (1001)
10:21:11.055socketa0=21 (AF_RXRPC)clean_frag (4326)saskia (1001)
10:21:17.403socketa0=26 (AF_ALG)clean_frag (4326)saskia (1001)
10:21:17.419splicea0=4clean_frag (4326)saskia (1001)
10:21:17.419splicea0=7clean_frag (4326)saskia (1001)
进程PIDPPIDUIDauditd.session
shell(saskia)4182-10012
clean_frag(主进程)4326418210012
clean_frag(unshare 子进程)4327432610012
bash(root)-445102
ID
权限提升利用漏洞进行权限提升T1068
权限提升逃逸至主机T1611
凭据访问操作系统凭据转储:/etc/passwd 和 /etc/shadowT1003.008
发现网络服务发现T1046
系统调用参数含义
unsharea0=50000000CLONE_NEWUSER | CLONE_NEWNET
socketa0=26AF_ALG(内核加密子系统)
socketa0=21AF_RXRPC(RxRPC 路径)
bindsocket.family=38AF_ALG 绑定
splice-注入页面到网络缓冲区