[GH-ISSUE #3434] ci: external GitHub Actions are pinned by mutable tags, not commit SHAs #1279

Closed
opened 2026-10-16 21:03:42 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @GovinduSasanka on GitHub (Oct 14, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/3434

Every workflow references external actions by major tag (actions/checkout@v4, actions/setup-node@v4/@v6, googleapis/release-please-action@v4, cloudflare/wrangler-action@v4, and others). Only reactivecircus/android-emulator-runner is SHA-pinned.

Why it matters: an action's owner can move a tag, or an attacker who compromises the action can, and that silently changes the code that runs in jobs holding RELEASE_PLEASE_TOKEN, the npm OIDC publishing identity (id-token: write), and the Cloudflare API token.

Expected: pin each external uses: to the full commit SHA its tag names today, with the version as a trailing comment (@<sha> # v4.4.0) so Dependabot/Renovate can still bump it, and add a test that rejects new tag-only references.

Reviewed at fa4b828. A PR follows.

Originally created by @GovinduSasanka on GitHub (Oct 14, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/3434 Every workflow references external actions by major tag (`actions/checkout@v4`, `actions/setup-node@v4/@v6`, `googleapis/release-please-action@v4`, `cloudflare/wrangler-action@v4`, and others). Only `reactivecircus/android-emulator-runner` is SHA-pinned. **Why it matters:** an action's owner can move a tag, or an attacker who compromises the action can, and that silently changes the code that runs in jobs holding `RELEASE_PLEASE_TOKEN`, the npm OIDC publishing identity (`id-token: write`), and the Cloudflare API token. **Expected:** pin each external `uses:` to the full commit SHA its tag names today, with the version as a trailing comment (`@<sha> # v4.4.0`) so Dependabot/Renovate can still bump it, and add a test that rejects new tag-only references. Reviewed at fa4b828. A PR follows.
Author
Owner

@GovinduSasanka commented on GitHub (Oct 14, 2026):

Correction: I filed this against an older checkout. #1901 already pinned the workflows to SHAs. On current main only .github/workflows/real-cutter.yml still uses tags (actions/upload-artifact@v4 ×2, actions/download-artifact@v4). #3440 pins those and adds a boundary test so tag-only references can't come back unnoticed.

<!-- gh-comment-id:6166804886 --> @GovinduSasanka commented on GitHub (Oct 14, 2026): Correction: I filed this against an older checkout. #1901 already pinned the workflows to SHAs. On current `main` only `.github/workflows/real-cutter.yml` still uses tags (`actions/upload-artifact@v4` ×2, `actions/download-artifact@v4`). #3440 pins those and adds a boundary test so tag-only references can't come back unnoticed.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#1279
No description provided.