fieldse/fragcheck
GitHub: fieldse/fragcheck
一款用 Go 编写的 Linux 本地内核漏洞扫描器,专门检测 2025-2026 年间多个高危内核提权漏洞的暴露情况并提供修复指导。
Stars: 1 | Forks: 0
# fragcheck
一款命令行工具,用于检查 Linux 主机是否受到一系列近期严重的内核提权漏洞的影响,并为每个漏洞提供修复指导。
| 别名 | CVE | 摘要 |
| --- | --- | --- |
| Dirty Pipe | CVE-2022-0847 | Pipe-buffer 缺陷允许非特权用户覆盖只读文件并获取 root 权限 |
| Copy Fail | CVE-2026-31431 | Crypto (AF_ALG) 逻辑错误提供精确的 page-cache 写入,从而获取 root 权限 |
| Dirty Frag (ESP) | CVE-2026-43284 | IPsec/ESP 数据包解密写入 page cache,从而导致 root 权限 — 正被积极利用 |
| Dirty Frag (RxRPC) | CVE-2026-43500 | RxRPC/AFS 路径中的相同缺陷,可通过普通 syscall 访问 |
| Fragnesia | CVE-2026-46300 | 通过 ESP-in-TCP 对 Dirty Frag 的后续利用,再次写入 page cache |
| DirtyClone | CVE-2026-43503 | Kernel 数据包克隆 helper 丢弃了 shared-frag 标记,导致 IPsec/ESP 解密写入 page cache,从而获取 root 权限 |
| pedit COW | CVE-2026-46331 | traffic-control pedit 动作中的越界写入破坏了 page cache,导致 root 权限 |
针对每个漏洞,它会权衡两件事:当前运行的 kernel 是否属于受影响版本,以及漏洞利用所需的条件是否实际存在。它从系统的包管理器读取 kernel 版本,并考虑发行版的 backport 情况,因此 Ubuntu、Debian 和 RHEL 上已修复的版本不会被错误标记。
## 状态值
- **vulnerable** — 受影响的 kernel,且漏洞利用条件已存在
- **likely vulnerable** — 受影响版本,但无法确认其条件
- **mitigated** — 受影响,但主机上的某些因素阻止了漏洞利用路径
- **not affected** — kernel 不在受影响范围内,包含已进行 backport 修复的版本
- **unknown** — 无法读取所需信息
如果主机运行的是旧版 kernel,即使已安装补丁版本但尚未重启进入该版本,仍会被报告为 vulnerable。
## 安全性
它在本地运行,无需网络,并以单一二进制文件形式提供。建议使用 root 权限以获取最全面的信号,但这并非必需——任何它无法读取的内容都会被报告为 `unknown`,而不是进行猜测。它仅检测暴露情况——绝不会运行或包含漏洞利用代码。
## 输出
默认情况下,结果以表格形式打印:每个 CVE 占一行,显示状态、严重性评级、背后的证据以及建议的修复措施。传入 `--json` 可获取相同结果的机器可读格式,适合通过管道传递给其他工具。
## 环境要求
- Go 1.26+
- 受审计的目标主机必须是 Linux。你可以在 macOS 或任何其他平台上进行构建和交叉编译。
## 构建
```
git clone https://github.com/fieldse/fragcheck
cd fragcheck
make build # produces bin/fragcheck
```
或者直接将其安装到你的 Go bin 中:
```
go install github.com/fieldse/fragcheck/cmd/fragcheck@latest
```
## 用法
在本地 Linux 主机上运行审计程序:
```
# 表格输出(默认)
sudo ./bin/fragcheck
# Machine-readable JSON
sudo ./bin/fragcheck --json
```
建议使用 root 权限(`sudo`)以获取最全面的信号,但这并非必需。在没有 root 权限的情况下无法读取的任何内容都会被报告为 `unknown`,而不会被跳过。
### 审计远程或不同架构的主机
采集器仅能在 Linux 上执行实际工作,因此如果你使用的是 macOS,请先进行交叉编译:
```
make linux-amd64 # produces bin/fragcheck-linux-amd64
make linux-arm64 # produces bin/fragcheck-linux-arm64
make linux # produces both
```
然后将二进制文件复制到目标机器并运行,或者使用 container 在本地测试:
```
make linux-arm64
podman run --rm -v "$PWD/bin/fragcheck-linux-arm64:/fragcheck:ro" ubuntu:22.04 /fragcheck
```
### Makefile 目标
```
make build # build bin/fragcheck
make test # run the full test suite
make check # format, vet, and test
make clean # remove bin/
make help # list all targets
```
### 退出代码
| 代码 | 含义 |
|------|---------|
| `0` | 审计完成(可能仍存在发现结果) |
| `1` | 内部错误(例如数据集加载失败) |
| `2` | 拒绝执行 — 未在 Linux 上运行,或不支持的发行版 |
## 项目状态
早期开发阶段。设计说明位于 `docs/SPEC.md`;完整的 CVE 详情位于 `docs/cves.md`。
标签:EVTX分析, Go, Ruby工具, Web报告查看器, 内核漏洞, 协议分析, 日志审计, 权限提升, 系统检测