greylag-ci/cicd-goat

GitHub: greylag-ci/cicd-goat

一个故意易受攻击的CI/CD环境,用于基准测试和比较安全扫描器的检测效果。

Stars: 1 | Forks: 0

[![扫描仪比较](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/6213192b7c084045.svg)](https://github.com/greylag-ci/cicd-goat/actions/workflows/scanner-comparison.yml) [![Apache 2.0 许可证](https://img.shields.io/badge/license-Apache_2.0-3a3a3a?style=flat-square)](LICENSE) [![CICD-SEC 前10名](https://img.shields.io/badge/owasp-CICD--SEC_10%2F10-9c2b2b?style=flat-square)](https://owasp.org/www-project-top-10-ci-cd-security-risks/) [![场景 38](https://img.shields.io/badge/scenarios-38-1f6feb?style=flat-square)](scenarios/README.md) [![扫描器 7](https://img.shields.io/badge/scanners-7-1f6feb?style=flat-square)](docs/MATRIX.md) 三十八个 GitHub Actions 工作流,每个都演示了一个特定的攻击模式,这些模式源自公开披露的命名事件(tj-actions 2025, ArtiPACKED 2024, Codecov 2021, Birsan 依赖混淆 2021, event-stream/ua-parser-js/node-ipc/Shai-Hulud npm 生命周期滥用, Project Zero 错误 2070, Synacktiv Dependabot 漏洞利用)以及 **OWASP CI/CD 安全风险前 10 名**——涵盖所有十个类别。 场景 30–33 是场景 02 的变体,用于探测扫描器在四个 `github.event.*` 上下文中对不受信任输入列表的完整性;场景 34–38 则通过不安全命令复活、签名但未绑定的 `cosign verify`、跨作业环境密钥泄露、混淆代理自动合并以及从 PR 递归子模块检出,扩大了覆盖范围。每个作业都用 `if: false` 进行限制,因此工作流会出现在运行历史记录中,但永远不会启动运行器。 ## 排行榜 每个扫描器在 38 个场景中捕获了多少。扫描器仅在触发一条指明该场景*特定预期错误*的规则时,才能在该场景上获得 ✅ 分——而不仅仅是工作流文件上的任何发现。根据 `main` 分支上最新的 [`scanner-comparison`](../../actions/workflows/scanner-comparison.yml) 运行结果自动生成。[评分方式 →](docs/FIELD-TEST.md) | 扫描器 | 捕获的场景数(共38个) | | :--- | :--- | | pipeline‑check | **31 ✅** | | zizmor | **16 ✅** | | poutine | **12 ✅** | | octoscan | **12 ✅** | | Checkov | **9 ✅** | | KICS | **7 ✅** | | actionlint | **6 ✅** | → **[完整的每个场景矩阵](docs/MATRIX.md)** · **[覆盖维度——按 CICD-SEC、严重性、单独捕获](docs/COVERAGE-AXES.md)** · **[每条规则触发详情](docs/RULE-FIRINGS.md)** · **[五个精选场景的演练](docs/FIELD-TEST.md)** ## 仓库内容 - **[场景](scenarios/README.md)** — 38 个易受攻击的工作流,每个都有其书面说明(漏洞利用演练、每个扫描器的覆盖范围、修复方法)。按攻击类别和 CICD-SEC 类别索引。 - **[完整矩阵](docs/MATRIX.md)** — 每个(场景 × 扫描器)的判定表,从真实的 SARIF 自动重建。 - **[覆盖维度](docs/COVERAGE-AXES.md)** — 同样的判定,以三种不同方式呈现:按 OWASP CICD-SEC 类别、按严重性、以及按单独捕获(仅有一个扫描器发现的场景)。 - **[每条规则触发详情](docs/RULE-FIRINGS.md)** — 对于每对(场景 × 扫描器),列出该扫描器在该工作流上实际发出的每条规则。规范错误规则**加粗**显示;其他所有内容均为干扰或相关项。 - **[现场测试](docs/FIELD-TEST.md)** — 五个精选场景,附有逐条规则评注,包括关于针对*缺失*安全控制(SBOM、签名等)触发的规则的部分。 - **[安全态势](SAFETY.md)** — 如何加固分叉 PR 和 Actions 权限,以防止此仓库被滥用为他人的运行器。 - **[贡献指南](CONTRIBUTING.md)** — 添加扫描器、添加场景、重新生成统计信息。 ## 比较如何运行 ``` push / pull_request │ ▼ ┌─────────────────────────────────────────────────────────┐ │ .github/workflows/scanner-comparison.yml │ │ │ │ pipeline-check ▸ zizmor ▸ poutine │ │ ▸ kics ▸ checkov ▸ actionlint ▸ octoscan │ │ │ │ │ ▼ │ │ upload SARIF │ │ (one Code-Scanning category per tool) │ └────────────────────────┬────────────────────────────────┘ ▼ Code Scanning + Run Summary │ ▼ tools/regen-readme.py (reads SARIF) │ ▼ README leaderboard + docs/MATRIX.md ``` 一个每周运行的任务 — [`.github/workflows/regen-readme.yml`](.github/workflows/regen-readme.yml) — 拉取最新的 SARIF,重新运行排行榜和矩阵,如果有任何变动,则提交一个 PR。参见 [CONTRIBUTING.md → 重新生成统计信息](CONTRIBUTING.md#regenerate-the-stats)。 ## 为何 `pipeline-check` 参与此比较 此仓库是测试场;[`pipeline-check`](https://github.com/greylag-ci/pipeline-check-vscode) 是正在被测试的引擎之一。它在此语料库上所做的不同之处(范围窄但真实):在排行榜上领先于次佳扫描器(zizmor);提供一系列规则,当工作流*缺失*安全控制(SBOM、SLSA、制品签名、漏洞扫描、`environment:` 绑定、`timeout-minutes`、容器摘要固定)时触发——此处没有其他扫描器携带这些规则;涵盖 23 个 CI/CD 提供者及 GitHub Actions 之外的清单类型。 通过 [Pipeline-Check 扩展](https://github.com/greylag-ci/pipeline-check-vscode) 提供内联 VS Code 体验;Python 规则引擎位于 [`dmartinochoa/pipeline-check`](https://github.com/dmartinochoa/pipeline-check)。 ## 许可证与渊源 Apache 2.0 — 参见 [LICENSE](LICENSE)。[`cider-security-research/cicd-goat`](https://github.com/cider-security-research/cicd-goat) 的软分叉;所有上游内容此后已被移除,该项目现在独立且专注于 GitHub Actions。完整渊源请参见 [NOTICE](NOTICE)。
标签:CI/CD安全, CI/CD扫描, DevOps安全, GitHub Actions, GraphQL安全矩阵, Llama, OWASP Top 10, 依赖混淆, 安全工具评估, 安全扫描器, 安全测试, 安全风险, 工作流安全, 扫描器比较, 持续部署安全, 持续集成安全, 攻击性安全, 攻击模式, 漏洞演示, 漏洞环境, 生命周期滥用, 结构化查询, 自动化安全, 自动笔记, 软件安全测试, 逆向工具