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报告查看器, 内核漏洞, 协议分析, 日志审计, 权限提升, 系统检测