fix(ci): do not persist the job token in .git/config in the public-repo guard - #86
fix(ci): do not persist the job token in .git/config in the public-repo guard#86yakimoto wants to merge 1 commit into
Conversation
…po guard actions/checkout without persist-credentials:false leaves GITHUB_TOKEN readable in .git/config for every later step — including the one that downloads and executes the gitleaks binary. Nothing in this job uses the credential (contents:read, gitleaks runs --no-git, no gh/push steps). Refs #1870.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_81545d65-9254-4332-8594-616c7756063c) |
ApprovabilityVerdict: Approved c27bf10 Minor CI security hardening that adds You can customize Macroscope's approvability policy. Learn more. |
PR Summary by QodoHarden public-repo-guard checkout by disabling credential persistence
AI Description
Diagram
High-Level Assessment
Files changed (1)
|
Code Review by Qodo🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)
Great, no issues found!Qodo reviewed your code and found no material issues that require reviewTo customize comments, go to the Qodo configuration screen, or learn more in the docs. |
Qodo FixerNo findings are available for this PR yet. Findings appear here once Qodo has reviewed the PR. |
|
This PR is redundant with #80 ( Evidence — #80's diff to + # tree. Nothing here pushes -- the scan is `--no-git` over the working tree --
+ # so no step needs authenticated Git; drop it. (zizmor: artipacked)
+ persist-credentials: false#80 is also broader than this PR: it syncs the whole vendored Closing as redundant. This duplicate exists because the fan-out that opened this PR |
Why
actions/checkoutwithoutpersist-credentials: falsewrites the job's GITHUB_TOKEN into.git/config, where any later step — or anything those steps execute — can read it. This is thesecurity gate that DOWNLOADS AND EXECUTES the gitleaks binary, and the workflow's own comment
already reasons about tampered downloads ("so a tampered or MITM'd download can never execute
inside the security gate"), so the threat model is written down and only the credential half of
the mitigation is missing. Found by zizmor as
warning[artipacked]: credential persistence through GitHub Actions artifacts.Safety
Verified this job only: checks out, installs gitleaks (pinned + checksum), runs
gitleaks detect --no-git, installs ripgrep, runscontent-policy.sh.permissions: contents: read. Nothing pushes, callsgh, or reads GITHUB_TOKEN/GH_TOKEN, so the token was never neededin
.git/configin the first place.Refs wave-av/claude-workstation#1870.
Note
Low Risk
Single checkout hardening in a read-only CI job; no application or auth logic changes.
Overview
The public-repo-guard workflow’s
actions/checkoutstep now setspersist-credentials: false, so the job’sGITHUB_TOKENis not written into.git/configfor later steps to read.That matches how other CI workflows in this repo handle checkout and closes the gap in this security gate: the job only needs a read-only tree for gitleaks and
content-policy.sh, and it already downloads and runs a pinned gitleaks binary—so keeping credentials out of the workspace aligns with the workflow’s stated tamper/MITM concerns.Reviewed by Cursor Bugbot for commit c27bf10. Configure here.
Note
Stop persisting the job token in
.git/configin the public-repo guard CI workflowSets
persist-credentials: falseon theactions/checkoutstep in public-repo-guard.yml so the GitHub job token is not written to the local git config during the workflow run.Macroscope summarized c27bf10.