Repository navigation
deps: clear the thirteen fixable advisories Scorecard reports, by version bump only - #43
Conversation
…p only
OpenSSF Scorecard's OSV check reports fourteen advisories against this tree.
None of them needs a code change; all but one are closed by moving a version.
Go:
GO-2026-6303 · GO-2026-6354 · GO-2026-6355 · GO-2026-5932
golang.org/x/crypto v0.53.0 -> v0.56.0
Nothing behavioural changes here. The affected packages in those four
advisories are x/crypto/ssh and x/crypto/openpgp; this tree imports only
bcrypt and argon2 (internal/keyvault/keyvault.go,
internal/handler/{claim,email_auth,invites}.go, cmd/calnode/reset_admin.go),
neither of which is touched by any of them. The bump is still worth taking so
the module graph stops reporting them.
go.sum moves two lines and no other module moves. The `go` directive goes
from `go 1.26` to `go 1.26.0` because x/crypto v0.56.0 declares `go 1.26.0`
and the go command requires the main module to be at least that; `go 1.26`
alone now fails with "updates to go.mod needed". Same language version,
written out.
GHSA-q7pp-wcgr-pffx
github.com/disintegration/imaging v1.6.2 -> not fixed upstream
Left alone deliberately: there is no fixed release. imaging is also not on a
reachable path for it here. Every call site (avatar.go, branding_settings.go)
goes through decodeUploadedImage in internal/handler/image_upload.go, which
sniffs the content type with http.DetectContentType and rejects anything that
is not JPEG, PNG, GIF or WebP before decoding, and it caps decoded pixels.
imaging itself is only ever asked for imaging.Fit on an already-decoded
image.Image - its decoders are never called.
Frontend:
GHSA-29g2-3rmr-qm68 · GHSA-866w-xmhq-wj7x · GHSA-wqjv-9729-c5q2
@sveltejs/kit ^2.65.1 -> ^2.70.2 (resolves 2.70.3)
All three are in Kit's server runtime, which this project never runs: the
admin app builds with adapter-static and fallback: '200.html' (see
frontend/svelte.config.js) and is served as static files embedded into the Go
binary. The bump is still the right answer rather than an exception note -
the dependency is in the tree, and five minors of Kit fixes come with it.
GHSA-p63j-vcc4-9vmv
@vitest/browser ^4.1.9 -> ^4.1.10 (resolves 4.1.11)
vitest ^4.1.9 -> ^4.1.10 (resolves 4.1.11)
@vitest/browser-playwright ^4.1.9 -> ^4.1.10 (resolves 4.1.11)
Test-only, but rated critical. Vitest's packages peer-depend on each other at
an exact version, so all three move together or pnpm reports an unmet peer.
GHSA-fxqj-rqcc-2cmp · GHSA-r28c-9q8g-f849
postcss 8.5.15 -> 8.5.28 (transitive: vite, shadcn-svelte)
GHSA-28wg-ghj8-5hjv · GHSA-2v37-7h3g-55p8
nanoid 3.3.12 -> 3.3.19 (transitive: postcss)
Both moved inside their parents' existing ranges, lockfile only.
GHSA-pxg6-pf52-xh8x
cookie 0.6.0 -> 0.7.2 (transitive: @sveltejs/kit)
This one needs a pnpm override, which is why there is now an `overrides`
block. @sveltejs/kit 2.70.3 - the newest 2.x - still declares cookie ^0.6.0,
and for a 0.x version that caret means >=0.6.0 <0.7.0, so the fixed 0.7.0
cannot be reached within the range. The override is scoped to that range
(`cookie@^0.6.0`) so it does not touch the separate cookie 1.1.1 that msw
pulls in, which was never affected. Worth flagging for review: forcing a
dependency inside Kit is a maintainer's call. The risk here is small - cookie
0.7.x is the same API with stricter validation of names, paths and domains,
and under adapter-static the Kit code that calls it never executes - but it
is an override and it should be dropped the moment Kit widens its range.
Verified: pnpm install --frozen-lockfile, pnpm build and pnpm test:visual
(Vitest browser mode, 5/5) all pass; pnpm audit reports no known
vulnerabilities. On the Go side go build ./..., go vet ./... and
go test ./internal/keyvault/... ./internal/handler/... all pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes Version-only dependency bumps to clear Scorecard Vulnerabilities noise where a fixed release exists. No application code changes.
golang.org/x/crypto→ v0.56.0 (andgo 1.26→go 1.26.0for the module’s declared language form). Clears the threesshadvisories; this tree only importsbcrypt/argon2.@sveltejs/kit→ 2.70.3 (lock), vitest browser stack → 4.1.11, plus transitivepostcss/nanoidrefreshes. SPA stays onadapter-static.- Scoped pnpm override
cookie@^0.6.0→^0.7.2so Kit’s 0.x caret can reach the patched line without touching msw’scookie@1.1.1.
Verified here: pnpm audit clean, pnpm build OK, go build/vet and keyvault/handler tests pass, govulncheck reports 0 symbol-level hits.
ℹ️ Title/body slightly overstates GO-2026-5932 clearance
The crypto bump is right for GO-2026-6303 / 6354 / 6355. GO-2026-5932 (x/crypto/openpgp) has no fixed release (Fixed in: N/A) and still shows as a module-level finding on v0.56.0 under govulncheck -show verbose. Same class as the imaging entry you correctly left alone: Scorecard may keep listing it after merge even though nothing in this tree calls openpgp. Worth a one-line PR-body tweak so the “fourteen cleared” claim matches what Scorecard will still see (openpgp + imaging).
Technical details
# GO-2026-5932 is not cleared by x/crypto v0.56.0
## Affected sites
- PR description table lists GO-2026-5932 under “From → To” as cleared by the crypto bump
- `golang.org/x/crypto@v0.56.0` still carries GO-2026-5932 at module level (openpgp, all versions)
## Required outcome
- PR title/body should not claim GO-2026-5932 is resolved by this bump; treat it like imaging (unfixed, unreachable)
## Suggested approach (optional)
- Drop GO-2026-5932 from the “cleared” table; note it remains as an unfixed module-level advisory with no call pathGrok | 𝕏
shockalotti
left a comment
There was a problem hiding this comment.
Bumps themselves look right and CI is green. I verified the tree with govulncheck ./... on this head: 0 reachable vulnerabilities, which is the outcome that matters. But the PR's headline claim needs correcting before merge:
GO-2026-5932 is not cleared by this bump and cannot be. Verbose output:
Vulnerability #1: GO-2026-5932 — the golang.org/x/crypto/openpgp package is unmaintained, unsafe by design ... Module: golang.org/x/crypto ... Found in: golang.org/x/crypto@v0.56.0 ... Fixed in: N/A
Our code doesn't call openpgp (govulncheck confirms: "0 vulnerabilities in packages you import" for called code), so this is unreachable-but-present. Since Scorecard flags at module level, it will likely keep reporting this one after merge — so "clear the fourteen advisories by version bump only" delivers thirteen. Please correct the table row: mark GO-2026-5932 as unfixable-but-uncalled rather than cleared, and adjust the title/body accordingly.
Small second ask: the diff also flips go 1.26 → go 1.26.0 in go.mod (semantically nil, presumably a tidy artifact). In a "bump only" PR I'd revert that hunk to keep the diff to exactly the version bumps.
|
You're right about GO-2026-5932, thanks. The title and description now say thirteen: GO-2026-5932 ( On the
|
shockalotti
left a comment
There was a problem hiding this comment.
Approved — the revision addresses the substance: body now says thirteen fixable with the two unfixable called out, matching what govulncheck reports on this head (0 reachable, GO-2026-5932 present-but-uncalled with no fixed release). Waiving my own go-directive nit: the surviving go 1.26 → 1.26.0 hunk is semantically nil and what current toolchains write; not worth another round-trip.

