Koshmare-Blossom/DirtyFrag-go
GitHub: Koshmare-Blossom/DirtyFrag-go
这是一个针对Linux内核XFRM子系统漏洞的Go语言实现利用工具,用于获取root权限。
Stars: 0 | Forks: 1
# dirtyfrag-go
[dirtyfrag](https://github.com/V4bel/dirtyfrag) 的 Go 语言移植版本(CVE-2026-43284 / CVE-2026-43500)。
## 工作原理(简要说明)
该缺陷类型存在于 Linux 内核的 XFRM 子系统中。当文件页通过 `splice()` 插入管道,再进入 ESP 加密套接字时,内核会原地解密 ESP 载荷——直接写入源文件的页缓存页。文件是只读的,但页缓存并非如此。
dirtyfrag 利用此原语串联了两个独立的漏洞:
**CVE-2026-43284 - ESP/XFRM 路径**
通过 `NETLINK_XFRM` 安装 48 个 XFRM 传输模式安全关联。每个安全关联在其 ESN 重放状态的 `seq_hi` 字段中编码 4 字节的 shellcode 载荷。通过 `vmsplice` + `splice` 链为每个安全关联触发 ESP 原地解密,将这 4 字节写入 `/usr/bin/su` 的页缓存条目。触发 48 次,写入 192 字节,无竞态条件。
**CVE-2026-43500 - RxRPC/rxkad 路径**
离线暴力破解 3 个 PCBC(fcrypt) 会话密钥,这些密钥在解密时能产生目标字节序列。为每个密钥触发一个 `AF_RXRPC` 套接字,将 `/etc/passwd` 中的 root 条目修补为 `root::0:0` (nullok)。然后 `su -` 就会接受空密码。
两条路径都在用户 + 网络命名空间(`CLONE_NEWUSER | CLONE_NEWNET`)中运行,以避免在宿主机上需要 `CAP_NET_ADMIN` 权限。
## 使用方法
```
go build -o dirtyfrag-go .
./dirtyfrag-go
# 强制指定路径
./dirtyfrag-go --force-esp
./dirtyfrag-go --force-rxrpc
# 详细输出
./dirtyfrag-go -v
```
程序会首先尝试 ESP 路径。如果之后 `/usr/bin/su` 未被修补,则回退到 RxRPC 路径(最多重试 3 次)。成功后,它会通过一个新的 PTY 提供一个 root shell。
### 清理
漏洞利用仅影响页缓存。磁盘上的二进制文件和 `/etc/passwd` 未被改动。重启即可恢复一切。要在不重启的情况下立即驱逐缓存:
```
echo 1 | tee /proc/sys/vm/drop_caches
```
## 系统要求
- Linux - 未打补丁的内核(见下文)
- 无外部工具或预构建载荷 - 纯 Go 语言实现,单一静态二进制文件
- 内核模块:`esp4`, `esp6`(ESP 路径)和/或 `rxrpc`(RxRPC 路径)
## 受影响的内核
补丁发布前的所有内核:
- CVE-2026-43284: https://lists.openwall.net/netdev/2026/05/06/112
- CVE-2026-43500: https://lists.openwall.net/netdev/2026/05/06/114
## 缓解措施
```
rmmod esp4 esp6 rxrpc
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf
```
## 与原始版本对比
| | C (原始版本) | **Go** |
|---|---|---|
| 外部依赖 | 无 | 无 |
| 单文件 | 否 | 否 |
| 静态二进制 | 是 | 是 |
| RxRPC 路径 | 是 | 是 |
| ESP 路径 | 是 | 是 |
| 命名空间隔离 | `unshare()` | 使用 `Cloneflags` 重新执行 |
Go 的运行时从一开始就是多线程的,因此不允许 `unshare(CLONE_NEWUSER)`。Go 移植版通过设置 `SysProcAttr.Cloneflags` 将自身作为子进程重新执行,这会在 Go 运行时初始化之前调用 `clone()`。
## 参考资料
- [V4bel/dirtyfrag](https://github.com/V4bel/dirtyfrag) - 原始 C 语言概念验证
- [CVE-2026-43284 - NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-43284)
- [CVE-2026-43500 - NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-43500)
## 鸣谢
- **V4bel** - 漏洞发现与原始概念验证
标签:CVE-2026-43284, CVE-2026-43500, ESP加密漏洞, EVTX分析, Go语言实现, Linux内核安全, RxRPC协议漏洞, splice操作, Web报告查看器, XFRM子系统, 内核漏洞CVE, 原地解密漏洞, 安全研究工具, 日志审计, 用户命名空间利用, 网络命名空间利用, 网络安全, 脏页碎片攻击, 隐私保护, 页面缓存攻击