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), 安全扫描器, 工作流安全, 日志审计, 程序破解, 自动笔记, 软件开发工具包, 错误基检测, 静态二进制, 静态代码分析