Bump the Go toolchain to 1.26.7 for four stdlib advisories - #94
Conversation
govulncheck against this tree on go1.26.5 reports four standard library vulnerabilities, all fixed in go1.26.6: GO-2026-6218 net/url GO-2026-6090 crypto/tls GO-2026-5972 encoding/asn1 GO-2026-5026 net/http CI has no govulncheck job, so nothing surfaced them; the pin just aged past the advisories. On 1.26.7 the scan reports none of the four. Two findings remain and are deliberately untouched: GO-2026-4887 and GO-2026-4883 in github.com/docker/docker, both 'Fixed in: N/A' for that module path. They are Moby daemon-side AuthZ-plugin and plugin-privilege-validation bugs, fixed only in github.com/moby/moby/v2 >= 2.0.0-beta.8 -- a module-path move onto a beta. We use docker as a client. Worth its own decision, not a toolchain bump. build, vet and gofmt pass on 1.26.7; unit packages pass. The two integration/ failures I see locally reproduce identically on unmodified main, so they are environmental here, not from this change.
There was a problem hiding this comment.
Pull request overview
Updates the root Go toolchain pin to address standard-library vulnerabilities.
Changes:
- Changes
go.modfrom Go 1.26.4 to 1.26.7. - Other repository toolchain pins remain unchanged.
Tip
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f5c8e5e40e
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
govulncheckagainst this tree on go1.26.5 reports four Go standard library vulnerabilities, all fixed in go1.26.6 (this repo pinnedgo 1.26.4, which is older still):net/urlcrypto/tlsencoding/asn1net/httpNothing in the source changed — the pin simply aged past the advisories.
I found this while bumping
basecamp/cli, which runs agovulncheckjob and went red. This repo has no such job, so it was silently affected rather than visibly broken.kamal-proxyandbasecamp-installerare in the same position and have matching PRs.Deliberately not fixed here
Two findings survive the bump and are left alone on purpose:
Both are in
github.com/docker/docker@v28.5.2+incompatibleand reportFixed in: N/Afor that module path. The fix exists only ingithub.com/moby/moby/v2 >= 2.0.0-beta.8— a module-path migration onto a beta release. Both are also daemon-side plugin-authorization bugs, and we consume docker as a client; the traces govulncheck reports here run through shared client error-handling (internal/docker/errors.go), not the AuthZ paths.That's a real decision with real cost, and it isn't a toolchain bump. Flagging it rather than bundling it.
Verification
Same tree, toolchain swapped:
go build,go vetandgofmt -lpass on 1.26.7; the 10 unit packages pass. Twointegration/tests (TestRestore,TestRestoreWithPostRestoreHook) fail on my machine, but they fail identically on unmodified main with the old pin, so they're environmental here and not from this change — CI is green on main.Why this needed a human, and how to stop that
Nothing is going to bump this pin for us:
go/toolchaindirective. It's an open feature request — dependabot-core#13520, filed 2025-11-11, still open. Ourgomodconfig groups and cools down module updates and never touches the toolchain.check-latest: trueon setup-go would not have saved us here: it re-resolves the version spec, so against an exact1.26.7it's a no-op. It only floats when the spec is a range (1.26,stable,oldstable).That leaves a real choice, and it's worth making deliberately rather than by default:
go 1.26.7)go-version: stable+check-latest: truego 1.26, no check-latest)The third row is the trap, and it's what
basecamp/cliwas on: the spec floats but setup-go satisfies it from whatever patch the runner image happens to cache, so it silently pinned to a stale toolchain that later went vulnerable. Worth avoiding in either direction.The bigger gap is detection, not the pin. This repo has no
govulncheckjob, which is why the exposure was silent —basecamp/cliruns one and is the only repo that noticed. I'd suggest adding govulncheck here on a schedule rather than as a PR gate: an advisory published against a toolchain is time-based, not diff-based, so gating PRs on it means unrelated work goes red the moment a CVE drops (which is exactly what just happened to cli #64). A nightly run that reports is the signal; blocking every PR is the tax.Happy to send that as a follow-up if you want it — deliberately not folded into this bump.