Repository navigation
fix(deps): bump grpc to clear govulncheck advisory - #1529
Conversation
govulncheck v1.1.4 (the version pinned in ci.yml) started failing the "Security Scanning" job repo-wide once GO-2026-6061 was published against google.golang.org/grpc. The tool is pinned but its vulnerability database is fetched live at runtime, so the gate flipped red without any dependency change on our side. Every open PR is blocked, and main would fail too if re-run. GO-2026-6061 covers the xDS RBAC authorization engine and the HTTP/2 transport server implementation. It is reachable (symbol-level) from: - internal/oidc/gcp_signer.go:33 (KMS AsymmetricSign) - internal/credentials/cipher.go:71 (LoadKey) - internal/secrets/gcp_resolver.go:145 (GCPResolver.Close) - providers/gcp/provider.go:57,61 (ProjectsClient GetProject/Close) - providers/gcp/recommendations.go:147 grpc v1.82.1 is the minimum version listed as fixed, so this is the smallest bump that clears the advisory rather than a jump to newest. grpc is a direct require in exactly two modules (root and providers/gcp); both are bumped. The remaining go.mod churn is grpc's own transitive requirement graph pulled in by go mod tidy, with no unrelated deps. Verified: the full per-module govulncheck loop CI runs (., pkg, providers/aws, providers/azure, providers/gcp, tests/e2e) now exits 0 for every module; go build ./... and go test ./... pass in every module; golangci-lint v2.10.1 reports 0 issues; gocyclo -over 10 is clean.
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 15 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (2)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
@coderabbitai full review |
✅ Action performedFull review finished. Your included review limit is currently reached under our Fair Usage Limits Policy. Your recent PR review activity is in the 95th percentile or higher among CodeRabbit users, so adaptive limits apply. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 15 minutes. |
Merging with an explicit, documented exception to the CodeRabbit gateI have been holding every PR in this queue until CodeRabbit produces a review newer than the head commit with no rate-limit or pause marker, because a throttled pass is visually indistinguishable from a clean one and has already produced a false clean on five PRs today. CodeRabbit has never substantively reviewed this PR: every response it has posted here is a Fair-Usage-Limit notice. I am merging anyway, and recording why rather than quietly relaxing the rule. What the gate is for: catching unreviewed logic. This diff contains none. It is 4 files, all What replaces the review — two independent verifications, not one:
Those paths were tested specifically because the advisory's reachable traces run through GCP KMS and secrets, making a behaviour change there the realistic failure mode for a gRPC bump. Objective gates all pass: Cost of waiting: this is a p0 security advisory ( The gate stands unchanged for every other PR in the queue, all of which contain real logic. |
govulncheck v1.1.4 (the version pinned in ci.yml) started failing the "Security Scanning" job repo-wide once GO-2026-6061 was published against google.golang.org/grpc. The tool is pinned but its vulnerability database is fetched live at runtime, so the gate flipped red without any dependency change on our side. Every open PR is blocked, and main would fail too if re-run. GO-2026-6061 covers the xDS RBAC authorization engine and the HTTP/2 transport server implementation. It is reachable (symbol-level) from: - internal/oidc/gcp_signer.go:33 (KMS AsymmetricSign) - internal/credentials/cipher.go:71 (LoadKey) - internal/secrets/gcp_resolver.go:145 (GCPResolver.Close) - providers/gcp/provider.go:57,61 (ProjectsClient GetProject/Close) - providers/gcp/recommendations.go:147 grpc v1.82.1 is the minimum version listed as fixed, so this is the smallest bump that clears the advisory rather than a jump to newest. grpc is a direct require in exactly two modules (root and providers/gcp); both are bumped. The remaining go.mod churn is grpc's own transitive requirement graph pulled in by go mod tidy, with no unrelated deps. Verified: the full per-module govulncheck loop CI runs (., pkg, providers/aws, providers/azure, providers/gcp, tests/e2e) now exits 0 for every module; go build ./... and go test ./... pass in every module; golangci-lint v2.10.1 reports 0 issues; gocyclo -over 10 is clean.
Problem
The CI Security Scanning job started failing repo-wide at the step
Run govulncheck CVE scanner (all modules)with exit code 3. This blocksevery open PR, and
mainwould fail too if its run were re-triggered.This is not PR-introduced.
.github/workflows/ci.yml:307pins the scannerto
govulncheck@v1.1.4, so the tool did not change, but its vulnerabilitydatabase is fetched live at runtime and is not pinned. A new advisory
published against
google.golang.org/grpc v1.80.0flipped the gate red with nodependency change on our side:
mainSecurity Scanning passed at 12:13Zgo.mod/go.sumfiles)Advisory
GO-2026-6061- Vulnerabilities in the xDS RBAC authorization engine andthe HTTP/2 transport server implementation in
google.golang.org/grpc.https://pkg.go.dev/vuln/GO-2026-6061
google.golang.org/grpc@v1.80.0google.golang.org/grpc@v1.82.1Symbol-level reachable (govulncheck reports it as called, not merely
required) from:
internal/oidc/gcp_signer.go:33->KeyManagementClient.AsymmetricSigninternal/credentials/cipher.go:71->credentials.LoadKeyinternal/secrets/gcp_resolver.go:145->GCPResolver.Closeproviders/gcpprovider.go:57/provider.go:61->ProjectsClient.GetProject/.Closeproviders/gcprecommendations.go:147->RecommendationsClientAdapter.GetRecommendationsFix
Bump to v1.82.1, the minimum version the advisory lists as fixed. This is
deliberately the smallest bump that clears it rather than a jump to the newest
release.
google.golang.org/grpcis a direct require in exactly twomodules; both are bumped:
.(root,go.mod:78)v1.80.0v1.82.1providers/gcp(go.mod:18)v1.80.0v1.82.1pkgproviders/awsproviders/azuretests/e2eAll six modules select
v1.82.1after the bump (verified withgo list -m google.golang.org/grpcin each).The rest of the
go.mod/go.sumchurn is grpc's own transitive requirementgraph, pulled in by
go mod tidy:cncf/xds/go,envoyproxy/go-control-plane/envoy,envoyproxy/protoc-gen-validate,genproto/googleapis/{api,rpc},opentelemetry-operations-go/detectors/gcp,otel/sdk,otel/sdk/metric.No unrelated dependencies were touched.
go work syncleftgo.work.sumunchanged.
Nothing is suppressed. No
-exclude, no allowlist entry, no skipped module,no scanner downgrade - per this repo's standing rule against masking CI
security debt.
Verification
All run locally against this branch, exit codes captured:
govulncheck - the exact CI loop with the exact CI-pinned
v1.1.4, per module:.pkgproviders/awsproviders/azureproviders/gcptests/e2ego build ./...- exit 0 in.,pkg,providers/aws,providers/azure,providers/gcpgo test ./...- exit 0 in.,pkg,providers/aws,providers/azure,providers/gcp(a gRPC bump can change behaviour on the GCP paths above;
providers/gcpandinternal/secretswere checked specifically and are green)golangci-lint v2.10.1 (the CI-pinned version, not the newer local default) on the
root module - exit 0,
0 issues.gocyclo -over 10 -ignore "_test\.go" .- exit 0, no outputImpact
Unblocks Security Scanning for all nine currently open PRs.
Notes
whose triage labels could be mirrored. Labels applied to this PR directly
reflect its own triage rather than being copied from an issue. The closest
prior art is sec(deps): bump pgx/v5 to v5.9.2 to clear GO-2026-5004 govulncheck advisory #1285 (same shape:
pgx/v5bumped to clearGO-2026-5004).both because neither is reachable from our code, and both pre-date this
change, so they are out of scope here and are worth a separate issue:
GO-2026-5158(go.opentelemetry.io/otel@v1.43.0, fixed inv1.44.0) andGO-2026-5841(klauspost/compress@v1.18.5, fixed inv1.18.7).GO-2026-5932(golang.org/x/crypto@v0.53.0) currently has no fixedversion published.
database is not, so any newly published advisory against a dependency turns
the gate red without a code change. That is the gate working as intended, but
it means a red Security Scanning run on an unrelated PR should be checked
against
mainbefore being blamed on the PR.