rdx644/ZeroPatch-CI
GitHub: rdx644/ZeroPatch-CI
ZeroPatch CI 是一款证据优先的 GitHub Actions 供应链修复工具,通过解析工作流 YAML 结构并对高置信度安全问题生成草稿补丁,帮助团队安全地加固 CI 流水线。
Stars: 1 | Forks: 0
# ZeroPatch CI
证据优先的 GitHub Actions 供应链修复工具。ZeroPatch 会解析工作流,扫描五项高置信度控制措施,使用透明指标对发现的问题进行排名,并生成包含结构性验证证据的**仅限草稿**修复产物。
如需了解黑客松背景故事、架构、90秒演示和评审证明,请阅读 [Build Week 提交简报](docs/hackathon_submission.md)。
## 安全边界
- YAML 节点位置——而非原始文本正则表达式——驱动发现检测和更改。
- 转换操作仅限于批准的 action SHA 锁定、最小权限、安全的 PR 触发器以及精确的 self-hosted runner 替换。
- 不受支持的、模糊的和产物执行的发现仅供审查;API 会拒绝尝试自动修复它们的请求。
- 候选补丁必须能被解析为 YAML,并在返回证据之前移除所有选定的发现。
- ZeroPatch 绝不执行仓库代码,且没有合并权限。
- 可选的 GPT-5.6 逻辑说明默认处于禁用状态,且仅接收带有分隔符的、不受信任的工作流文本。
## 本地运行
要求 Python 3.11+。
```
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python -m unittest discover -s tests -v
python evals\run_local.py
python -m app.main
```
打开 `http://127.0.0.1:8000`。仪表盘会自动加载 `fixtures/insecure-release.yml`。
要在受信任的本地会话中启用可选的审查者逻辑说明,请将 `OPENAI_API_KEY` 放入 `.env.local` 中,设置 `ZEROPATCH_LOAD_DOTENV=1`,并设置 `ZEROPATCH_ALLOW_AGENT=1`。除非添加经过身份验证且具有速率限制的服务边界,否则在共享或公共部署中请保持禁用此选项。
## Docker
```
docker build -t zeropatch-ci .
docker run --rm -p 8000:8000 zeropatch-ci
```
容器以非特权用户身份运行,并监听 `0.0.0.0:8000`。默认的受信任主机是 `localhost` 和 `127.0.0.1`;对于反向代理部署,请将 `ZEROPATCH_ALLOWED_HOSTS` 设置为明确的、以逗号分隔的主机名允许列表。请在该边缘层应用 TLS、请求大小限制和速率限制。
## 生产部署
`render.yaml` 配置了 Web 服务及其 PostgreSQL 审计数据库。在应用 Blueprint 之前,请设置以下 Render 密钥(切勿提交它们):
- `GITHUB_CLIENT_ID` 和 `GITHUB_CLIENT_SECRET`
- `ZEROPATCH_SESSION_SECRET`(一个较长的随机值)
- `ZEROPATCH_ADMIN_LOGINS`(以逗号分隔的、允许读取 `/api/audit` 的 GitHub 登录名)
生产环境的回调 URL 是 `https://zeropatch-ci-rdx644.onrender.com/auth/github/callback`。部署要达到就绪状态,必须先确保数据库正常运行。GitHub OAuth 保护扫描和修复操作;可选的无人值守客户端可以在 `X-ZeroPatch-Key` 标头中发送来自 `ZEROPATCH_API_KEYS` 的值。请在仓库之外轮换该密钥。
## 策略控制
| 规则 | 控制措施 | 自动修复 |
| --- | --- | --- |
| ZP001 | 未锁定的 GitHub Action | 仅限已批准的目录条目;其他 action 仅供审查 |
| ZP002 | 显式的写入 token 权限 | 将选定的 `write` 值更改为 `read` |
| ZP003 | `pull_request_target` | 更改为 `pull_request` |
| ZP004 | PR 工作流中的 Self-hosted runner | 将精确的 `self-hosted` 标签更改为 `ubuntu-latest` |
| ZP005 | 下载的产物随后被执行 | 无 —— 需要人工重新设计 |
## 验证
测试套件包括解析器、转换、产物流程、权限范围、API 拒绝和响应标头回归测试。在开启任何 PR 之前,请先查看生成的草稿补丁;证据仅能证明受限的静态检查,而不能证明运行时的工作流行为。
## 作为 GitHub Action 使用
ZeroPatch 可以在任何 GitHub Actions 仓库中运行,而无需运行它所检查的仓库工作流。它会生成一份经过脱敏处理的 JSON 报告、步骤摘要计数,并且可以在达到选定严重程度时使检查失败。
```
- uses: rdx644/ZeroPatch-CI@v1.0.0
with:
workflow-path: .github/workflows
report-path: .zeropatch/zeropatch-report.json
fail-on: critical
```
可用的输出有 `report-path`、`finding-count` 和 `blocking-findings`。使用 `fail-on: never` 可开启仅报告模式。在生产工作流中,请将 action 锁定到发布标签背后的不可变 commit SHA。有关完整约定,请参阅 [GitHub Action 用法](docs/github-action.md)。
标签:DevSecOps, GitHub Actions, Petitpotam, Python, 上游代理, 安全合规, 文档安全, 无后门, 模块化设计, 测试用例, 网络代理, 自动化修复, 自动笔记, 请求拦截, 软件开发工具包, 逆向工具