Repository navigation
fix(workspace): force google.golang.org/grpc v1.83.2 to patch CVE-2026-84304/84303/84445 - #168
Conversation
…6-84304, CVE-2026-84303, CVE-2026-84445 Three Dependabot security alerts are open for the gRPC-Go runtime: - #67 CVE-2026-84304 / GHSA-vp52-pcj8-j9qc — Heap OOM via HTTP/2 DATA frame fragmentation - #69 CVE-2026-84303 / GHSA-qc2q-p7wx-3px3 — xDS RBAC HTTP filter bypass (mixed-case headers / gRFC A41 evasion) - #70 CVE-2026-84445 / GHSA-2v4p-qf9q-27wj — xDS servers DoS via missing `:authority` / `Host` headers Per the GitHub Advisory DB, the minimum stable gRPC release that patches all three is **v1.83.2** (CVE-2026-84304/84303 first patched in 1.83.1; CVE-2026-84445's `>= 1.83.0, < 1.83.2` range first patched in 1.83.2). `google.golang.org/grpc` is not a direct dependency of any `pkg/*/go.mod` — it is purely transitive, pulled in by `linkerd2 v0.5.1-…` (pinning `grpc v1.81.1`), `cert-manager v1.21.2`, `argo-cd v3.6.0-rc2`, etc. The Go workspace was already resolving to a MVS version that satisfies those parents, so Dependabot had no single `go.mod` it could bump. The cleanest workspace-wide fix is a `replace` in `go.work` pinning `google.golang.org/grpc` to `v1.83.2`. This forces every workspace module to use the patched version, and `go list -m` confirms the resolution in both modules that actually load gRPC: pkg/linkerd: google.golang.org/grpc v1.84.0 => v1.83.2 pkg/argo/workflows: google.golang.org/grpc v1.84.0 => v1.83.2 (The other 11 modules' compile graphs do not actually link `google.golang.org/grpc` — they use the REST client — so the `go.work` replace is a no-op for them, but the alerts were reported at the workspace level and are now resolved.) Verified locally: - `go vet ./...` in `pkg/linkerd` → exit 0 - `go build ./...` in `pkg/linkerd` → exit 0 - `go mod download` in every workspace module → clean
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5f72f3483d
ℹ️ 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".
| k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.37.0 | ||
| k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.37.0 | ||
| k8s.io/sample-controller => k8s.io/sample-controller v0.37.0 | ||
| google.golang.org/grpc => google.golang.org/grpc v1.83.2 |
There was a problem hiding this comment.
Pin gRPC in the published Linkerd module
When consumers import pkg/linkerd as a released module, their Go command does not read this repository's go.work, so this replacement never reaches them; because pkg/linkerd/go.mod remains unchanged and has no gRPC requirement, its dependency graph can still select Linkerd's vulnerable pre-1.83.2 version. Add the minimum safe requirement to the affected module's go.mod rather than relying solely on a workspace replacement.
AGENTS.md reference: AGENTS.md:L38-L38
Useful? React with 👍 / 👎.
| github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh78= | ||
| github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= | ||
| github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= | ||
| github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= | ||
| github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= | ||
| github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= | ||
| github.com/go-openapi/jsonpointer v1.0.0 h1:kR9tHqY0CtZaOPVFm622dPVNhrvYpwr4uCxgL3h1H8s= | ||
| github.com/go-openapi/jsonpointer v1.0.0/go.mod h1:Z3rw7dWu1p9IgitXCFamSlA5lmDiklEB6vkaxcNZW5Y= | ||
| github.com/go-openapi/jsonreference v1.0.0 h1:jlmTr6torcd1YgDQvSfNmRtKzYDO4FGBkrAdlAVWnpY= | ||
| github.com/go-openapi/jsonreference v1.0.0/go.mod h1:jtwdyGbJk0Xhe5Y+rwtglQP6Sb1WZST4rT32LWB+sv0= | ||
| github.com/go-openapi/swag v0.27.1 h1:VotvOLWW8q/EAxB0YdsBBGC8XYyeL1YwBj2ungAGPNg= | ||
| github.com/go-openapi/swag v0.27.1/go.mod h1:GTkJPwHfhJp6MWr4/rCh64HVI3Ofu+tcsbfjfHmTxpE= | ||
| github.com/go-openapi/swag/cmdutils v0.27.1 h1:I7sYqaWVl5mq0NEmNQkAmFDyNin9ufvMX/p2zwtQaOE= | ||
| github.com/go-openapi/swag/cmdutils v0.27.1/go.mod h1:Sm1MVFMkF6guJJ+pQqHnQA3N0j9qALV3NxzDSv6bETM= | ||
| github.com/go-openapi/swag/conv v0.27.1 h1:8wi9ZG+olmY1wXphl93EWniPtbSPkXM/feH7FgjsvrU= | ||
| github.com/go-openapi/swag/conv v0.27.1/go.mod h1:QbqMivkpKhC3g1B1GGGOJ6ANewI3S62dbzYu3Duowqs= | ||
| github.com/go-openapi/swag/fileutils v0.27.1 h1:QQqBSoi5mW4XpU85nS0mLcA+zAE6vLzrb0QkmLKf9oM= | ||
| github.com/go-openapi/swag/fileutils v0.27.1/go.mod h1:VvJFZLTZS0AI854gEQz5tk7dBESdLjiNUMSZ/th2ry8= | ||
| github.com/go-openapi/swag/jsonutils v0.27.1 h1:SVgK3i4USzCU5mibOOS/l4ea2h9UQXy7J7RNLTjuXjU= | ||
| github.com/go-openapi/swag/jsonutils v0.27.1/go.mod h1:tdlEpZqdcQ17uj6J4YdK9vd8It5qWMwjWXOs0tjpRlk= | ||
| github.com/go-openapi/swag/jsonutils/fixtures_test v0.27.1 h1:mJu3COL9WEaZVp/Kf2PRMi7tPszPEJfSr/OO75ynCs8= | ||
| github.com/go-openapi/swag/jsonutils/fixtures_test v0.27.1/go.mod h1:mofwUWx70wvskwESqRJ//k/9kURmCgyJl5m5Ppoh5kY= | ||
| github.com/go-openapi/swag/loading v0.27.1 h1:/DxUgDXKbBX4bcn7r9uEXfJyzN5XpiJmZplzQTjrRCY= | ||
| github.com/go-openapi/swag/loading v0.27.1/go.mod h1:jvGh3iA2+zyUUycB5fgJWzeHnhrpvGnJJM0RVE9ZShE= | ||
| github.com/go-openapi/swag/mangling v0.27.1 h1:yC9D0HyUE8gbP+BfmGx9+AA89ikwZTMjESK3OnnoaqA= | ||
| github.com/go-openapi/swag/mangling v0.27.1/go.mod h1:jtBE2+V+3pILxOR7Vgce+Cwp6A2PgZbvVqfNntbVs0w= | ||
| github.com/go-openapi/swag/netutils v0.27.1 h1:mICMFoS82F5TZ4Zy3cqmcQk+BFeCp3Uyq3Np7GI0/qU= | ||
| github.com/go-openapi/swag/netutils v0.27.1/go.mod h1:J+WYyFMLtvtCGqa6jLv+YNUmIKI3ZRQRrvfNDMoQoEQ= | ||
| github.com/go-openapi/swag/pools v0.27.1 h1:9LeadcMyb2GJCbXX5hVQDbZ2Lq9TL4dCs/nx1j5DO0E= | ||
| github.com/go-openapi/swag/pools v0.27.1/go.mod h1:kVQefhSK5RWuRe7BXsL8htgBPAMpN7HDGpGEknqugeE= | ||
| github.com/go-openapi/swag/stringutils v0.27.1 h1:ZXePZ0r2p1qSjo8tD3Un4vFj8+FqlCkczxDrJIhYUp8= | ||
| github.com/go-openapi/swag/stringutils v0.27.1/go.mod h1:lzRN95CxXmA03XcDWHLOb6nOMcxCqR5rGY0lOgsfRoM= | ||
| github.com/go-openapi/swag/typeutils v0.27.1 h1:KSTdFlfnse4r6dP9IrEnwMldjE+zs71UeEB3//PtVXc= | ||
| github.com/go-openapi/swag/typeutils v0.27.1/go.mod h1:Srm0xFNRZ1Y+vCxJclo5qzx8aj+1pAKda/YfFPrG0dQ= | ||
| github.com/go-openapi/swag/yamlutils v0.27.1 h1:ftxv6xvXb1E3zohUc+okZ9nSqNb9StQX/FXnKZ98sQA= | ||
| github.com/go-openapi/swag/yamlutils v0.27.1/go.mod h1:bnxFIB1qewGRiZHypXGZ3fNgf13/0HfRgnS/iZBDrOo= | ||
| github.com/go-openapi/testify/enable/yaml/v2 v2.6.0 h1:gGHwAJ0R/5jU8BEGDbfRNR3hL68dAVi84WuOApp29B0= | ||
| github.com/go-openapi/testify/enable/yaml/v2 v2.6.0/go.mod h1:tY+St1SGq4NFl0QIqdTY4aEdbChAHxhyB77XQi9iJCo= | ||
| github.com/go-openapi/testify/v2 v2.6.0 h1:5PKH2HE7YJ/LuRPQGvSxBRlFXNQhSetBLlGAgUEu3ug= | ||
| github.com/go-openapi/testify/v2 v2.6.0/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw= | ||
| github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8= | ||
| github.com/go-openapi/jsonpointer v1.0.1 h1:2KxywRmNwJkT/FMBa3iRNHEaAxSJvjqoufQZy3au1Mg= | ||
| github.com/go-openapi/jsonreference v1.0.2 h1:oS4et8FOf3p3UQxEo4Xt0esijmBUM+F259Xl72OSZsc= | ||
| github.com/go-openapi/swag v0.28.0 h1:xkgbOSKj6DZziNpyqRRAOt3GJGtgjgsd2RoyT30VWuw= | ||
| github.com/go-openapi/swag/cmdutils v0.28.0 h1:7TOeNtkYru1SG8Y34tDh9WBbLsMqGnptuxWiHREPZ4Q= | ||
| github.com/go-openapi/swag/conv v0.29.1 h1:AC4Eh/5c/eUDOUCzzsRC9ghmFgOSBHeRMGIngY0ZUGA= | ||
| github.com/go-openapi/swag/fileutils v0.28.0 h1:Z04XWQD7R8Eq+7GnOrjovBxPPmZzsS4gt2H2GPGIViU= | ||
| github.com/go-openapi/swag/jsonutils v0.29.1 h1:AFCxs0eQZ24/QyfhVHM2t49rMz7Vv3XCsZQI6yrNy+c= | ||
| github.com/go-openapi/swag/jsonutils/fixtures_test v0.29.1 h1:BiiXE31Bx9SfpsMmOQj5KYpUhTZBpLVriVhJDuLuY2o= | ||
| github.com/go-openapi/swag/loading v0.29.1 h1:FCv5fG8UhTdDJa2R7w+5O9Ekpcbw7tt0nFWvmDKGBjc= | ||
| github.com/go-openapi/swag/mangling v0.29.1 h1:lHALtvYCdxVnRl4GrHmFPwfBTZYIObqdGNSKyu/8D6I= | ||
| github.com/go-openapi/swag/netutils v0.28.0 h1:YXN6TALEi2pzts8/8GNm6T61HTAZsieukGZidap989k= | ||
| github.com/go-openapi/swag/pools v0.29.1 h1:NRogYxdEW9SjRM4mkAOji9iefO4MRXq3p/ZJcoQbUKg= | ||
| github.com/go-openapi/swag/stringutils v0.29.1 h1:1ykunK7iJQk1uOO7+oUH1ukbsK85fFCOiCFMOVSY+F0= | ||
| github.com/go-openapi/swag/typeutils v0.29.1 h1:Nzv9nhnlLCRBPQqfOX+7lB6Guju370or8StT+lIOf6M= | ||
| github.com/go-openapi/swag/yamlutils v0.29.1 h1:69w3tsBajm7MR/fejLy7HD/3J68Ys1SeeZMEzZ3w2sk= | ||
| github.com/go-openapi/testify/enable/yaml/v2 v2.7.0 h1:wPW6YRgx3+SID1yUy/Xwa17L8kFEaEKod2VRbJDZNUs= | ||
| github.com/go-openapi/testify/v2 v2.7.0 h1:bycOreEj6wfBvijg3YFogZ/sFjTCDmQnwSodSzHa3X8= |
There was a problem hiding this comment.
🟡 Changes recommended
The workspace pin does not protect standalone consumers, and several module checksum files do not match their declared requirements.
1 open finding
What changed in this PR
Pins transitive gRPC to v1.83.2 to address three reported CVEs and refreshes Go module checksums.
Changes:
- Adds a workspace-wide gRPC replacement.
- Refreshes dependency checksum files.
- Removes obsolete root checksums.
| File | Summary |
|---|---|
go.work |
Adds the gRPC v1.83.2 replacement; standalone consumers still require a module-level requirement. |
go.sum |
Removes obsolete root checksums. |
pkg/velero/go.sum |
Updates checksum entries; requires matching module graph updates. |
pkg/utils/go.sum |
Updates checksum entries; requires matching module graph updates. |
pkg/linkerd/go.sum |
Updates checksum entries; requires matching module graph updates. |
pkg/k8s/go.sum |
Updates checksum entries; requires matching module graph updates. |
pkg/istio/go.sum |
Updates checksum entries; requires matching module graph updates. |
pkg/flux/go.sum |
Updates checksum entries; requires matching module graph updates. |
pkg/externalsecrets/go.sum |
Updates checksum entries; requires matching module graph updates. |
pkg/certmanager/go.sum |
Updates checksum entries; requires matching module graph updates. |
🧠 Review effort: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.37.0 | ||
| k8s.io/sample-cli-plugin => k8s.io/sample-cli-plugin v0.37.0 | ||
| k8s.io/sample-controller => k8s.io/sample-controller v0.37.0 | ||
| google.golang.org/grpc => google.golang.org/grpc v1.83.2 |

