fix(ci): stop persisting a write-scoped git credential through npm ci - #48
wyre-agent-fleet[bot] wants to merge 1 commit into
Conversation
The release job declares `contents: write`, which overrides this repo's read-only default workflow permission, so actions/checkout's default persisted credential was write-scoped and stayed live in .git/config through npm ci / build / test -- readable by any compromised dependency lifecycle script. persist-credentials: false is semantic-release's own documented recipe; it authenticates its pushes from GITHUB_TOKEN directly. Part of the CWE-250 pattern-set fix across WYRE-AI/node-*. Sibling PRs: node-spanning#46, node-domotz#48, node-kaseya-quote-manager#16, node-alternative-payments#20 (already merged/merging), plus this repo and 17 others in the same follow-up set.
|
Warning Review limit reachedNext included review available in 16 minutes. View limit detailsLimit details: You’ve used all 10 included reviews currently available. Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Comment |
|
Peer review (comment-only, per the shared-identity self-approval gate). Verdict: approve, no blockers. Verified independently against the actual diff content (not just warden's filing summary), as part of the 18-PR CWE-250 follow-up set-review:
Full batch (all independently verified): node-axcient#2, node-blumira#41, node-clio#2, node-connectwise-cpq#2, node-datto-bcdr#55, node-datto-saas-protection#55, node-huntress#43, node-iqms#39, node-kaseya-bms#48, node-kaseya-vsa#50, node-mailprotector#2, node-mimecast#44, node-ncentral#4, node-proofpoint-essentials#1, node-rootly#27, node-scalepad#2, node-threatlocker#31, node-unitrends#51 |
asachs01
left a comment
There was a problem hiding this comment.
Review: stop persisting write-scoped git credential through npm ci
Verified fix is correct and matches the described issue:
- Release job grants
contents: write, which upgrades the defaultactions/checkoutcredential to write-scoped and (without this fix) that credential stays live in.git/configthroughnpm ci/build/test — exposed to any compromised dependency lifecycle script (CWE-250). persist-credentials: falseis the correct, minimal mitigation and matches semantic-release's own documented recipe, since semantic-release authenticates pushes viaGITHUB_TOKENdirectly and never reads the persisted credential.- Diff is scoped to the
actions/checkoutstep only — no unrelated changes, no regressions to the release/publish flow.
Security: no new secrets, no injection surface; this closes a credential-exposure window rather than opening one.
Docs: CHANGELOG.md entry accurately describes the change.
Tests: none needed — CI workflow config change, verified by inspection.
Approving.
Code Review Summary — Claude CodeVerdict: Approve CriticalNone WarningsNone Suggestions
Looks Good
|
asachs01
left a comment
There was a problem hiding this comment.
Reviewed by Claude Code. Adds persist-credentials: false to the release job's checkout step, eliminating the write-scoped git credential (from contents: write) that otherwise stayed live in .git/config through npm ci/build/test; semantic-release already authenticates via GITHUB_TOKEN directly, so no needed auth is removed. CHANGELOG updated accordingly.
Code Review Summary (Reviewed by Hermes Agent)Security fix verified: Critical: None. Warnings: None. No secrets are logged or exposed; no auth bypass introduced. Suggestions:
Looks good. Approving from a review-comment perspective (no formal PR review submitted per bot policy). |
|
Reviewed against the verified fleet-wide fix pattern: this diff adds Reviewed by Hermes Agent |
Review — headRefOid
|
asachs01
left a comment
There was a problem hiding this comment.
Code Review Summary
Verdict: Approve
Small, well-scoped CI security fix. Sets persist-credentials: false on the actions/checkout step in the release workflow.
Correctness
- The release job's
Releasestep passesGITHUB_TOKEN/NODE_AUTH_TOKENexplicitly viaenv:tonpx semantic-release(verified against the sibling repos in this same fix set, which share this workflow template) — so disabling credential persistence on checkout does not remove auth semantic-release actually needs. - No other steps (
npm ci,npm run build,npm test) require git push access, so the fix has no functional downside.
Security
- Correctly closes a CWE-250 window: the job declares
contents: write(overriding the repo default read-only permission), so the default persisted checkout credential was write-scoped and readable in.git/configthroughoutnpm ci/build/test — exposed to any compromised dependency lifecycle script. Minimal, targeted fix.
Code Quality / Docs
- One workflow line plus a clear inline comment explaining the rationale; CHANGELOG entry documents the change well.
Testing
- N/A for a workflow-config-only change.
Note
- Part of an 18-repo pattern-set fix; diff is identical to the same fix already reviewed on node-kaseya-vsa, node-iqms, node-huntress, node-datto-saas-protection, etc.
Automated review by Hermes cron sweep
Reviewed SHA: 32885ff
Claude Code ReviewVerdict: Approve SummarySame CWE-250 fix as the rest of the fleet: adds Correctness
Security
Code Quality
Tests / Docs
Looks Good
|
asachs01
left a comment
There was a problem hiding this comment.
Hermes Agent Review
Verdict: Approve
Correct, minimal fix for CWE-250 (write-scoped git credential left live in .git/config through npm ci). persist-credentials: false is the documented semantic-release recipe since it authenticates its own pushes via GITHUB_TOKEN — no functional regression, changelog entry included, scoped to the affected job only.
Looks Good
- Fix is correctly scoped (only the release job, which is the one declaring
contents: write) - Rationale comment inline explains the CWE and why
persist-credentials: falseis safe here - Changelog entry present
No blocking issues.
Reviewed by Hermes Agent
Stops persisting a write-scoped git credential through
npm ci(CWE-250).The release job declares
contents: write, which overrides this repo'sread-only default workflow permission — so
actions/checkout's defaultpersisted credential was write-scoped and stayed live in
.git/configthrough dependency install, build and test, readable by any compromised
dependency lifecycle script during that window.
persist-credentials: falseis semantic-release's own documented GitHub Actions recipe: it authenticates
its own pushes from
GITHUB_TOKENdirectly and never needed the persistedcredential.
Part of a pattern-set fix across WYRE-AI/node-*. Originally found and
fixed on 4 repos (node-spanning#46, node-domotz#48,
node-kaseya-quote-manager#16, node-alternative-payments#20), then a
propagation scope-check found the same pattern on 18 more repos. Full set
(18, this repo included) so reviewers can see membership:
node-axcient, node-blumira, node-clio, node-connectwise-cpq, node-datto-bcdr, node-datto-saas-protection, node-huntress, node-iqms, node-kaseya-bms, node-kaseya-vsa, node-mailprotector, node-mimecast, node-ncentral, node-proofpoint-essentials, node-rootly, node-scalepad, node-threatlocker, node-unitrends
Generated by warden's Gate-3 CWE-250 review, per boss's set-completeness ruling.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.