-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmanifest.yml
More file actions
77 lines (72 loc) · 3.17 KB
/
Copy pathmanifest.yml
File metadata and controls
77 lines (72 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# ciguard GitHub App — registration manifest
#
# This is the canonical, reviewable record of EXACTLY what permissions
# the ciguard App requires. Threat-model commitment from
# `Project ciguard/THREAT_MODEL.md` Surface 9 design rationale: any
# permission expansion must go through a manifest-diff review,
# never silently in app code.
#
# To register a new App from this manifest (one-time, per organisation):
#
# 1. Visit https://github.com/settings/apps/new and pick "Create from
# manifest" — paste the contents of this file as JSON-or-YAML.
# (GitHub's UI accepts both; the field labels below mirror the
# JSON schema GitHub expects.)
#
# 2. Set the webhook URL to your `ciguard app` deployment, e.g.
# `https://ciguard.example.com/webhook`.
#
# 3. After creation, GitHub gives you:
# - App ID → `CIGUARD_APP_ID`
# - Private key (.pem) → `CIGUARD_APP_PRIVATE_KEY` (env)
# or `CIGUARD_APP_PRIVATE_KEY_PATH`
# - Webhook secret → `CIGUARD_APP_WEBHOOK_SECRET`
#
# 4. Set CIGUARD_APP_STORAGE_ROOT to a writable directory; the App
# will namespace `<installation_id>/<owner>/<repo>/baseline.json`
# under it (per-tenant isolation per THREAT_MODEL Surface 9).
#
# CYCLE-1.5 self-pentest must run against the App in the lab before
# the install link is shared publicly — extends pentest-lab/ Terraform
# with an ephemeral DO droplet.
name: ciguard
url: https://github.com/Jo-Jo98/ciguard
description: |
ciguard scans CI/CD pipeline configs (GitHub Actions / GitLab CI /
Jenkinsfiles) for security misconfigurations on every PR.
See https://github.com/Jo-Jo98/ciguard for rules + threat model.
# Webhook endpoint (override per deployment via the GitHub UI on the
# created App; this URL in the manifest is a placeholder).
hook_attributes:
url: https://ciguard.example.com/webhook
active: true
# Permission set — minimal, by design. Each line is intentional.
# THREAT_MODEL Surface 9: "App permissions over-scoped" closes here.
#
# Actions:read is DELIBERATELY OMITTED. The v0.11.x scan executor fetches
# the repo via GET /repos/{o}/{r}/tarball/{ref} (covered by contents:read);
# workflow YAML arrives as part of the tarball, not via the Actions API.
# Matches the four-perm spec the registered ciguard App on github.com runs
# under. Cycle 1.5 finding A2 (issue #20).
default_permissions:
# Read repo content: workflow YAML, .gitlab-ci.yml, Jenkinsfile, source
# files reachable via the tarball clone.
contents: read
# Post review comments on PRs. Required surface for the inline
# findings UX.
pull_requests: write
# Post Check Runs gated on `--fail-on-new=High`. Required for the
# gate-the-merge UX.
checks: write
# Mandatory for any GitHub App; reads basic repo metadata.
metadata: read
# Subscribed events — only what triggers a scan or registration change.
default_events:
- pull_request
- push
- installation
- installation_repositories
# Private to the org / personal account that creates it. Set to true on
# first registration; flip to false later if you want to publish the
# install link publicly. CYCLE-1.5 must complete BEFORE flipping.
public: false