Severity by source
AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N
Multi-scheme deployment plus kid collision required (AC:H); attacker needs only a valid token from one co-configured IdP (PR:L, not PR:H); no availability impact applies.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3DescriptionCVE.org
Steeltoe is an open source project that provides a collection of libraries that helps users build cloud-native applications. In Steeltoe.Security.Authentication.CloudFoundryBase prior to version 3.4.0, Steeltoe.Security.Authentication.JwtBearer prior to version 4.2.0, and Steeltoe.Security.Authentication.OpenIdConnect prior to version 4.2.0, the JWT signing key cache in TokenKeyResolver uses kid as the sole cache key without namespacing by authority. In applications with multiple JwtBearer schemes pointing to different identity providers, a key fetched for one scheme can satisfy token validation for another. Additionally, cached keys have no expiration, so rotated or revoked keys remain trusted until the application process restarts. Steeltoe.Security.Authentication.CloudFoundryBase version 3.4.0, Steeltoe.Security.Authentication.JwtBearer version 4.2.0, and Steeltoe.Security.Authentication.OpenIdConnect version 4.2.0 patch the issue. If an immediate upgrade is not possible: In multi-scheme deployments, configure only one JwtBearer scheme per application when different identity providers are required; and/or restart the application process after an identity provider signing key rotation to clear stale cached keys.
AnalysisAI
Cross-authority JWT signing key confusion in Steeltoe authentication libraries allows tokens issued by one identity provider to be accepted by application schemes configured for a different authority. Affected are CloudFoundryBase prior to 3.4.0, JwtBearer prior to 4.2.0, and OpenIdConnect prior to 4.2.0 when deployed in multi-scheme configurations. No public exploit has been identified at time of analysis; vendor patches are available and no CISA KEV listing exists.
Technical ContextAI
The vulnerability resides in the TokenKeyResolver class shared across the three affected Steeltoe NuGet packages (CPE: cpe:2.3:a:steeltoeoss:steeltoe.security.authentication.cloudfoundrybase, cpe:2.3:a:steeltoeoss:steeltoe.security.authentication.jwtbearer, cpe:2.3:a:steeltoeoss:steeltoe.security.authentication.openidconnect). The root cause maps to CWE-668 (Exposure of Resource to Wrong Sphere): the JWT signing key cache used a ConcurrentDictionary<string, SecurityKey> indexed solely by the kid (Key ID) JWT header value, with no authority URL included in the cache key and no expiration policy. In ASP.NET Core applications registering multiple JwtBearer schemes pointing to distinct identity providers, this shared namespace means a resolved key fetched for authority A will satisfy cache lookups initiated by scheme B if both IdPs happen to use the same kid string. The commit diff at 04db2ace confirms the fix: composite cache keys are now formed by combining the authority URI with the kid (via GetCacheKey(tokenKeysUri, keyId)), the unbounded ConcurrentDictionary is replaced with MemoryCache carrying a 12-hour TTL for found keys and 30-60 second TTL for not-found entries, and the resolver is registered as a singleton shared across all schemes rather than being instantiated per-scheme.
RemediationAI
Upgrade to the patched releases: Steeltoe.Security.Authentication.CloudFoundryBase 3.4.0, Steeltoe.Security.Authentication.JwtBearer 4.2.0, and Steeltoe.Security.Authentication.OpenIdConnect 4.2.0. These versions introduce authority-namespaced cache keys and bounded TTL expiration, eliminating both the cross-authority confusion and the stale-key retention issues. Fix commits are available at https://github.com/SteeltoeOSS/Steeltoe/commit/04db2ace3b806bfe0260bb7d4bda340f241eff48 and https://github.com/SteeltoeOSS/Steeltoe/commit/17b27b8be546ae3f83a2f6e91d45e0c84c5314b7. If immediate upgrade is not possible, two compensating controls apply: (1) Restrict each application instance to a single JwtBearer scheme - this eliminates the cross-authority cache collision vector but requires architectural changes in multi-IdP deployments and may not be feasible without application refactoring; (2) Restart the application process immediately after any identity provider signing key rotation - this flushes the unbounded ConcurrentDictionary cache, preventing post-rotation stale key acceptance, but is purely reactive and requires operational discipline to execute consistently. Neither workaround addresses both attack vectors simultaneously.
Same weakness CWE-668 – Exposure of Resource to Wrong Sphere
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-37817
GHSA-7fqc-p256-7pwj