{"id":"GHSA-7fqc-p256-7pwj","summary":"Steeltoe's static JWKS cache shared across schemes and never invalidated","details":"### Summary\n\nThe 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.\n\n### Impact\n\nIn multi-scheme deployments, an attacker who controls one identity provider's signing key can forge tokens accepted by other schemes within the same application. For all applications using `TokenKeyResolver`, a signing key removed from the identity provider's JWKS endpoint remains trusted indefinitely.\n\n### Mitigations\n\nIf an immediate upgrade is not possible:\n\n- In multi-scheme deployments, configure only one `JwtBearer` scheme per application when different identity providers are required.\n- Restart the application process after an identity provider signing key rotation to clear stale cached keys.","aliases":["CVE-2026-50202"],"modified":"2026-07-02T20:45:11.927488692Z","published":"2026-07-02T20:31:47Z","database_specific":{"github_reviewed_at":"2026-07-02T20:31:47Z","nvd_published_at":"2026-06-17T23:17:04Z","cwe_ids":["CWE-668"],"severity":"MODERATE","github_reviewed":true},"references":[{"type":"WEB","url":"https://github.com/SteeltoeOSS/security-advisories/security/advisories/GHSA-7fqc-p256-7pwj"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-50202"},{"type":"WEB","url":"https://github.com/SteeltoeOSS/Steeltoe/commit/04db2ace3b806bfe0260bb7d4bda340f241eff48"},{"type":"WEB","url":"https://github.com/SteeltoeOSS/Steeltoe/commit/17b27b8be546ae3f83a2f6e91d45e0c84c5314b7"},{"type":"PACKAGE","url":"https://github.com/SteeltoeOSS/security-advisories"}],"affected":[{"package":{"name":"Steeltoe.Security.Authentication.JwtBearer","ecosystem":"NuGet","purl":"pkg:nuget/Steeltoe.Security.Authentication.JwtBearer"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.2.0"}]}],"versions":["4.0.0","4.0.0-beta1","4.0.0-rc1","4.1.0"],"database_specific":{"last_known_affected_version_range":"\u003c= 4.1.0","source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-7fqc-p256-7pwj/GHSA-7fqc-p256-7pwj.json"}},{"package":{"name":"Steeltoe.Security.Authentication.OpenIdConnect","ecosystem":"NuGet","purl":"pkg:nuget/Steeltoe.Security.Authentication.OpenIdConnect"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.2.0"}]}],"versions":["4.0.0","4.0.0-beta1","4.0.0-rc1","4.1.0"],"database_specific":{"last_known_affected_version_range":"\u003c= 4.1.0","source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-7fqc-p256-7pwj/GHSA-7fqc-p256-7pwj.json"}},{"package":{"name":"Steeltoe.Security.Authentication.CloudFoundryBase","ecosystem":"NuGet","purl":"pkg:nuget/Steeltoe.Security.Authentication.CloudFoundryBase"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.4.0"}]}],"versions":["2.2.0","2.2.0-rc1","2.2.0-rc2","2.3.0","2.3.0-rc1","2.3.0-rc2","2.4.0","2.4.0-rc1","2.4.1","2.4.2","2.4.3","2.4.4","2.5.0","2.5.1","2.5.2","2.5.3","2.5.4","2.5.5","3.0.0","3.0.0-m1","3.0.0-m2","3.0.0-m3","3.0.0-rc1","3.0.1","3.0.2","3.1.0","3.1.0-rc1","3.1.0-rc2","3.1.1","3.1.2","3.1.3","3.2.0","3.2.0-rc1","3.2.1","3.2.2","3.2.3","3.2.4","3.2.5","3.2.6","3.2.7","3.2.8","3.3.0"],"database_specific":{"last_known_affected_version_range":"\u003c= 3.3.0","source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-7fqc-p256-7pwj/GHSA-7fqc-p256-7pwj.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N"}]}