fix(ci): pin actions to SHAs, add beta provenance, verify publisher binary - #364
fix(ci): pin actions to SHAs, add beta provenance, verify publisher binary#364SavioBS629 wants to merge 2 commits into
Conversation
…inary Addresses PMAA-106 security retest (2026-07-31): - Pin all GitHub Action references to full commit SHAs across all 4 workflows - Add --provenance to beta-release.yml npm publish (with id-token: write) - Verify mcp-publisher download against pinned SHA-256 before execution (INF-006) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
SavioBS629
left a comment
There was a problem hiding this comment.
Claude Code Review (automated) — 2 inline finding(s). Full report in the PR comment below. Verdict: Passed.
Claude Code PR ReviewPR: #364 • Head: f15e263 • Reviewers: stack:code-review SummaryHardens the CI/CD supply chain per the PMAA-106 security retest: pins all GitHub Action references across the 4 workflows to full commit SHAs, adds Review Table
Findings
Informational (no action needed): the mcp-ci.yml v3→v4.4.0 pin is a two-major runtime bump (safe on ubuntu-latest); the pinned publisher checksum is coupled to Verdict: PASS — all SHA pins and the binary checksum independently verified against upstream; remaining items are non-blocking follow-ups. |
…ved create-release Review follow-ups on PR browserstack#364: - checkout v2.8.0 -> v4.4.0, setup-node v3.9.1 -> v4.4.0 (same verified SHAs used elsewhere in this PR; v2/v3 lines are EOL and unpatched) - replace archived actions/create-release with gh release create, passing PR-derived notes via env vars instead of expression interpolation Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Summary
Addresses the PMAA-106 security retest (2026-07-31), which reopened the ticket with three required actions.
1. Beta publish provenance — fixed
beta-release.yml:npm publishnow runs with--provenance; addedid-token: writeto workflow permissions (required for OIDC provenance signing, mirrorsnpm-publish.yml).2. Action SHA pinning — fixed (8/8 references across all 4 workflows)
Every
uses:reference now points to a full commit SHA (resolved from the GitHub API) with the version as a trailing comment:A compromised mutable tag can no longer inject code into any workflow.
3. npm 2FA / automation-token control — needs org-level confirmation (not fixable in repo)
Requires someone with npm org access to confirm
NPM_TOKENis a granular automation token scoped to@browserstack/mcp-serverwith publish-only rights and that maintainer 2FA is enforced, then document it on the Jira ticket.Bonus: mcp-publisher binary verification (original INF-006, CVSS 7.4)
mcp-registry-publish.yml: the mcp-publisher tarball is now downloaded to disk and verified against a pinned SHA-256 before extraction/execution. GitHub release assets are mutable, so URL version pinning alone doesn't protect the OIDC credential this job holds. Hash sourced from upstreamregistry_1.3.3_checksums.txtand independently verified by downloading and hashing the asset. Tamper case tested locally (modified archive → check fails, exit 1, job stops before the binary runs).Testing
repos/<owner>/<repo>/git/matching-refs/tags🤖 Generated with Claude Code