Skip to content

CVE regression matrix

When a CVE is published against another OIDC / OAuth / JOSE implementation, the question for this library is "could the same defect reach us, and if not, why not?". The honest answer needs more than a code review — it needs a test that fails the build if a future refactor reintroduces the bypass.

This page is the public ledger of those tests. Every CVE listed here has at least one unit / fuzz test that exercises the surface and pins the rejection. The test references are stable — if a row points at a file or test name, it lives in the repository.

How a row gets into the matrix
A CVE filed against another implementation is reduced to its defect class. That class is then checked for reachability in this codebase: where it is reachable, a refusal test pins the behaviour; where it is not, the structure already excludes it.An external CVEfiled against anotherimplementation entirelyIts defect classalg confusion, kid traversal, …the shape, not the instanceIs it reachable here?asked of the structure of thiscodebase, not of its version numberyesA refusal testpinned, so the refusal cannot regressnoExcluded by constructionthere is nothing here to regress
A row is never "we are not affected". It is either a test that fails if the defect is ever reintroduced, or a statement about why the code has no place for it — and the second kind is re-checked when that code changes.

Reading the table

  • CVE — the original disclosure, against another implementation. We do not maintain CVE entries against this library; the field tells you what class of defect the test is meant to keep out.
  • Class — the underlying defect (alg confusion, redirect-uri matching, PKCE downgrade, ...).
  • RFC anchor — the spec section the test pins behaviour against.
  • Test — the regression test that fails if the surface regresses.

JOSE / JWT verification

CVEClassRFC anchorTest
CVE-2015-9235 (jsonwebtoken)alg=none acceptedRFC 8725 §3.1internal/jose.FuzzJOSEParse (alg=none seed)
internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
CVE-2016-10555 (jwt-simple)alg=HS256 accepted, treats public key as HMAC secretRFC 8725 §2.1internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
CVE-2015-2951 (jose4j)alg=none acceptedRFC 8725 §3.1internal/jose.FuzzJOSEParse
CVE-2024-54150 (cjwt)algorithm confusionRFC 8725 §2.1internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
CVE-2026-22817 / CVE-2026-27804 / CVE-2026-23552 (Hono JWT 2026 cluster)case-variant alg=NONE bypass of deny-listRFC 8725 §3.1internal/jose.TestParseAlgorithm_CaseVariantsRejected
internal/jose.FuzzJOSEParse (case-variant seeds)
CVE-2026-33322 (MinIO OIDC)algorithm confusionRFC 8725 §2.1internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
CVE-2026-48526 (PyJWT)asymmetric public JWK accepted as an HMAC verification secretRFC 8725 §2.1internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
CVE-2018-0114 (Cisco / node-jose)trusted jwk header — verifier used key from JWS itselfRFC 8725 §3.1–3.5internal/jose.TestParseSigned_HeaderInjection_NeverFetches
internal/jose.FuzzJOSEParse (jku seed)
CVE-2018-1000531 (inversoft prime-jwt)alg header downgrade + trusted jwkRFC 8725 §3.1internal/jose.TestParseSigned_HeaderInjection_NeverFetches
CVE-2017-11424 (python-jose-style)jku resolved from headerRFC 8725 §3.1internal/jose.TestParseSigned_HeaderInjection_NeverFetches
CVE-2019-7644 (Auth0 jsonwebtoken-koa)trusted jwk headerRFC 8725 §3.1internal/jose.TestParseSigned_HeaderInjection_NeverFetches
CVE-2026-34240 / GHSA-vm9r-h74p-hg97 (Dart jose)trusted jwk header — verifier treated attacker-supplied key material as a candidate verification keyRFC 8725 §3.1–3.5internal/jose.TestParseSigned_HeaderInjection_NeverFetches
CVE-2025-59420 (Authlib)crit extension list ignoredRFC 7515 §4.1.11 / RFC 8725 §3.5internal/jose.TestParseSigned_CritHeaderRejectedAtVerify
CVE-2026-32597 (PyJWT)same crit-ignored defectRFC 8725 §3.5internal/jose.TestParseSigned_CritHeaderRejectedAtVerify
CVE-2026-28498 (Authlib)hash-binding verifier fail-opened when handed an unknown / unsupported algRFC 8725 §3.1internal/jose.TestParseSigned_RejectsUnsupportedRegisteredAlg_NoFailOpen
CVE-2026-29000 (pac4j-jwt)JWE decryption was treated as authentication; an unsigned / plain inner JWT was accepted after decryptRFC 8725 §3.1 / RFC 9101 §5.2internal/jar.TestVerify_RejectsJWEWrappedUnsignedJWT
CVE-2024-29371 (jose4j JWE decompression bomb)resource exhaustion via crafted JWERFC 8725 §3.11internal/jose.FuzzJOSEParse (oversize seed)
internal/parendpoint.FuzzPARFormBody
internal/introspectendpoint.FuzzIntrospectFormBody
internal/revokeendpoint.FuzzRevokeFormBody
CVE-2026-27962 (Authlib)verifier trusted an attacker-supplied jwk headerRFC 7515 §4.1.3 / RFC 8725 §3.1internal/jose.TestParseSigned_HeaderInjection_NeverFetches
internal/clientauth.TestPrivateKeyJWTVerifier_KeySelectionIgnoresTheAssertionsOwnHeader
CVE-2026-48525 / CVE-2025-61920 (PyJWT / Authlib)oversized JOSE segment caused resource exhaustion before rejectionRFC 8725 §3.11test/scenarios.TestEndpoints_OversizedJWSIsRefusedBeforeItIsDecoded

Authorize / redirect_uri

CVEClassRFC anchorTest
CVE-2024-10318 (NGINX OIDC reference)front-channel id_token issued without nonce binding → session fixationOIDC Core §15.5.2 / RFC 9700 §2.1.2internal/authorize.TestRequest_Validate_RejectsImplicitAndHybridResponseTypes (response_type=code only)
internal/backchannel.TestSignLogoutToken_EmitsRequiredClaims (logout_token typ discrimination)
CVE-2024-8883 (Keycloak)wildcard / suffix bypass of an earlier redirect_uri patchRFC 6749 §3.1.2.3 / RFC 9700 §4.1internal/authorize.TestRequest_Validate_RedirectURIAttackVariants
CVE-2020-15234 (ory/fosite)case-variant redirect_uri matched a case-different registrationRFC 6749 §3.1.2.3internal/authorize.TestRequest_Validate_RedirectURIAttackVariants
GHSA-rfq3-w54c-f9q5 (ory/fosite)loopback redirect rule allowed host / query override; fix narrows runtime variation to the port only — exact-string match here is even stricterRFC 6749 §3.1.2.3 / RFC 9700 §4.1internal/authorize.TestRequest_Validate_RedirectURIAttackVariants
CVE-2026-7571 (Keycloak)disabled implicit-flow control bypass; front-channel access-token disclosure via a forged client stateRFC 9700 §2.1.2internal/authorize.TestRequest_Validate_RejectsImplicitAndHybridResponseTypes
CVE-2026-3872 (Keycloak)wildcard redirect_uri path traversal using ..;/RFC 6749 §3.1.2.3 / RFC 9700 §4.1internal/authorize.TestRequest_Validate_RedirectURIAttackVariants
CVE-2026-7504 (Keycloak)wildcard redirect_uri parser confusion through multiple @ bytes in the authority / userinfo segmentRFC 6749 §3.1.2.3 / RFC 9700 §4.1internal/authorize.TestRequest_Validate_RedirectURIAttackVariants
CVE-2026-9689 (Keycloak)HTTP parameter pollution: duplicated OIDC authorization request parameters were reflected into the authorization response as duplicated response parametersRFC 6749 §3.1 / RFC 9700 §4.1internal/authorize.TestParseValues_DuplicateParameter
CVE-2026-44681 (Authlib)malformed authorization request redirected to an attacker-chosen, unvalidated redirect_uri instead of returning a first-party errorRFC 6749 §3.1.2.3 / RFC 9700 §4.1internal/authorizeendpoint.TestAuthorize_RejectsBadRedirectURIWithJSON
CVE-2026-32235 (Backstage auth-backend)DCR redirect-URI allow-list bypassRFC 6749 §3.1.2.3 / RFC 9700 §4.1internal/registrationendpoint.TestDCR_RegisteredRedirectURIIsMatchedByteExactly
internal/registrationendpoint.TestDCR_RejectsRedirectURIShapesThatBlurTheMatch

PKCE / code exchange

