SHA-pin the GitHub Actions that hold secrets or publish (claude-code-action, release job)
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 65/100
- Issue type
- Refactor
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- docker, github-actions, typescript
Research direction
Look at the workflow files listed in the issue: sdk-watch.yml and main.yml. Identify the jobs that use secrets (ANTHROPIC_API_KEY, npm OIDC, packages: write). For each action in those jobs, replace the mutable tag (like @v7) with the provided commit SHA, adding a comment. Verify the changes by running the workflows in a test environment or checking the syntax. The monthly dependency-refresh sweep will report if these SHAs become stale.
Written by the indexing model from the issue text.
Description
Severity: Low to Medium. CWE: CWE-829. Related: #1882 (earlier SHA-pinning of claude.yml, closed) and #2235 (decision to leave actions on moving major tags and report staleness via the monthly sweep).
What
I understand from #2235 that the actions are deliberately on moving major tags (@v4/@v7) and that staleness is reported by the
monthly sweep. This issue does not ask to revisit that everywhere. It asks for a narrower rule: pin by commit SHA the actions that run in a
job with a secret or a publish credential, where a moved tag replaces the code holding the credential.
| Job | Credential in scope | Actions on a mutable tag |
|---|---|---|
sdk-watch.yml analyze (line 179) |
ANTHROPIC_API_KEY |
anthropics/claude-code-action@v1 |
main.yml release/publish |
npm OIDC (id-token: write) |
actions/checkout@v7, actions/setup-node@v7 |
main.yml Docker/GHCR job |
packages: write, provenance attestation |
docker/login-action@v4, docker/build-push-action@v7, docker/metadata-action@v6, docker/setup-*-action@v4, actions/attest-build-provenance@v4 |
For scale: Semgrep github-actions-mutable-action-tag reports 24 uses: lines; OpenSSF Scorecard (CLI, 2026-09-24) gives
Pinned-Dependencies 1/10 (overall 7.7; Token-Permissions 10, Dangerous-Workflow 10, Vulnerabilities 10, Dependency-Update-Tool 10, SAST 0, Branch-Protection 5).
Commit SHAs resolved on 2026-09-24 (re-verify before use; tags move)
| Action | Tag | Commit |
|---|---|---|
| actions/checkout | v7 | 3d3c42e5aac5ba805825da76410c181273ba90b1 |
| actions/setup-node | v7 | 820762786026740c76f36085b0efc47a31fe5020 |
| actions/cache | v6 | 55cc8345863c7cc4c66a329aec7e433d2d1c52a9 |
| actions/upload-artifact | v7 | 043fb46d1a93c77aae656e7c1c64a875d1fc6a0a |
| actions/download-artifact | v8 | 3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c |
| actions/attest-build-provenance | v4 | 4d101475d8b20a2381f78447822ac1eab6504dd8 |
| anthropics/claude-code-action | v1 | 8cf3482550831fb35a4fc3fbf7ca139cf8028b4c |
| docker/login-action | v4 | dbcb813823bdd20940b903addbd779551569679f |
| docker/metadata-action | v6 | dc802804100637a589fabce1cb79ff13a1411302 |
| docker/setup-qemu-action | v4 | 99012661954931238ded8c8b007157a8430204e1 |
| docker/setup-buildx-action | v4 | f87e5991a6d7451dcb8d9637bfbc97413f497069 |
| docker/build-push-action | v7 | c3c9e263c25d99ce0380d002d59b67737d91b0dc |
Suggested change
- Pin those refs to SHAs with a trailing
# vNcomment, and let the monthlydependency-refreshsweep report stale SHAs the way #2235 option A describes. - Optionally add an OpenSSF Scorecard workflow, and a small CI check that any
uses:in a job holding a secret is a 40-hex ref.
Reviewed and not a finding
permissions: are least-privilege in every workflow, there is no pull_request_target, and ${{ }} expressions reach run: only through
env:. sdk-watch.yml correctly splits the model job (read-only, Read/Grep/Glob only) from the write job.
Reviewed at 1e31c78 (v2.8.0). No fix code is offered, per CONTRIBUTING.md.
Prompt used (per CONTRIBUTING.md)
"Audit this repository's CI workflows and one crypto module against the OpenSSF/CRA-friendly checklist. Run Semgrep,
osv-scanner, gitleaks and trufflehog; read every cited line before accepting a finding; reproduce any crypto claim on the
lowest supported Node version; drop findings that are test fixtures or already mitigated."
- Dominant language
- TypeScript
- Stars
- 10.9k
- Forks
- 1.5k
- Avg merge
- 5h 47m
- Merged PRs (30d)
- 148
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from modelcontextprotocol/inspector
-
bug security v2
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
modelcontextprotocol/inspector#2485 · 1 comment ·
-
enhancement v2
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
modelcontextprotocol/inspector#2438 · 1 comment ·
-
bug v2
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
modelcontextprotocol/inspector#2424 · 2 comments ·
-
chore v2
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
modelcontextprotocol/inspector#2416 · 1 comment ·
-
chore v2
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
modelcontextprotocol/inspector#2414 · 1 comment ·
All issues in modelcontextprotocol/inspector
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
bcgov/bc-wallet-mobile#4761 · 1 comment ·
-
external-issue to-triage
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
area-deployment area-integrations triage:bot-seen
Difficulty 2/5 Half a day Newbie friendliness 86/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
-
refactor
Difficulty 2/5 1-3 hours Newbie friendliness 84/100