Skip to content

Add zizmor GitHub Actions audit gate - #1

Draft
peaceful-james wants to merge 2 commits into
mainfrom
security/zizmor-gate
Draft

Add zizmor GitHub Actions audit gate#1
peaceful-james wants to merge 2 commits into
mainfrom
security/zizmor-gate

Conversation

@peaceful-james

Copy link
Copy Markdown

Wave 0 of the org-wide zizmor rollout. lazy-hook was picked as the smoke test: one workflow, three findings, public, and nothing here can break a deploy.

What zizmor found

finding severity file
unpinned-usesactions/checkout@v6 High ci.yml:17
unpinned-usesdevcontainers/ci@v0.3 High ci.yml:19
artipacked — checkout persists credentials Low ci.yml:16

All three are fixed. The repo is now at zero findings across workflows, actions, and Dependabot collectors.

Verification

  • Both SHAs were checked against the GitHub API rather than trusted from the tool: actions/checkout@v6.1.0d23441a…, devcontainers/ci@v0.3.1900000450513af61…. v6 currently resolves to the same commit as v6.1.0, so the pin is faithful to what was running.
  • persist-credentials: false is safe here — grep finds no git fetch/push/pull/clone anywhere in the repo, and scripts/check.sh only runs bun and mix inside the dev container. (This is the flag that made it unsafe in Jump, where fetch-sha.sh does a post-checkout git fetch origin.)
  • All three changed files parse as YAML.
  • The new workflow passes its own audit.
  • No workflow runs were triggered to produce this PR; everything above was verified statically.

The gate

Runs on every PR and on pushes to main, at --min-severity=high. main is kept at zero high-severity findings, so a red check means the finding came from that PR.

lazy-hook has no branch protection, so this is not a required check — the red X is the signal. Adding a ruleset would be a separate decision.

Dependabot

The github-actions ecosystem is included in this PR rather than split out. Hash pins with no updater trade a floating-tag problem for a silently-stale-pin problem — that objection is what closed Jump-App/Jump#23417, and it applies the moment pins land. Updates are grouped into one weekly PR with a 7-day cooldown.

For the larger repos the Dependabot block will land as its own PR ahead of the pins; bundling it here is only reasonable because this diff is nine lines.

🤖 Generated with Claude Code

peaceful-james and others added 2 commits August 11, 2026 13:44
zizmor is a static analyzer for GitHub Actions workflows. This adds it as a
merge gate and fixes the three findings it reported here.

The fixes:

- Pin both actions to hashes. Unpinned tags are mutable, so `@v6` can silently
  become different code. Both SHAs were verified against the GitHub API; `v6`
  currently resolves to the same commit as `v6.1.0`.
- Set persist-credentials: false on the checkout. Nothing here does a git
  remote operation after checkout, so leaving the token in .git/config only
  widens what a compromised step can reach.

Dependabot's github-actions ecosystem is added in the same change. Hash pins
without an updater trade a floating-tag problem for a silently-stale-pin
problem, so the two belong together. Updates are grouped into one weekly PR
with a 7-day cooldown, so a yanked or compromised release is not picked up the
moment it is published.

The gate runs at --min-severity=high. main is kept at zero high-severity
findings, so a red check means the finding comes from that PR.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The first run logged "zizmor is running in offline mode by default". Without a
token zizmor skips the online audits — the known-vulnerable-action and
stale-ref lookups — and still reports green, so the gate was quietly weaker
than it looked.

Passing github.token turns them on. contents: read is sufficient. Verified
this repo is still clean with the online audits enabled.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant