ci: declare workflow-level contents: read on 3 workflows#22366
ci: declare workflow-level contents: read on 3 workflows#22366arpitjain099 wants to merge 1 commit into
contents: read on 3 workflows#22366Conversation
Pins the default GITHUB_TOKEN to contents: read on the workflows in .github/workflows/ that don't call a GitHub API beyond the initial checkout. The other workflows in this directory are left implicit because they need write scopes that a maintainer is better placed to declare. Motivation: CVE-2025-30066 (March 2025 tj-actions/changed-files compromise) exfiltrated GITHUB_TOKEN from workflow logs. Per-workflow caps bound runtime authority irrespective of repo or org default, give drift protection if the default ever widens, and are credited per-file by the OpenSSF Scorecard Token-Permissions check. YAML validated locally with yaml.safe_load. Signed-off-by: Arpit Jain <arpitjain099@gmail.com>
| - cron: '0 4 * * 1,4' | ||
|
|
||
| permissions: | ||
| contents: read |
There was a problem hiding this comment.
I think this also needs pull-requests: write
|
Feels like this isn't doing much since it doesn't tighten up the permissions for all workflows (in particular, |
|
Fair point @lnicola. The reason A clean fix is workflow-level I held off on declaring write scopes here because I'm an external contributor inferring intent from outside, and that's where I prefer maintainers to make the call. But if you'd like me to roll |
|
I know it needs to write, but I meant that if another token exfiltration attack comes up, these changes won't help much if we still have a workflow with write permissions since it will be targeted instead.
I think the default is |
Pins the default
GITHUB_TOKENtocontents: readon 3 workflows in.github/workflows/that don't call a GitHub API beyond the initial checkout.The following files were left implicit because they reference
GITHUB_TOKEN/ use a write-scope action / trigger onpull_request_target. Those scopes are best declared by maintainers:metrics.yaml,rustdoc.yaml.Why
CVE-2025-30066 (March 2025
tj-actions/changed-filessupply-chain compromise) exfiltratedGITHUB_TOKENfrom workflow logs. Pinning per workflow caps runtime authority irrespective of the repo or org default, gives drift protection if the default ever widens, and is credited per-file by the OpenSSF ScorecardToken-Permissionscheck.YAML validated locally with
yaml.safe_loadon each touched file.