CVE-2026-128065: @grpc/grpc-js: RBAC override configs in VirtualHost and Route resources are not applied

Published Nov 12, 2026
·
Updated

@grpc/grpc-js implements the core functionality of gRPC purely in JavaScript, without a C++ addon. From 1.14.0 through 1.14.1, XdsServer in @grpc/grpc-js-xds can acknowledge Route and VirtualHost resources while failing to apply their RBACPerRoute override configurations. The override parser is not registered under the override message type, override maps are stored under a type URL instead of the configured HTTP filter name, and VirtualHost override maps are not read. When experimental RBAC is enabled and a trusted xDS control plane supplies a broad top-level ALLOW policy with a stricter matching override, affected servers evaluate RPCs under the broad policy and can accept requests that should be denied. This issue is fixed in version 1.14.2.

Other sources

Summary

XdsServer in @grpc/grpc-js-xds does not apply RBACPerRoute overrides from matching Route or VirtualHost resources. When a trusted xDS control plane supplies a broad top-level ALLOW policy and a stricter override, XdsServer ACKs the resources but evaluates the RPC under the top-level policy.

Details

Override parser lookup uses the override message type

parseOverrideFilterConfig() in packages/grpc-js-xds/src/http-filter.ts:225-257 looks up FILTERREGISTRY using the override message type:

type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBACPerRoute Source: https://github.com/grpc/grpc-node/blob/56567d9604b4e45cdca0d2e3c2a60ac227ee659d/packages/grpc-js-xds/src/http-filter.ts#L225-L257

setup() in packages/grpc-js-xds/src/http-filter/rbac-filter.ts:167-173 registers the filter only under the top-level RBAC type:

type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC Source: https://github.com/grpc/grpc-node/blob/56567d9604b4e45cdca0d2e3c2a60ac227ee659d/packages/grpc-js-xds/src/http-filter/rbac-filter.ts#L167-L173

The lookup returns null even though the registered entry contains parseOverrideRbacConfig(), and server.ts silently skips the override.

Override maps are keyed by type URL instead of filter name

overrideConfigMaps in server.ts:99-102 is documented as keyed by HTTP filter name, but server.ts:169-174 stores each map under filterConfig.typeUrl.

Source: https://github.com/grpc/grpc-node/blob/56567d9604b4e45cdca0d2e3c2a60ac227ee659d/packages/grpc-js-xds/src/server.ts#L99-L102

Source: https://github.com/grpc/grpc-node/blob/56567d9604b4e45cdca0d2e3c2a60ac227ee659d/packages/grpc-js-xds/src/server.ts#L169-L174

Route overrides are later looked up by their typedperfilterconfig key, which is the HttpFilter.name. An ordinary key such as rbac therefore misses the stored map.

VirtualHost overrides are not read

handleRouteConfigurationResource() in server.ts:225-249 reads route.typedperfilterconfig but never reads virtualHost.typedperfilterconfig.

Source: https://github.com/grpc/grpc-node/blob/56567d9604b4e45cdca0d2e3c2a60ac227ee659d/packages/grpc-js-xds/src/server.ts#L225-L249

When no override reaches the RBAC interceptor, rbac-filter.ts:125-155 evaluates the broader top-level policy.

Proof of concept

Set: GRPCXDSEXPERIMENTALRBAC=true

Run XdsServer with a protected unary handler.

Have the ADS control plane deliver a Listener containing an RBAC HTTP filter named rbac with a top-level ALLOW-any policy:

name: rbac typedconfig: "@type": type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBAC rules: action: ALLOW policies: allow-any: principals: [{ any: true }] permissions: [{ any: true }]

Deliver a matching non-forwarding route with this override:

typedperfilterconfig: rbac: "@type": type.googleapis.com/envoy.extensions.filters.http.rbac.v3.RBACPerRoute rbac: rules: action: DENY policies: deny-any: principals: [{ any: true }] permissions: [{ any: true }]

Invoke the protected unary method without credentials.

Expected: The route-specific DENY policy rejects the RPC before the protected handler runs.

Observed: XdsServer ACKs the resources, retains the top-level ALLOW policy, and runs the protected handler.

Listener and RouteConfiguration: ACKED gRPC status: OK handler invocations: 1 response: PROTECTEDSECRETRECORDRBACOVERRIDE

Impact

Users of @grpc/grpc-js-xds who are using RBAC-based authentication with override configurations may unintentionally accept some requests that should be rejected.

— GitHub

Affected Software

1 affected componentFixes available
npm/@grpc/grpc-js-xds>=1.14.0<1.14.2
1.14.2

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade npm/@grpc/grpc-js-xds to a version that resolves this vulnerability.

    Fixed in 1.14.2
  2. Upgrade

    Upgrade @grpc/grpc-js-xds to a version that resolves this vulnerability.

    Fixed in 1.14.2

Event History

Nov 12, 2026
CVE Published
via MITRE·10:45 PM
Data Sourced
via MITRE·10:45 PM
DescriptionWeakness
Advisory Published
via GitHub·10:55 PM
Data Sourced
via GitHub·10:55 PM
DescriptionWeaknessAffected Software
Data Sourced
via OSV·10:55 PM
DescriptionSeverityWeaknessAffected Software
Nov 13, 2026
Data Sourced
via NVD·12:20 AM
DescriptionSeverityWeakness

Frequently Asked Questions

1

Which deployments are most likely affected?

Deployments using the npm package @grpc/grpc-js-xds and relying on RBAC override configuration in xDS VirtualHost or Route resources are affected by this issue.

2

What version addresses the issue?

The referenced release is @grpc/grpc-js-xds 1.14.2. Upgrade to that release or a later release if available through your normal dependency management process.

3

How can I assess whether this affects my authorization policy?

Review your xDS configuration for RBAC overrides defined on VirtualHost or Route resources. If access control depends on those overrides, verify that requests are being authorized according to the intended route- or virtual-host-specific policy.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203