fix: [FL-30998] bump google.golang.org/grpc to 1.83.2 (HIGH, GHSA-vp52-pcj8-j9qc) - #108
Merged
Merged
Conversation
Dependabot alert 4: google.golang.org/grpc at or below 1.83.0 is affected by GHSA-vp52-pcj8-j9qc (HIGH), fixed in 1.83.1. Took 1.83.2, the newest release on that line, so a later patch does not reopen this next wave. The alert was created 2026-09-02 07:50, after this wave's initial Dependabot sweep on 2026-08-31 returned CLEAN for enthistory. Genuinely new, not missed by the sweep. Bumping grpc alone fails with an ambiguous import: both the old monolithic google.golang.org/genproto (pinned at a 2022 pseudo-version in the module graph) and the split-out google.golang.org/genproto/googleapis/rpc provide googleapis/rpc/status. Moving genproto forward past the split resolves it, and go mod tidy then drops the monolithic module entirely - it is no longer required by anything. That cascade also raises five golang.org/x modules, two of which (x/sync and x/tools) are direct requires here. Those are not gratuitous: they are minimum-version-selection results forced by grpc 1.83.2's own requirements. Verified by trying both a targeted genproto pin and genproto@latest - the two converge on the same version set, which is what MVS being the cause looks like. Verified: build, vet, lint (0 issues) and goimports clean; go test -count=1 passes enthistory, internal/schemast and _examples; go mod tidy leaves no drift. Stacked on chore/FL-30996-go-1.27.1, itself stacked on patch/FL-30994-x-crypto-pin - all three touch go.mod.
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
Review caught that the previous commit did not change the resolved grpc
version for any build in this repo, and it was right.
_examples/go.mod carried `replace google.golang.org/grpc => v1.82.1`.
go.work makes both modules main modules, replaces from every main module
apply workspace-wide, and a replace is an absolute override rather than
an MVS input - so the root's `require v1.83.2` lost to that wildcard
replace. Proven, not reasoned:
before: go list -m google.golang.org/grpc
-> v1.83.2 => google.golang.org/grpc v1.82.1
v1.82.1 is exactly the version GHSA-vp52-pcj8-j9qc is filed against, so
the advisory stayed live for `make test`, `make lint`, CI's Testing job
and the committed _examples/go.sum. My earlier build/test/lint evidence
was collected against the vulnerable version and did not show it.
That pin was deliberate - #104 (FL-30189) added it as this repo's
mechanism for controlling grpc - so it is raised to v1.83.2 rather than
deleted, keeping the mechanism intact.
Also ran `go work sync ./...` plus `go mod tidy` in _examples, which the
previous commit skipped. That is what `make upgrade-deps` ends with, and
without it _examples/go.mod kept the pre-bump x/mod, x/sync, x/text,
x/tools and genproto versions - stale for GOWORK=off, Dependabot's
resolver, or anyone lifting an example as a starting point.
Now verified in all three modes:
workspace -> v1.83.2 => v1.83.2
GOWORK=off root -> v1.83.2
GOWORK=off _ex -> v1.83.2 => v1.83.2
and _examples/go.sum carries the v1.83.2 hashes.
Re-ran everything against the real 1.83.2: root build, vet, lint (0
issues) and goimports clean; go test -count=1 passes enthistory,
internal/schemast and _examples.
Checked FL-30994's websocket bump for the same shadowing - there is no
websocket replace, and it resolves v1.5.3 in both workspace and
GOWORK=off modes, so that fix was never affected. tidy dropped a
redundant `// indirect` line for it; go.sum still pins v1.5.3 and
go mod why still shows it in the build graph.
josue
pushed a commit
that referenced
this pull request
Sep 2, 2026
Resolves the four-file conflict created by merging #108 into this branch while FL-30994's review fixes landed on the base. Conflicts were go.mod, go.sum, _examples/go.mod and _examples/go.sum - all four because both sides edited the same dependency declarations. The resolution takes the newest of each rather than one side wholesale: go directive 1.26.7 (base) vs 1.26.8 (ours) -> 1.26.8 grpc 1.82.1 (base) vs 1.83.2 (ours) -> 1.83.2 websocket 1.5.3 both -> 1.5.3 x/crypto replace 0.56.0 (base) vs 0.55.0 (ours) -> 0.56.0 The x/crypto line is the one that would have been easy to lose. Taking "ours" wholesale would have reverted it to v0.55.0, which still carries GO-2026-6354 and GO-2026-6355 (DoS on deadlocked channels in x/crypto/ssh), both fixed in v0.56.0. The base's explanatory comment is carried across with the pin. go.sum on both modules was regenerated with go mod tidy rather than hand-merged. Verified by resolver rather than by reading the manifests - websocket v1.5.3 and grpc v1.83.2 both resolve correctly in root-standalone and workspace modes, and grpc resolves v1.83.2 in _examples standalone through its own replace. Root and _examples build, vet and test clean; lint reports 0 issues, confirming FL-30996's reflect.Pointer fix survived.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Dependabot alert #4 (HIGH):
google.golang.org/grpc≤ 1.83.0 is affected by GHSA-vp52-pcj8-j9qc, fixed in 1.83.1.The alert was created 2026-09-02 07:50, after this wave's initial Dependabot sweep on 2026-08-31 returned
CLEANfor this repo — genuinely new, not missed.Solution
Bump to 1.83.2 — newest on the line, so a later patch doesn't reopen this.
Two places had to change, and the second is the whole story.
1. The root
require(first commit) — insufficient on its own2. The
_examplesreplace (second commit) — what actually moved the version_examples/go.modcarriedreplace google.golang.org/grpc => google.golang.org/grpc v1.82.1. Becausego.workmakes both modules main modules, replaces from every main module apply workspace-wide, and a replace is an absolute override, not an MVS input. So the root'srequire v1.83.2lost to that wildcard replace:v1.82.1is precisely the version the advisory is filed against. The bump was inert formake test,make lint, CI'sTestingjob and the committed_examples/go.sum.The pin was deliberate — #104 (FL-30189) added it as this repo's mechanism for controlling grpc — so it is raised to v1.83.2 rather than deleted, keeping the mechanism intact.
Also ran
go work sync ./...+go mod tidyin_examples, which the first commit skipped. That is whatmake upgrade-depsends with; without it_examples/go.modkept the pre-bump versions, stale forGOWORK=off, Dependabot's resolver, or anyone lifting an example as a starting point.Version changes that actually happened
Sourced from
git diff, not fromgo getstdout — see the note below.google.golang.org/grpcx/modx/syncx/textx/toolsgenproto/googleapis/rpc…afd174a4e478…3dc84a4a5aaax/netandx/sysdid NOT move, despitego getreporting them as upgraded. Both are replace-pinned (go.mod:53at v0.55.0,go.mod:55at v0.44.0) and theirgo.sumentries are untouched. My first description listed them because I transcribedgo get's stdout, which reports what MVS selected before replaces override it.go getdescribes intent;go list -mdescribes reality — the same error as the inert bump, one layer down.The genproto ambiguity
Bumping grpc alone fails — the old monolithic
genprotoand the split-outgenproto/googleapis/rpcboth providegoogleapis/rpc/status. Movinggenprotopast the split resolves it, andgo mod tidythen drops the monolithic module entirely.Testing strategy
The resolver check first, because a green suite says nothing about which version it compiled:
_examples/go.sumcarries the v1.83.2 hashes. All three modes, because one mode was exactly what hid the first revision's failure.Everything below re-run against the real 1.83.2; the first revision's green results were collected on 1.82.1 and are void:
_examplesgo build ./...go vet ./...golangci-lintv2.13.2goimportsgo test -count=1 ./...Passing:
ok github.com/flume/enthistory,ok github.com/flume/enthistory/internal/schemast,ok _examples.Checked #106 for the same shadowing: there is no
websocketreplace, and it resolvesv1.5.3under both workspace andGOWORK=off, so that fix was never affected.tidyremoved a redundant// indirectline for it —go.sumstill pins v1.5.3 andgo mod why -mstill shows it reachable viaentgql → gqlgen/client.Rollback plan
Revert both commits —
go.mod/go.sumin root and_examples. No source change, no API change.Security review
requireline.x/sync,x/tools) moved as MVS requires, with the real test suite green.