Skip to content

chore(deps): update module google.golang.org/grpc to v1.82.1 [security] (release-v1.40) - autoclosed - #5092

Closed
marvin-tigera wants to merge 1 commit into
release-v1.40from
renovate/release-v1.40-go-google.golang.org-grpc-vulnerability
Closed

chore(deps): update module google.golang.org/grpc to v1.82.1 [security] (release-v1.40) - autoclosed#5092
marvin-tigera wants to merge 1 commit into
release-v1.40from
renovate/release-v1.40-go-google.golang.org-grpc-vulnerability

Conversation

@marvin-tigera

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
google.golang.org/grpc v1.80.0v1.82.1 age confidence

gRPC-Go: xDS RBAC and HTTP/2 Vulnerabilities

GHSA-hrxh-6v49-42gf

More information

Details

Multiple security vulnerabilities have been identified and addressed in grpc-go affecting the xDS RBAC authorization engine (internal/xds/rbac) and the HTTP/2 transport server implementation (internal/transport). These vulnerabilities could result in:

  • Authorization Bypass (Fail-Open) when translating xDS RBAC policies containing Metadata or RequestedServerName fields.
  • Denial of Service (High CPU Consumption) due to an HTTP/2 Rapid Reset mitigation bypass during client-initiated stream resets.
  • Denial of Service (Server Panic) when parsing crafted xDS RBAC policies containing NOT rules around unsupported fields.
Impact

What kind of vulnerability is it? Who is impacted?

xDS RBAC Authorization Bypass via Metadata & RequestedServerName matchers
  • Affected Component: xDS RBAC
  • Impact: When building policy matchers for gRPC RBAC from xDS configurations, unsupported permission and principal rules (specifically Metadata and RequestedServerName) were silently ignored and treated as no-ops.
    • If an authorization policy relied purely on these matchers for access control, treating those rules as no-ops effectively removed the restrictions.
  • If these unsupported rules were nested inside logical NOT rules (Permission_NotRule / Principal_NotId) or multi-condition OR/AND rules, silently dropping them changed the boolean logic flow of the authorization engine.

As a result, policy evaluation decisions could fail open, allowing unauthorized clients to access protected gRPC services or resources.

HTTP/2 Rapid Reset Mitigation Bypass / Denial of Service via Stream Aborts
  • Affected Component: HTTP/2 transport
  • Impact: Earlier mitigations in grpc-go for HTTP/2 Rapid Reset only applied threshold checks to items that directly resulted in control frames being written back to the wire, such as SETTINGS ACKs or server-initiated RST_STREAMs.

When a client initiated a rapid flood of stream creation (HEADERS) immediately followed by stream termination RST_STREAM, items queued up in the control buffer without counting against the transport response frame threshold. An attacker can repeatedly trigger this flood sequence to bypass reader blocking, resulting in high CPU usage, and Denial of Service (DoS).

Denial of Service (Panic) in xDS RBAC Engine via Unsupported Fields inside NOT Rules
  • Affected Component: xDS RBAC
  • Impact: The xDS RBAC policy translators recursively generate matchers for nested rules. When a NOT rule wrapped an unsupported or unhandled field (such as SourcedMetadata), the recursive step returned an empty matcher. This could result in a runtime panic when the RBAC engine attempts to authorize an incoming request.

An attacker or misconfigured/malicious xDS management server delivering an LDS/RDS update containing a NOT rule around an unhandled field causes the gRPC server process to crash immediately (CWE-248 / Denial of Service).

Patches

Has the problem been patched? What versions should users upgrade to?

All three issues have been fixed in master and will be released in 1.82.1 shortly.

Workarounds

Is there a way for users to fix or remediate the vulnerability without upgrading?

If upgrading grpc-go immediately is not possible, apply the following workarounds based on your deployment architecture:

  • For xDS RBAC Vulnerabilities & Panics: Ensure that upstream xDS management servers do not push RBAC policies containing Metadata, RequestedServerName, or NOT rules wrapping unsupported fields (such as SourcedMetadata) to grpc-go servers.
  • For HTTP/2 Rapid Reset DOS: Configure upstream reverse proxies or load balancers (such as Envoy) with strict HTTP/2 max_concurrent_streams limits and active rate limiting on RST_STREAM frequency per connection.
Severity
Vulnerability Qualitative Severity Approximate CVSS v3.1 Score Primary Impact
xDS RBAC Authorization Bypass High 8.2 Unauthorized Access / Fail-Open
HTTP/2 Rapid Reset DOS Bypass High 7.5 High CPU Consumption / Denial of Service
xDS RBAC Engine Server Panic Medium 5.9 Process Crash / Denial of Service

Severity

  • CVSS Score: 8.8 / 10 (High)
  • Vector String: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


Release Notes

grpc/grpc-go (google.golang.org/grpc)

v1.82.1: Release 1.82.1

Compare Source

