TreRB/gh-actions-pwn-hunter
GitHub: TreRB/gh-actions-pwn-hunter
专注于 GitHub Actions pwn-request 类供应链漏洞的静态扫描器,精准检测八种可被实际利用的危险工作流模式。
Stars: 0 | Forks: 0
# valtik-gh-actions-pwn-hunter
GitHub Actions 工作流文件静态扫描器。主要针对在 2026 年 2 月至 4 月期间袭击了 Microsoft、DataDog、CNCF 以及数百个开源项目的 **pwn-request** 类供应链漏洞,以及 tj-actions(2025 年 3 月)和 Ultralytics(2024 年 12 月)事件。
这**不是**一个通用的 CI 代码检查工具。它专门寻找会导致公开供应链攻击的八种危险模式集群。
由 [Valtik Studios LLC](https://valtikstudios.com) 构建。
## 安装
```
go install github.com/TreRB/gh-actions-pwn-hunter@latest
```
或从源代码构建:
```
git clone https://github.com/TreRB/gh-actions-pwn-hunter.git
cd gh-actions-pwn-hunter
go build -o gh-actions-pwn-hunter .
```
需要 Go 1.22+。
## 用法
```
# 扫描本地 checkout(离线;无需 token)。
gh-actions-pwn-hunter ./my-repo
# 扫描单个远程 repo(需要 GH_TOKEN)。
gh-actions-pwn-hunter microsoft/vscode --token $GH_TOKEN
# 扫描 org/user 拥有的每个 repo。
gh-actions-pwn-hunter TreRB --token $GH_TOKEN
# Machine output。
gh-actions-pwn-hunter ./my-repo --json
gh-actions-pwn-hunter ./my-repo --sarif > findings.sarif
# severity >= high 时返回非零 exit。
gh-actions-pwn-hunter ./my-repo --fail-on high
```
## 检查参考
| ID | 标题 | 严重性 |
| --- | ----------------------------------------------------- | -------- |
| PW1 | `pull_request_target` + 不受信任的 checkout | CRITICAL |
| PW2 | 未固定版本(使用 tag/branch 而非 SHA)的第三方 action | HIGH (对于受信任的所有者为 MEDIUM) |
| PW3 | 已知被攻陷列表中固定版本的 SHA | CRITICAL |
| PW4 | 默认(或 `write-all`)`GITHUB_TOKEN` 权限 | HIGH |
| PW5 | `${{ secrets.* }}` 被插值到 `run:` 脚本中 | CRITICAL (如果带引号则为 MEDIUM) |
| PW6 | 密钥被持久化为步骤输出 (`set-output` / `$GITHUB_OUTPUT`) | HIGH |
| PW7 | 组合 action 的 `${{ inputs.X }}` 流入 shell | HIGH |
| PW8 | 带有特权上下文的 `workflow_run` 触发器 | HIGH |
### 已知被攻陷的 SHA 列表
扫描器在 `internal/data/compromised-actions.json` 中内置了一个种子列表。它包括:
- **tj-actions/changed-files (2025-03-14)** — 重新标记 v1..v45 版本以窃取 CI 密钥。
- **tj-actions/eslint-changed-files (2025-03-14)** — 附带 action,同一威胁行为者。
- **Ultralytics actions (2024-12-05)** — PyPI + action 被攻陷,加密货币挖矿程序 + token 窃取。
可以通过 `--compromised path/to/list.json` 使用您自己的列表进行覆盖。格式需与内置文件匹配。
**免责声明:** 种子列表是基于公开事件报告尽力整理的。它不是一个完整的 IOC(失陷标示)订阅源。在 CI 门禁中运行此工具的操作员应订阅专门的供应链订阅源(GHSA、Socket、Phylum),并通过 `--compromised` 维护最新的列表。
## 本地与远程模式
| 模式 | 目标 | 需要 GH_TOKEN | 备注 |
| -------------- | ------------------ | -------------- | ----- |
| local | `./path/to/repo` | no | 遍历文件系统中的 `.github/workflows/*.yml` 和根目录 `action.yml` |
| remote repo | `owner/repo` | yes | 通过 REST contents API 获取 |
| remote org | `owner` | yes | 通过 GraphQL 枚举仓库,通过 `--concurrency` 并发处理 |
速率限制:对于经典 PAT(个人访问令牌),GitHub REST + GraphQL 的配额为每小时 5000 次请求。一个包含 100 个仓库的组织大约会消耗 200–400 次请求。
## 输出格式
- `text`(默认)— 人类可读,彩色显示,按严重性降序排列。
- `--json` — 用于脚本处理的完整结果结构。
- `--sarif` — SARIF 2.1.0,可作为 GitHub 代码扫描结果上传。
## 授权
仅扫描您拥有或已获得书面审计许可的仓库或组织。以高并发扫描您不拥有的组织既是对速率限制的滥用,也可被视为未经授权的访问——请不要这样做。
## 许可证
MIT © 2026 Valtik Studios LLC。参见 [LICENSE](LICENSE)。
标签:CI/CD安全, CISA项目, DevSecOps, EVTX分析, GitHub Actions, Go语言, GraphQL安全矩阵, Llama, pwn-request, RCE漏洞检测, SARIF输出, StruQ, tj-actions, Ultralytics, 上游代理, 供应链攻击, 命令注入防护, 妥协指标(IOC), 安全扫描器, 工作流安全, 日志审计, 程序破解, 自动笔记, 软件开发工具包, 错误基检测, 静态二进制, 静态代码分析