CVEClassRFC anchorTest
CVE-2024-23647 (authentik ≤2023.10.6, CVSS 6.1)/token accepted code_verifier on codes minted without a code_challenge — PKCE downgrade. The library also refuses non-PKCE authorization-code issuance to public / native clients at /authorize; the token-side guard remains defense in depthRFC 9700 §4.8 / RFC 7636 §4.6internal/authorize.TestRequest_Validate_PublicClientAlwaysRequiresPKCE
test/scenarios.TestScenario_PKCE_007_PublicClientCodeRequiresPKCE
internal/grants/authcode.TestExchange_NoPKCE_RejectsSmuggledVerifier
CVE-2025-4144 (Cloudflare workers-oauth-provider <0.0.5, CVSS 8.1)same downgrade variant in a different ecosystem; public / native clients are now blocked before a non-PKCE code can be mintedRFC 9700 §4.8internal/authorize.TestRequest_Validate_PublicClientAlwaysRequiresPKCE
test/scenarios.TestScenario_PKCE_007_PublicClientCodeRequiresPKCE
internal/grants/authcode.TestExchange_NoPKCE_RejectsSmuggledVerifier

Authorization code interception (cross-client retrieval)

CVEClassRFC anchorTest
GHSA-vh7g-p26c-j2cw (dexidp/dex, 2024)back-channel ID-token retrieval after authorization-code interception — redeeming the code under a different client_id returned tokens minted for the victim. Structural mitigation: the (code, client_id, redirect_uri[, code_verifier]) tuple must match at exchangeRFC 6749 §4.1.3 / OIDC Core §3.1.3.4internal/grants/authcode.TestExchange_RejectsClientMismatch
CVE-2026-4282 (Keycloak)authorization-code forgery through a shared single-use-object namespaceRFC 6749 §4.1.3op/store/contract.namespaceDisjoint
op/store/contract.namespaceConsumeIsScoped

Client authentication / private_key_jwt

CVEClassRFC anchorTest
CVE-2025-27370 (OIDF coordinated, OIDC)private_key_jwt aud confusion: malicious AS could relay a key reused across ASs and impersonate the clientRFC 7523bis / FAPI 2.0 §5.2.2internal/clientauth.TestPrivateKeyJWTVerifier_AudIssuer_AcceptedViaAuxAudiences
CVE-2025-27371 (IETF coordinated, OAuth 2.0)same defect, OAuth profile lineageRFC 7523bisinternal/clientauth.TestPrivateKeyJWTVerifier_AudIssuer_AcceptedViaAuxAudiences
CVE-2020-15222 (ory/fosite < 0.31.0, GHSA-mh3m-8c74-74xh)private_key_jwt jti uniqueness not enforced — assertion replayRFC 7523 §3 / CWE-345internal/clientauth.TestPrivateKeyJWTVerifier_JTIReplay_Rejected
GHSA-v3q9-2p3m-7g43 (ory/fosite, 2020 cluster)same jti-replay defect class re-disclosed under a separate GHSA — structural mitigation is identical (per-jti single-use within the assertion's exp window)RFC 7523 §3 / CWE-345internal/clientauth.TestPrivateKeyJWTVerifier_JTIReplay_Rejected
CVE-2026-1180 (Keycloak)jwks_uri SSRF during dynamic-client private_key_jwt key resolutionRFC 7591 §2 / RFC 7523 §3internal/securefetch.TestPolicy_SSRFContract
CVE-2024-53861 (PyJWT)issuer comparison accepted a prefix rather than a whole-string matchRFC 7523 §3internal/clientauth.TestPrivateKeyJWTVerifier_IssuerMustMatchWholly
CVE-2026-11800 (Keycloak)client assertion key selection or algorithm policy was steered by JOSE headersRFC 8725 §3.1internal/clientauth.TestPrivateKeyJWTVerifier_KeySelectionIgnoresTheAssertionsOwnHeader
internal/clientauth.TestPrivateKeyJWTVerifier_RejectsAlgOutsideClientPin
CVE-2026-48523 (PyJWT)a registered JWK widened the verifier algorithm policyRFC 8725 §3.1internal/clientauth.TestPrivateKeyJWTVerifier_RegisteredKeyCannotWidenTheAlgorithmPolicy
CVE-2026-22746 (Spring Security)timing difference on unknown client identifiers allowed account enumerationCWE-208internal/clientauth.TestVerifyClient_PrivateKeyJWT_UnknownClient_DummyVerifyShim
internal/clientauth.TestPrivateKeyJWTVerifier_NoKeysRunsTimingShim

Remote JWKS and fetch safety

CVEClassRFC anchorTest
CVE-2026-48522 (PyJWKClient)unrestricted jwks_uri scheme enabled local or non-HTTP resource fetchesRFC 7591 §2internal/registrationendpoint.TestDCR_ClientMetadataIsTreatedAsAttackerInput
internal/jar.TestFetcher_JWKSURISchemeIsConstrainedToTheNetwork
CVE-2026-48524 (PyJWKClient)unknown kid values forced unbounded JWKS refetchesRFC 8725 §3.10internal/jar.TestFetchFresh_BypassesFreshCacheThenThrottles
internal/jar.TestJWKSCache_SingleflightCollapsesConcurrentFetches

Token introspection

Introspection is available only to confidential callers: a public client or a client using token_endpoint_auth_method=none receives 401 invalid_client before token resolution. A confidential caller may introspect its own access or refresh tokens; an access token issued to another client is visible only when the target resource lists the caller in ProtectedResource.IntrospectionClients. Refresh tokens are never delegated across clients, and unauthorized cross-client access tokens use the same inactive response shape as any other inactive token.

CVEClassRFC anchorTest
CVE-2026-37979 (Keycloak)token introspection audience bypass — a confidential client could retrieve claims for another resource server's token without an audience-scoped delegationRFC 7662 §2.2internal/introspectendpoint.TestHandler_JWTAccessToken_DifferentClient
internal/introspectendpoint.TestHandler_OpaqueAccessToken_DifferentClient
CVE-2026-8922 (Keycloak)one revocation input shadowed another and left a revoked token activeRFC 7662 §2.2internal/introspectendpoint.TestEndToEnd_ActiveHonoursEveryRevocationInput

Refresh token rotation

CVEClassRFC anchorTest
CVE-2026-1035 (Keycloak)refresh-token reuse bypass via TOCTOU race in rotation enforcementRFC 9700 §2.2.2 / RFC 6749 §6op/storeadapter/inmem.TestConsumeRefresh_Race
CVE-2026-9802 (Keycloak)restart reset an in-process stale-token verdict, making rotated refresh tokens replayableRFC 9700 §2.2.2 / RFC 6749 §6internal/grants/refresh.TestExchange_RotationVerdictSurvivesAProcessThatNeverSawTheRotation

Session lifecycle (fixation / rotation)

CVEClassRFC anchorTest
GHSA-xhpr-465j-7p9q (Keycloak, 2024)first-login phishing via email verification (CWE-384 session fixation) — a session that pre-existed the trust transition continued to be authoritative after verification, letting an attacker who planted the cookie ride the post-verification trust. Structural mitigation: rotate session ID on the trust boundary, but preserve CreatedAt so an attacker cannot extend lifetime by triggering rotationOIDC Core §3.1.2.7internal/sessions.TestManager_Rotate_IssuesFreshIDPreservingChooserGroup
internal/sessions.TestManager_Rotate_PreservesCreatedAt
CVE-2026-7507 (Keycloak)OIDC-login session fixation → account takeover; a pre-seeded session ID survived fresh authentication. Structural mitigation: rotate the cookie-bound session ID when a fresh authn factor completes at the authorize / interaction boundary, and delete the old session recordOIDC Core §3.1.2.7internal/authorizeendpoint.TestInteractionPost_RotatesSessionIDAfterFreshAuthn
CVE-2025-68158 (Authlib)URL-carried interaction state was resolved by a browser other than the one that started itOIDC Core §3.1.2.7internal/authorizeendpoint.TestInteraction_ResolvesOnlyForTheBrowserThatStartedIt

Token exchange and custom grants

CVEClassRFC anchorTest
CVE-2026-1486 (Keycloak)failed custom-grant preconditions still issued tokensRFC 8693 §2.2.1internal/tokenendpoint.TestCustomGrant_NoTokenEscapesAFailedPrecondition
CVE-2026-9704 (Keycloak)token exchange silently dropped delegation parameters and proceededRFC 8693 §2.1test/scenarios.TestTokenExchange_DelegationParametersAreNeverSilentlyDropped

Multi-factor authentication (TOTP / step-up)

CVEClassRFC anchorTest
GHSA-9r3w-4j8q-pw98 (cal.com)providing a TOTP code skipped the password check entirely — TOTP step ran without primary-factor proofRFC 6238 / OIDC Core §2 (acr semantics)internal/authn.TestLoginFlowTOTPRequiresPrimary (orchestrator gate)
internal/authn/totp.TestAuthenticator_BeginRequiresSubject
internal/authn/totp.TestAuthenticator_ContinueRequiresSubject (adapter gate)
GHSA-5jfq-x6xp-7rw2 (Keycloak)second-factor bypass — same structural class, covered by the same two-layer mitigation (orchestrator step ordering + adapter Subject-required gate)RFC 6238 / OIDC Core §2(same tests as above)
CVE-2026-37982 (Keycloak)required-action email links had broken one-time-use semantics; an intercepted WebAuthn / TOTP enrollment link could be replayed to enroll an attacker authenticatorone-time credential invariant / OIDC Core §2 (amr semantics)internal/authn/emailotp.TestContinueVerifyReplayRejected
CVE-2026-9798 (Keycloak)CIBA authentication flow bypassed the brute-force lockout used by interactive login by receiving a separate credential-attempt budgetCIBA Core §7 / cross-factor lockout invariantinternal/authn/lockout.TestCrossFactorPivotTriggersLockout
CVE-2026-33473 / CVE-2025-43798 / CVE-2021-43177 (Vikunja / Liferay / devise-two-factor)a TOTP code could be replayed in its current or trailing time stepRFC 6238internal/authn/totp.TestVerify_ReplaysSameStepRejected
CVE-2026-28787 (OneUptime)WebAuthn ceremony challenge replayWebAuthn Level 3 §13.4.3internal/authn.TestTickFactorScratchRoundtrip
internal/authn/passkey.TestAuthenticator_ChallengeComesOnlyFromServerHeldState
CVE-2026-6856 (Keycloak)allow-listed AAGUID was accepted without vouched direct attestationWebAuthn Level 3 §6.4.4internal/authn/passkey.TestAAGUIDAllowlistOnlyDecidesOnAVouchedAAGUID
CVE-2026-22751 (Spring Security)concurrent use of one-time email code yielded multiple successful authenticationsone-time credential invariantinternal/authn/emailotp.TestContinueVerify_ConcurrentSubmissionsOfOneCodeYieldOneSuccess

DPoP / sender-constrained tokens

CVEClassRFC anchorTest
CVE-2026-54431 (liboauth2)DPoP proof accepted a jwk header that embedded private EC key material instead of a public-only keyRFC 9449 §4.3 step 7internal/dpop.TestVerify_RejectsPrivateKeyInJWKHeader

mTLS client identity

CVEClassRFC anchorTest
CVE-2026-22747 / CVE-2026-47838 (Spring Security)text parsing of an X.509 subject DN allowed crafted attributes to collide with another identityRFC 8705 §2.1internal/mtls.TestVerifyTLSClientAuth_SubjectDN_CraftedNameDoesNotCollideOnceRendered
internal/mtls.TestVerifyTLSClientAuth_SubjectDN_MultiValuedMatcherDoesNotFlatten

Dynamic Client Registration

CVEClassRFC anchorTest
CVE-2026-22752 (Spring Authorization Server)unvalidated client metadata caused stored XSS, authority widening, or SSRFRFC 7591 §2internal/registrationendpoint.TestDCR_ClientMetadataIsTreatedAsAttackerInput
op/interaction.TestHTMLDriver_ClientDisplayNameCannotBecomeMarkup

JARM / response signing

CVEClassRFC anchorTest
CVE-2023-6927 (Keycloak)response_mode=form_post.jwt bypass of CVE-2023-6134 — JARM added without the same alg restrictions as the bearer flowFAPI 2.0 Message Signing §5.4 / RFC 8725 §3.1internal/jarm.TestSigner_AlgIsES256_Structural
CVE-2023-6134 (Keycloak, parent)original form-post downgrade; tracked via 6927RFC 8725 §3.1internal/jarm.TestSigner_AlgIsES256_Structural

Error response surfaces (redirect / form_post)

The authorize endpoint emits errors over two surfaces — a redirect with query parameters and an auto-submitting form_post HTML page. Both must escape RP-supplied bytes so a hostile redirect_uri or error_description cannot inject markup or open-redirect chains.

CVEClassRFC anchorTest
GHSA-27gc-wj6x-9w55 (Keycloak, 2024)error_description reflected into HTML error pages without escaping (CWE-79 / CWE-601) — phishing / open-redirect chains. Two-layer mitigation: (1) error_description is a closed catalogue of hardcoded sentinels — RP bytes never reach the field directly; (2) on the wire, url.Values.Encode percent-encodes the redirect surface and html.EscapeString escapes both action= and value= on the form_post surfaceRFC 6749 §4.1.2.1 / RFC 9700 §4.10internal/jarm.TestWriteFormPost_EscapesRedirectAndJWT
internal/authorizeendpoint.TestEmitPlainResponse_EncodesHostileBytes_NoXSS
internal/authorizeendpoint.TestEmitPlainResponse_StripsControlBytes

Operator observability (silent failure on revoke)

CVEClassRFC anchorTest
GHSA-7mqr-2v3q-v2wm (ory/fosite)/revoke silently swallowed storage errors — RFC 7009 §2.2 still requires a wire 200, but operators had no observable signal that revocation actually failed. The library keeps the wire 200 and additionally emits token.revoke_failed on every non-NotFound store fault so SOC tooling can detect the silent-failure classRFC 7009 §2.2internal/revokeendpoint.TestHandler_RefreshToken_StoreFault_EmitsAudit

DoS / parsing safety

Fuzz harnesses across the JOSE / endpoint surface keep parsing panic-free against crafted inputs:

SurfaceFuzzerCVE class kept out
JOSE parseinternal/jose.FuzzJOSEParseRFC 8725 §3.11 / CVE-2024-29371 (decompression bomb), 2015 alg=none cluster
PAR endpoint bodyinternal/parendpoint.FuzzPARFormBodyCVE-2024-29371 (CVSS 7.5; jose4j JWE decompression bomb)
Introspection endpoint bodyinternal/introspectendpoint.FuzzIntrospectFormBodyCVE-2024-29371
Revocation endpoint bodyinternal/revokeendpoint.FuzzRevokeFormBodyRFC 8725 §3.11 / CVE-2024-29371 (panic immunity)

FuzzJOSEParse covers parser panic safety. A provider without WithEncryptionKeyset rejects JWE-shaped request objects, while a provider with one decrypts nested compact JWE request objects before verifying the inner JWS. Those JWE paths have their own algorithm, encryption, nesting, and key-resolution tests; an input shape alone is not sufficient to claim coverage of a dependency advisory.

What this list deliberately does not include

  • CVEs against this library. This matrix is not a live advisory ledger; if a CVE is filed, it is handled through SECURITY.md and Reporting a security issue, not tracked as a point-in-time count here.
  • Dependency defects. These are tracked through govulncheck in CI and resolved by version bump. This matrix lists one only when a targeted test demonstrates the relevant library contract; it does not infer coverage from an input shape or a disabled optional feature.
  • TLS / transport defects (e.g. GHSA-gr79-9v6v-gc9r, GHSA-q8hq-4h99-fj7x, GO-2026-5856). The library does not own its HTTP server; TLS configuration is the embedder's responsibility. Runtime / standard-library fixes are handled through the Go baseline and toolchain declared by the core module; check the core go.mod when reviewing that boundary. See Library posture.
  • Outbound egress / SSRF surfaces the library does not own or implement (e.g. CVE-2026-4874, CVE-2026-1518, CVE-2026-54430). HTTP egress policy is an embedder network boundary, and surfaces such as Keycloak backchannel-notification callbacks or liboauth2 AWS-ALB JWKS fetching are not implemented here. The OIDC jwks_uri SSRF class that does exist is covered above by CVE-2026-1180.
  • Relying-party callback defects (e.g. GHSA-3gx8-q682-38mx, GHSA-wxw3-q3m9-c3jr). Nonce/state storage and callback validation are RP responsibilities; the OP echoes state and emits nonce into ID Tokens, but it does not own the client's callback session binding.
  • SAML defects (e.g. GHSA-m9hp-7r99-94h5). SAML is not implemented; this is an OP only.
  • Tracked but not yet covered advisories. The source repository's advisory queue is currently empty. If a future advisory is added with tracking status, it stays out of this public matrix until a concrete test pins the contract.
  • Theoretical attacks without a published CVE. A test motivated purely by a spec section (e.g. RFC 8725 §3.x) is still in the codebase, but won't appear here unless a CVE pins the class to a named defect somewhere in the ecosystem.

Reading the bigger picture

The CVE-driven tests sit alongside three other layers of regression material:

  1. Spec scenariostest/scenarios/ (in the repo) catalogues OIDC / OAuth / FAPI behaviours from the spec text directly, regardless of whether a CVE exists.
  2. OFCS conformance harness — see OFCS conformance status. The OpenID Foundation's certified test suite drives the public surface end-to-end against the FAPI 2.0 plans.
  3. Fuzz harnesses — listed above, run on every PR.

If you find a CVE class this library should pin and doesn't, please open an issue or follow the disclosure flow for anything that would itself be a vulnerability to discuss in public.