Scorecard's
Vulnerabilitiescheck reports fifteen advisories against this tree. Thirteen clear with version bumps. The other two have no fixed release, so no bump can clear them (see below). None of the fifteen is reachable in this codebase, so this is housekeeping rather than a fix for a live problem.golang.org/x/crypto@sveltejs/kit@vitest/browser(+vitest,@vitest/browser-playwright, which peer-pin each other exactly)postcss(transitive)nanoid(transitive)cookie(transitive, via Kit)Why none of them bites here: the three x/crypto advisories are in
ssh, and this tree imports onlybcryptandargon2; the three Kit advisories are in its server runtime, which never runs underadapter-static(the built SPA is embedded and served by Go);@vitest/browseris test-only;postcssandnanoidare build-time.Not cleared, and Scorecard will keep listing them after merge:
golang.org/x/crypto/openpgp(unmaintained, "Fixed in: N/A"). With no fixed release it stays present at module level on v0.56.0. Nothing in this tree importsopenpgp;govulncheckreports 0 vulnerabilities in called code.disintegration/imaging, no fixed release. Unreachable, since every upload goes throughdecodeUploadedImage's content-type sniff beforeimaging.Fitever sees a decoded image.Two things worth a look:
cookieneeded a pnpmoverridesentry ("cookie@^0.6.0": "^0.7.2"), because Kit 2.70.3 still declares^0.6.0and for a 0.x version that caret cannot reach 0.7. It is scoped to that range so msw'scookie@1.1.1is untouched, and it should go the moment Kit widens its own range. If you would rather not carry an override, dropping that hunk leaves one LOW advisory open and nothing else changes.go.mod's directive moves fromgo 1.26togo 1.26.0. This is required by the bump, not tidying: x/crypto v0.56.0 declaresgo 1.26.0, and withgo 1.26restored everygocommand stops with "updates to go.mod needed" (go build ./...exits 1). Same language version, spelled out.go mod tidymoved nothing else.Verified:
pnpm auditreports no known vulnerabilities;pnpm buildandpnpm test:visual(5/5 in Chromium) pass;go build,go vetand thekeyvaultandhandlertest packages pass;govulncheck ./...reports 0 vulnerabilities in called code.🤖 Generated with Claude Code