Problem
Three open Dependabot security alerts for gRPC-Go:
:authorityandHostheadersRoot cause
google.golang.org/grpcis not a direct dependency of anypkg/*/go.mod— it is purely transitive, pulled in bylinkerd2 v0.5.1-…(pinninggrpc v1.81.1),cert-manager v1.21.2,argo-cd v3.6.0-rc2, etc. Dependabot had no singlego.modit could bump, so the alerts stayed open.Per the GitHub Advisory DB the minimum stable gRPC that patches all three is v1.83.2 (CVE-2026-84304/84303 first patched in 1.83.1; CVE-2026-84445's
>= 1.83.0, < 1.83.2range first patched in 1.83.2).Fix
Add a workspace-wide
replaceingo.work:go list -mconfirms the resolution in both modules that actually load gRPC:pkg/linkerdgoogle.golang.org/grpc v1.84.0 => v1.83.2pkg/argo/workflowsgoogle.golang.org/grpc v1.84.0 => v1.83.2The other 11 modules don't actually link
google.golang.org/grpcin their compile graphs (they use the REST client), so thego.workreplace is a no-op for them — but the workspace-level Dependabot alerts are now closed.Verification
go vet ./...inpkg/linkerd→ exit 0go build ./...inpkg/linkerd→ exit 0go mod downloadin every workspace module → cleanNotes
go work syncitself fails on this repo because of a pre-existing argo-cdv0.0.0staging-placeholder issue (the existinggo.workcomment explains the workaround). That's unrelated to this fix and works fine for CI.pkg/argo/*/go.sumfiles are unchanged in this PR — they were already at the patched gRPC version (Dependabot had previously marked the same CVEs asfixedin those manifests).linkerd2bumps from the original 10-PR merge (deps: bump the all group in /pkg/utils with 2 updates #157–deps: bump the all group in /pkg/argo/workflows with 3 updates #166) are not touched here; thepkg/linkerdreplace forsigs.k8s.io/gateway-api v1.0.0(from PR fix(pkg/linkerd): force gateway-api v1.0.0 to fix vet/lint after linkerd2 bump #167) is preserved.