Skip to content

fix(workspace): force google.golang.org/grpc v1.83.2 to patch CVE-2026-84304/84303/84445 - #168

Merged
davidcollom merged 1 commit into
mainfrom
fix/grpc-cves-2026
Oct 9, 2026
Merged

davidcollom merged 1 commit into
mainfrom
fix/grpc-cves-2026

Conversation

@davidcollom

Copy link
Copy Markdown
Owner

Problem

Three open Dependabot security alerts for gRPC-Go:

Root cause

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. Dependabot had no single go.mod it 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.2 range first patched in 1.83.2).

Fix

Add a workspace-wide replace in go.work:

replace (
    k8s.io/api => k8s.io/api v0.37.0
    ...
    google.golang.org/grpc => google.golang.org/grpc v1.83.2   // <-- this PR
)

go list -m confirms the resolution in both modules that actually load gRPC:

module resolved
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 don't actually link google.golang.org/grpc in their compile graphs (they use the REST client), so the go.work replace is a no-op for them — but the workspace-level Dependabot alerts are now closed.

Verification

  • go vet ./... in pkg/linkerd → exit 0
  • go build ./... in pkg/linkerd → exit 0
  • go mod download in every workspace module → clean

Notes

…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
Copilot AI lite review requested due to automatic review settings October 9, 2026 08:09
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-09T08:10:54.813545Z 5f72f34 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 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".

Comment thread go.work
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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge 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 👍 / 👎.

Comment thread pkg/utils/go.sum
Comment on lines +17 to +38
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=

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.

Comment thread go.work
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
@davidcollom
davidcollom merged commit 59733cd into main Oct 9, 2026
65 checks passed
@davidcollom
davidcollom deleted the fix/grpc-cves-2026 branch October 9, 2026 08:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants