MEDIUMCVSS v3.1 4.8Vulnerability

CVE-2026-126367

### Summary The StringMatcher/PathMatcher for `safe_regex` builds its RE2 as `^${regex}$` with no surrounding group. Because alternation has the lowest precedence, a pattern `"a|b|c"` compiles to `/^a|b|c$/` -- "starts with a" OR "contains b" OR "ends with c" instead of a full match of the whole value. Configurations with `safe_regex` matchers that use a regex alternation (a natural way to list methods or service identities) therefore apply partial string matches. This impacts route selection, xDS credentials, and RBAC. ### Details `src/matcher.ts`: `SafeRegexValueMatcher` and `PathSafeRegexValueMatcher` both do ```ts this.targetRegexImpl = new RE2(`^${targetRegex}$`, 'u'); ``` and `apply()` returns `targetRegexImpl.test(value)`. With a top-level alternation the anchors bind only to the first/last branch. https://github.com/grpc/grpc-node/blob/e742b11bd8039f3dbea4cd29afdf5d95a8ba6b92/packages/grpc-js-xds/src/matcher.ts#L59 https://github.com/grpc/grpc-node/blob/e742b11bd8039f3dbea4cd29afdf5d95a8ba6b92/packages/grpc-js-xds/src/matcher.ts#L232 `src/route.ts` (`getPredicateForStringMatcher` / `getPredicateForHeaderMatcher`) builds these for every `safe_regex` `StringMatcher`/`HeaderMatcher`, and src/rbac.ts uses them for RBAC `url_path` `permissions`/`principals`, `authenticated.principal_name` (mTLS SAN/CN), `requested_server_name` and `header rules`. So an ALLOW rule written with an alternation grants access to method names, certificate identities or header values that extend an intended one. DENY policies only become broader (fail-safe). https://github.com/grpc/grpc-node/blob/e742b11bd8039f3dbea4cd29afdf5d95a8ba6b92/packages/grpc-js-xds/src/route.ts#L28 https://github.com/grpc/grpc-node/blob/e742b11bd8039f3dbea4cd29afdf5d95a8ba6b92/packages/grpc-js-xds/src/route.ts#L47 ### Proof of concept In a scratch directory: ``` npm init -y npm i @grpc/[email protected] @grpc/grpc-js node poc.cjs ``` `poc.cjs` calls the exported RBAC engine directly (the functions

Properties

Severity
medium
Summary
@grpc/grpc-js: safe_regex incorrectly applies partial string matching for patterns with alternation
Nvd fetched at
2026-11-14T00:40:25.638091+00:00
Epss score
0.00158
Cvss score
4.8
Cvss severity
MEDIUM
Retrieved at
2026-11-14T00:51:03+00:00
Ghsa published
2026-11-12T23:21:57Z
Source url
https://github.com/advisories/GHSA-r7hq-q2xm-6c5m
Ghsa updated
2026-11-12T23:21:58Z
Ghsa id
GHSA-r7hq-q2xm-6c5m
Last source
FIRST EPSS
Score
4.8
Cvss version
3.1
Cve id
CVE-2026-126367
Cvss vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N
First seen by Signal
2026-11-13T00:03:27+00:00
Name
CVE-2026-126367
Is ghsa only
false
Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N

Related Entities (4)

HAS_WEAKNESS (2)

AFFECTS (1)

VULNERABLE_TO (1)

Related research

Explore deeper with Ninja Signal's threat intelligence graph

CVE-2026-126367 (CVSS v3.1 4.8) — Ninja Signal Threat Intelligence | Ninja Signal