Security

  • server: Stop reading from the connection when flooded by HTTP/2 frames. The default value for this limit is 100 frames, excluding DATA and HEADERS, and may be changed by setting environment variable GRPC_GO_EXPERIMENTAL_CONTROL_BUFFER_THROTTLE_LIMIT.
  • xds/rbac: Support Metadata and RequestedServerName permissions matcher fields. If present in a DENY rule, previously these would be ignored and fail-open.
  • xds/rbac: Fix panic when parsing unsupported fields in NotRule/NotId permissions.
  • xds/rbac: Support the deprecated source_ip principal identifier by treating it as equivalent to direct_remote_ip.

v1.82.0: Release 1.82.0

Compare Source

Behavior Changes

  • server: Remove support for GRPC_GO_EXPERIMENTAL_DISABLE_STRICT_PATH_CHECKING environment varibale. Strict incoming RPC path validation (which has been the default since v1.79.3) can no longer be disabled. (#​9112)
  • transport: Add environment variable to change the default max header list size from 16MB to 8KB. This may be enabled by setting GRPC_GO_EXPERIMENTAL_ENABLE_8KB_DEFAULT_HEADER_LIST_SIZE=true. This will be enabled by default in a subsequent release. (#​9019)
  • balancer: Load Balancing policy registry is now case-sensitive. Set GRPC_GO_EXPERIMENTAL_CASE_SENSITIVE_BALANCER_REGISTRIES=false (and file an issue) to revert to case-insensitive behavior. (#​9017)

New Features

  • experimental/stats: Expose a new API, NewContextWithLabelCallback, to register a callback that is invoked when telemetry labels are added. (#​8877)
  • client: Return a portion of the response body in the error message, when the client receives an unexpected non-gRPC HTTP response, to make debugging easier. (#​8929)
  • server: Add environment variable GRPC_GO_SERVER_GOROUTINE_LABELS that controls setting runtime/pprof.Labels on goroutines spawned by the server. Set GRPC_GO_SERVER_GOROUTINE_LABELS=grpc.method=true to add the grpc.method label on goroutines spawned to handle incoming requests. (#​9082)

Bug Fixes

  • xds/server: Fix a memory leak of HTTP filter instances occurring when route configurations are updated in-place during a Route Discovery Service (RDS) update. (#​9138)
  • grpc: In the deprecated gzip Compressor (used via the deprecated WithCompressor dial option), enforce the MaxRecvMsgSize limit on the decompressed message buffer, preventing excessive memory allocation from highly compressed payloads. (#​9114)
  • stats/opentelemetry: Record retry attempts, grpc.previous-rpc-attempts, at the call level and not the attempt level. (#​8923)
  • encoding: Ensure Close() is always called on readers returned from Compressor.Decompress if possible. (#​9135)
  • channelz: Fix the LastMessageSentTimestamp and LastMessageReceivedTimestamp fields in SocketMetrics to ensure they contain correct timestamp values. (#​9109)

v1.81.1: Release 1.81.1

Compare Source

Security

  • xds/rbac: Fix a potential authorization bypass caused by incorrectly falling through URI/DNS SANs to Subject Distinguished Name (DN) when matching the authenticated principal name. With this fix, only the first non-empty identity source will be used, as per gRFC A41. (#​9111)

Bug Fixes

  • otel: Segregate client and server RPC information used for metrics and traces, to avoid one overwriting the other. (#​9081)

v1.81.0: Release 1.81.0

Compare Source

Behavior Changes

  • balancer/rls: Switch gauge metrics to asynchronous emission (once per collection cycle) to reduce telemetry noise and align with other gRPC language implementations. (#​8808)

Dependencies

  • Minimum supported Go version is now 1.25. (#​8969)

Bug Fixes

  • xds: Use the leaf cluster's security config for the TLS handshake instead of the aggregate cluster's config. (#​8956)
  • transport: Send a RST_STREAM when receiving an END_STREAM when the stream is not already half-closed. (#​8832)
  • xds: Fix ADS resource name validation to prevent a panic. (#​8970)

New Features

  • grpc/stats: Add support for custom labels in per-call metrics (gRFC A108). (#​9008)
  • xds: Add support for Server Name Indication (SNI) and SAN validation (gRFC A101). Disabled by default. To enable, set GRPC_EXPERIMENTAL_XDS_SNI=true environment variable. (#​9016)
  • xds: Add support to control which fields get propagated from ORCA backend metric reports to LRS load reports (gRFC A85). Disabled by default. To enable, set GRPC_EXPERIMENTAL_XDS_ORCA_LRS_PROPAGATION=true. (#​9005)
  • xds: Add metrics to track xDS client connectivity and cached resource state (gRFC A78). (#​8807)
  • stats/otel: Enhance grpc.subchannel.disconnections metric by adding disconnection reason to the grpc.disconnect_error label (gRFC A94). This provides granular insights into why subchannels are closing. (#​8973)
  • mem: Add mem.Buffer.Slice() API to slice the buffer like a slice. (#​8977)

Performance Improvements

  • alts: Pool read buffers to lower memory utilization when sockets are unreadable. (#​8964)
  • transport: Pool HTTP/2 framer read buffers to reduce idle memory consumption. Currently limited to Linux for ALTS and non-encrypted transports (TCP, Unix). To disable, set GRPC_GO_EXPERIMENTAL_HTTP_FRAMER_READ_BUFFER_POOLING=false and report any issues. (#​9032)

  • If you want to rebase/retry this PR, check this box

@marvin-tigera
marvin-tigera requested a review from a team as a code owner July 23, 2026 01:02
@marvin-tigera marvin-tigera added dependencies Pull requests that update a dependency file docs-not-required release-note-not-required labels Jul 23, 2026
@marvin-tigera

Copy link
Copy Markdown
Contributor Author

ℹ️ Artifact update notice

File name: go.mod

In order to perform the update(s) described in the table above, Renovate ran the go get command, which resulted in the following additional change(s):

  • 1 additional dependency was updated

Details:

Package Change
google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 -> v0.0.0-20260414002931-afd174a4e478

@marvin-tigera marvin-tigera added this to the v1.40.14 milestone Jul 23, 2026
@marvin-tigera marvin-tigera changed the title chore(deps): update module google.golang.org/grpc to v1.82.1 [security] (release-v1.40) chore(deps): update module google.golang.org/grpc to v1.82.1 [security] (release-v1.40) - autoclosed Jul 24, 2026
@marvin-tigera
marvin-tigera deleted the renovate/release-v1.40-go-google.golang.org-grpc-vulnerability branch July 24, 2026 01:03
pasanw added a commit to pasanw/operator that referenced this pull request Aug 7, 2026
Mirrors the master/release-v1.43 fix (tigera#5100 / tigera#5101) for the release-v1.40
line. All three deps are indirect; no operator code changes.

  - helm.sh/helm/v3 v3.20.2 -> v3.21.3: the operator never imports
    github.com/containerd/containerd itself; it only pulled it in
    transitively through helm. Helm v3.21.3 drops that dependency, so the
    vulnerable containerd code stops shipping in the operator binary --
    clearing CVE-2026-50195 (crit 9.9), CVE-2026-53492 (crit 9.6) and
    CVE-2026-53489 (high), none of which has a fix in the containerd 1.7.x
    line. This bump pulls k8s.io/* v0.35 -> v0.36 with it (same shape as a
    prior k8s bump on this branch).
  - sigs.k8s.io/controller-runtime v0.23.3 -> v0.24.1: required for k8s
    v0.36 compatibility (matches release-v1.43); no operator code changes.
  - oras.land/oras-go/v2 v2.6.0 -> v2.6.2: clears CVE-2026-50151 and
    CVE-2026-50163 (both confirmed fixed in v2.6.2 by OSV / the GitHub
    Advisory DB). An earlier attempt stopped at v2.6.1, which cleared only
    CVE-2026-50151.
  - google.golang.org/grpc -> v1.82.1: clears GHSA-hrxh-6v49-42gf /
    GO-2026-6061.

The oras and grpc requires carry advisory-naming comments so a future
re-tidy cannot silently revert the pins.

Supersedes the autoclosed Renovate security PRs tigera#5092 (grpc) and tigera#5011
(oras v2.6.1). Note: Renovate keys vulnerability alerts off the default
branch, so release-branch security PRs autoclose when master is fixed --
this branch's containerd exposure would otherwise be invisible to
automation post-merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
pasanw added a commit to pasanw/operator that referenced this pull request Aug 7, 2026
Indirect dependency bumps only; no operator code changes, no k8s change.

  - oras.land/oras-go/v2 v2.6.0 -> v2.6.2: clears CVE-2026-50151 and
    CVE-2026-50163 (oras hardlink path traversal, high 7.1). Both are
    recorded as fixed = 2.6.2 by OSV and the GitHub Advisory DB, and by the
    master / release-v1.43 fixes (tigera#5100 / tigera#5101). (An earlier version of
    this PR stopped at v2.6.1 and wrongly stated v2.6.2 was not the fix.)
  - google.golang.org/grpc -> v1.82.1: clears GHSA-hrxh-6v49-42gf /
    GO-2026-6061.

Both requires carry advisory-naming comments so a future go mod tidy
cannot silently revert the pins.

NOT fixed here, deliberately: the containerd advisories CVE-2026-50195
(crit 9.9), CVE-2026-53492 (crit 9.6) and CVE-2026-53489 (high). containerd
1.7.33 has no fixed version; the only remediation is dropping the (purely
transitive, via Helm) dependency by bumping Helm to v3.21.3 -- but every
containerd-free Helm is already on k8s v0.36, and this branch is kept on
k8s v0.35 to stay aligned with the calico-private core (also on k8s 1.35),
avoiding an operator/core minor-version divergence. These three are VEXed
on this line; master and release-v1.43, already on k8s 1.36, take the Helm
route (tigera#5100 / tigera#5101).

Supersedes the autoclosed Renovate security PRs tigera#5092 (grpc) and tigera#5011
(oras v2.6.1). Renovate keys vulnerability alerts off the default branch,
so release-branch security PRs autoclose when master is fixed -- this
branch's exposure would otherwise be invisible to automation post-merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant