Skip to content

CVE 回帰マトリクス ​

別の OIDC / OAuth / JOSE 実装に対して CVE が公表されたとき、本ライブラリにとっての問いは 「同じ欠陥が本ライブラリにも届きうるか、届かないとすれば構造的に何が防いでいるか」 です。コードレビューだけでは正直な答えは出せず、将来のリファクタで回避経路が再び開いてしまったときにビルドが落ちるテストが必要です。

本ページはそのテスト群の公開リストです。カバー済みの節に載っている advisory には、少なくとも 1 本のユニット / fuzz テストが対応し、対象の経路を実際に呼び出して拒否動作を固定化しています。クラス単位でしか扱えないものと OP のスコープ外のものは、下の別の節に分けてあり、固定済みには数えていません。各項目に挙げたファイル名・テスト名はリポジトリに実在します。

1 行がマトリクスに載るまで
他実装に対して報告された CVE を、まず欠陥クラスに還元します。そのクラスが本コードベースで到達可能かを調べ、到達するなら拒否テストで挙動を固定し、到達しないなら構造上そもそも成立しないことを示します。外部の CVEまったく別の実装に対して報告されたものその欠陥クラスalg confusion、kid traversal個別事例でなく形で捉える本ライブラリで到達可能かバージョン番号ではなくコードの構造に対して問ういいえはい構造上そもそも成立しない退行しうるものが存在しない拒否テスト固定して退行を防ぐ
「影響を受けません」で終わる行はありません。欠陥が再び入り込んだら落ちるテストがあるか、そのコードに入り込む余地が無い理由が書かれているかのどちらかで、後者は該当コードを変更するたびに確認し直します。

項目の読み方

  • 開示 — 他の実装に対して公表された元の advisory と、影響を受けたプロジェクト名です。本ライブラリに対する CVE 記録ではありません。テストが防ごうとしている 欠陥クラス を示すためのものです。各 ID は公開レコードにリンクしています。
  • 欠陥クラス・仕様 — 根本的な欠陥の種類(algorithm confusion、redirect_uri マッチング、PKCE ダウングレード等)と、テストが固定対象としている仕様セクション。
  • 回帰テスト — 該当箇所が退行したらビルドを落とすテストを package.TestName の形で示します。テストの下の注記は、そのテストのカバー範囲が advisory より狭いことを示します。

JOSE / JWT 検証 ​

51 件回帰テストで固定

空の k を持つ対称 oct JWK でトークンを検証

RFC 7518 §6.4 / RFC 8725 §3.1

  • internal/jose.TestParseJWKSet_RejectsSymmetricKey受信した JWK Set は、k が空でも空でなくても対称鍵を返さない

過大な RSA 鍵を持つ JWK のパースによる CPU 枯渇

CWE-400

  • internal/dpop.TestVerify_RejectsOversizedProof8 KiB を超える DPoP proof は、埋め込まれた jwk を解析する前に拒否

JSON パース時の panic

CWE-248

  • internal/jose.FuzzJOSEParseJWS の入口が panic しないという契約
  • internal/jose.FuzzDecodeJWKSetJWK Set の入口が panic しないという契約

AES-CBC-HMAC の JWE 処理中の panic

RFC 7518 §5.2

  • internal/jose.TestDecrypt_EncAllowListCBC-HMAC の enc はすべて、JOSE 層が何かを解析する前に拒否

多数の署名または受信者を持つ JSON シリアライズの JWS / JWE による二乗の CPU 消費

RFC 7515 §7.2 / RFC 7516 §7.2

  • internal/jose.TestParseSigned_RejectsJSONSerialisationShapesJWS のパースは compact 形式のみ
  • internal/jose.TestDecrypt_RejectsJSONSerialisation64 受信者の general 形式 JWE を拒否

保護されていない JWE ヘッダが、値が空または null の保護済みフィールドを上書き

RFC 7516 §7.2.1

  • internal/jose.TestDecrypt_RejectsJSONSerialisationcompact 形式には保護されていないヘッダがなく、それを持つ JSON JWE は不正

巨大な RSA 鍵を持つ x5c チェーンに対する Header.Certificates() の CPU 枯渇

RFC 7515 §4.1.6

  • internal/jose.TestNoForbiddenJOSECallsx5c は信頼の根拠にならず、テスト以外のコードが Certificates() を呼ぶとビルドが失敗

JSON fork が、非公開型を埋め込んだ構造体への claim のデコードで panic

CWE-248

  • internal/jose.TestNoForbiddenJOSECalls受信した payload は encoding/json でデコードし、テスト以外のコードが jwt.ParseSigned、ParseSignedAndEncrypted、UnsafeClaimsWithoutVerification 経由でこの fork に触れるとビルドが失敗

CVE-2015-9235jsonwebtoken

alg=none 受理

RFC 8725 §3.1

  • internal/jose.FuzzJOSEParsealg=none seed
  • internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
  • internal/jose.TestParseAlgorithm_CaseVariantsRejected

CVE-2016-10555jwt-simple

alg=HS256 受理、公開鍵を HMAC secret として使用

RFC 8725 §2.1

  • internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
  • internal/jose.FuzzJOSEParse

alg=none 受理

RFC 8725 §3.1

  • internal/jose.FuzzJOSEParse
  • internal/jose.TestParseAlgorithm_CaseVariantsRejected

algorithm confusion

RFC 8725 §2.1

  • internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret

大文字小文字違いの alg=NONE で deny-list を回避

RFC 8725 §3.1

  • internal/jose.TestParseAlgorithm_CaseVariantsRejected
  • internal/jose.FuzzJOSEParsecase-variant seeds
  • internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret

CVE-2026-33322MinIO OIDC

algorithm confusion

RFC 8725 §2.1

  • internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret

非対称公開 JWK を HMAC 検証 secret として受理

RFC 8725 §2.1

  • internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret

CVE-2018-0114Cisco / node-jose

jwk ヘッダの盲信 — JWS 自身が運ぶ鍵で検証してしまう

RFC 7515 §4.1.3 / RFC 8725 §3.10

  • internal/jose.TestParseSigned_HeaderInjection_NeverFetches
  • internal/jose.FuzzJOSEParsejku seed

CVE-2018-1000531inversoft prime-jwt

alg ヘッダのダウングレード + jwk ヘッダの盲信

RFC 7515 §4.1.3 / RFC 8725 §3.1

  • internal/jose.TestParseSigned_HeaderInjection_NeverFetches

CVE-2017-11424python-jose 系

ヘッダ内の jku URL を辿って鍵を取得

RFC 8725 §3.10

  • internal/jose.TestParseSigned_HeaderInjection_NeverFetches

CVE-2019-7644Auth0 jsonwebtoken-koa

jwk ヘッダの盲信

RFC 7515 §4.1.3

  • internal/jose.TestParseSigned_HeaderInjection_NeverFetches

jwk ヘッダの盲信 — 検証側が攻撃者提供の鍵素材を検証候補鍵として扱ってしまう

RFC 7515 §4.1.3 / RFC 8725 §3.10

  • internal/jose.TestParseSigned_HeaderInjection_NeverFetches

crit 拡張リストを無視

RFC 7515 §4.1.11

  • internal/jose.TestParseSigned_CritHeaderRejectedAtVerify

同じ crit 無視欠陥

RFC 7515 §4.1.11

  • internal/jose.TestParseSigned_CritHeaderRejectedAtVerify

未知 / 未対応の alg を渡された hash-binding verifier が fail-open

RFC 8725 §3.1

  • internal/jose.TestParseSigned_RejectsUnsupportedRegisteredAlg_NoFailOpen

unprotected JWS ヘッダでアルゴリズムをダウングレード

RFC 8725 §3.1

  • internal/jose.TestParseSigned_RejectsMultiSignatureForm
  • internal/jose.TestParseSigned_RejectsUnsupportedRegisteredAlg_NoFailOpencompact 限定とアルゴリズム allowlist を別々に検証

JWE 復号を認証と取り違え、復号後の unsigned / plain inner JWT を受理

RFC 8725 §2.3 / RFC 9101 §6.1

  • internal/jar.TestVerify_RejectsJWEWrappedUnsignedJWT

CVE-2024-29371CVE-2025-62706jose4j / Authlib の JWE 解凍 bomb

細工された圧縮 JWE(zip)によるリソース枯渇。復号経路で展開後 plaintext の上限を適用

CWE-409

  • internal/jose.TestDecrypt_ZipBombResistance
  • internal/jose.TestDecrypt_PlaintextSizeCap_OverLimit

攻撃者提供の jwk ヘッダを検証鍵として信頼

RFC 7515 §4.1.3 / RFC 8725 §3.10

  • internal/jose.TestParseSigned_HeaderInjection_NeverFetches
  • internal/clientauth.TestPrivateKeyJWTVerifier_KeySelectionIgnoresTheAssertionsOwnHeader

oversized JOSE segment を拒否前に処理し、リソース枯渇

CWE-400

  • test/scenarios.TestEndpoints_OversizedJWSIsRefusedBeforeItIsDecoded

CVE-2026-49852GHSA-gg9x-qcx2-xmrh

degenerate な HMAC 鍵で HS256 の偽造を許す。HS256 はアルゴリズム境界で拒否

RFC 8725 §2.2 / §3.5

  • internal/jar.TestParse_RejectsHMAC
  • internal/tokens.TestVerify_RejectsHS256AsMalformedHS256 の拒否だけを検証し、HMAC 鍵長の下限は検証しません

CVE-2026-27932GHSA-w5r5-m38g-f9f9

PBES2 p2c の無制限反復による JWE 鍵導出 DoS。PBES2 は KDF 前に拒否

RFC 7518 §4.8.1.2 / §8.6

  • internal/jose.TestDecrypt_AlgAllowList

空白を変えた PEM、DER 公開鍵、公開 JWK コンテナを HMAC secret として解釈

RFC 8725 §2.1

  • internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecretHS* は鍵を扱う前の parse 段階で拒否

同じ「鍵の再解釈」クラス。接頭辞付き PEM、生の公開 JWK JSON、PEM ガードを破る先頭バイト

RFC 8725 §2.1

  • internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret

空の HMAC 鍵を受理

RFC 8725 §2.2 / §3.5

  • internal/tokens.TestVerify_RejectsHS256AsMalformed
  • internal/jose.TestAlgorithm_IsAllowed許可リストに対称 alg がないので鍵に関係なく拒否

鍵が空または null のとき、署名なし JWT を受理

RFC 8725 §3.1

  • internal/jose.TestParseSigned_CaseVariantNoneRejectedParseSigned は鍵を取らず、常に none を拒否
  • internal/tokens.TestVerify_UnknownKidReturnsSignatureError鍵の検索に失敗したら拒否

署名のない JSON JWS を、検証済みとして返した

RFC 7515 §7.2

  • internal/jose.TestParseSigned_RejectsJSONSerialisationShapesParseSigned は compact 形式のみ

JSON 配列のペイロードで claim 検証を省略

RFC 7519 §7.2

  • internal/tokens.TestVerify_RejectsNonObjectPayloads
  • internal/jar.TestVerify_RejectsNonObjectPayloads
  • internal/dpop.TestVerify_RejectsNonObjectPayloads
  • internal/clientauth.TestPrivateKeyJWTVerifier_RejectsNonObjectPayloads

clockTolerance: Infinity で exp / nbf の検査が無効化

RFC 7519 §4.1.4

  • internal/tokens.TestVerify_LeewayIsBoundedConstant
  • internal/clientauth.TestPrivateKeyJWTVerifier_ExpLeewayIsBoundedConstantskew はパッケージ定数で、公開オプションがない

検証結果のキャッシュが、期限切れの JWT を受理し続けた

RFC 7519 §4.1.4

  • internal/tokens.TestVerify_ExpiryTracksClockAcrossCalls検証結果のキャッシュ自体がない

呼び出し側が渡した options が書き換えられ、再利用時に claim 検査が無効化

CWE-374

  • internal/jar.TestNewVerifier_IsolatedFromCallerConfig構築後に config を編集しても verifier の方針は変わらない

正規でない署名セグメントが、生トークンをキーにした失効リストをすり抜けた

RFC 7515 §5.2 / RFC 7519 §4.1.7

  • internal/clientauth.TestPrivateKeyJWTVerifier_ReplayKeysOnJTINotRawAssertion
  • internal/dpop.TestVerify_ReplayKeysOnJTINotRawProof同じ jti で署名し直したトークンは replay

指数 0 の RSA JWK がエラーなくデコードされ、その thumbprint の計算で panic した

RFC 7638 §3 / RFC 7518 §6.3.1

  • internal/jose.TestDecodeJWKSet退化した鍵は JWKS のデコード時に取り除かれる
  • internal/mtls.TestVerifySelfSigned_ZeroExponentRSAKeyIgnoredこの鍵を含む登録済み client JWKS でも、使える鍵で認証が通る

Authorize / redirect_uri ​

18 件回帰テストで固定

CVE-2026-9086別の OP

大文字小文字を変えた javascript: / data: の redirect URI が検証を通過

RFC 3986 §3.1

  • internal/registrationendpoint.TestValidateRedirectURIs_CaseVariantDangerousSchemesscheme は allow-list の前にパースして小文字化する。redirect URI と post-logout URI、web と native の両クライアントが対象

loopback の例外を前方一致で判定し、http://localhost:[email protected]/cb が通過

RFC 8252 §7.3

  • internal/registrationendpoint.TestValidateRedirectURIs_LoopbackUserinfoSmuggling登録時
  • internal/authorize.TestRequest_Validate_LoopbackWildcardRejectsUserinfoSmuggling/auth 側

拒否の経路が、未検証の redirect_uri へリダイレクト

RFC 6749 §10.15

  • internal/authorizeendpoint.TestInteractionDelete_DenyIgnoresRequestRedirectParamsキャンセルはサーバに保存したリクエスト状態だけで応答し、拒否リクエストの redirect_uri、client_id、response_type は無視

CVE-2024-10318NGINX OIDC リファレンスモジュール

フロントチャネル id_token が nonce バインディングなしに発行 → セッションフィクセーション

OIDC Core §15.5.2 / RFC 9700 §2.1.2

  • internal/authorize.TestRequest_Validate_RejectsImplicitAndHybridResponseTypesresponse_type=code 限定
  • internal/backchannel.TestSignLogoutToken_EmitsRequiredClaimslogout token は nonce を持たず typ も別なので、ID Token として通用しない

旧 redirect_uri パッチをワイルドカード / suffix で迂回

RFC 6749 §3.1.2.3 / RFC 9700 §4.1

  • internal/authorize.TestRequest_Validate_RedirectURIAttackVariants

CVE-2020-15234ory/fosite

大文字小文字違いの redirect_uri が登録値にマッチ

RFC 6749 §3.1.2.3

  • internal/authorize.TestRequest_Validate_RedirectURIAttackVariants

loopback redirect ルールでホスト / クエリの差し替えを許してしまった欠陥(修正後はポートのみが実行時に変動可)。本ライブラリは登録値との完全一致のみ許容するためさらに厳格

RFC 6749 §3.1.2.3 / RFC 9700 §4.1

  • internal/authorize.TestRequest_Validate_RedirectURIAttackVariants

無効化したはずの implicit フロー制御を迂回。偽装したクライアント状態経由でフロントチャネルに access token が露出

RFC 9700 §2.1.2

  • internal/authorize.TestRequest_Validate_RejectsImplicitAndHybridResponseTypes

ワイルドカード redirect_uri を ..;/ でパストラバーサル

RFC 6749 §3.1.2.3 / RFC 9700 §4.1

  • internal/authorize.TestRequest_Validate_RedirectURIAttackVariants

ワイルドカード redirect_uri の authority / userinfo 部に複数の @ byte を混ぜてパーサを混乱させる

RFC 6749 §3.1.2.3 / RFC 9700 §4.1

  • internal/authorize.TestRequest_Validate_RedirectURIAttackVariants

HTTP parameter pollution: 重複した OIDC 認可リクエストパラメータが、認可レスポンス側の重複パラメータとして反射される

RFC 6749 §3.1 / RFC 9700 §4.1

  • internal/authorize.TestParseValues_DuplicateParameter

malformed な認可リクエストで、検証済みでない攻撃者指定 redirect_uri にリダイレクトしてしまう。正しくは first-party error を返すべき

RFC 6749 §4.1.2.1 / RFC 9700 §4.11.2

  • internal/authorizeendpoint.TestAuthorize_RejectsBadRedirectURIWithJSON
  • internal/authorize.TestIsRedirectSafe_ParseTimeErrorsAreNeverRedirectSafe

CVE-2026-32235Backstage auth-backend

DCR の redirect-URI allowlist を迂回

RFC 6749 §3.1.2.3 / RFC 9700 §4.1

  • internal/registrationendpoint.TestDCR_RegisteredRedirectURIIsMatchedByteExactly
  • internal/registrationendpoint.TestDCR_RejectsRedirectURIShapesThatBlurTheMatch

CVE-2026-12985dynamic client registration

動的登録で曖昧な redirect URI 形状を受理

RFC 6749 §3.1.2.3 / RFC 9700 §4.1

  • internal/registrationendpoint.TestDCR_RejectsRedirectURIShapesThatBlurTheMatch登録時の形状拒否だけを検証

pushed authorization request の request_uri を同時に再利用

RFC 9126 §2.2 / §4

  • op/store/contract.concurrentPARConsumestore 契約の勝者は 1 件。prompt=none の handler 固有経路は未検証

パース時の authorize エラーを未検証 redirect_uri にリダイレクト

RFC 6749 §4.1.2.1 / RFC 9700 §4.11.2

  • internal/authorize.TestIsRedirectSafe_ParseTimeErrorsAreNeverRedirectSaferedirect 安全性 predicate。ブラウザ全体のフローは未検証

PAR で登録した request を、push したクライアントに束縛していなかった

RFC 9126 §2.2 / §4

  • internal/parendpoint.TestHandler_ClientIDMismatch_Rejected
  • internal/parendpoint.TestEndToEnd_PAR_RequestURIBoundToPushingClient/auth は別 client の request_uri を拒否し、レコードを消費しない

ID token の発行を、client 登録による絞り込みの外にある、要求そのままの scope で判断

OIDC Core 1.0 §3.1.2.1

  • internal/authorize.TestValidate_OpenIDScopeIsClampedToClientRegistrationopenid に例外はない

PKCE / コード交換 ​

5 件回帰テストで固定

CVE-2024-23647authentik ≤2023.10.6, CVSS 6.1

/token が code_challenge 無し で発行された code に対しても code_verifier を受理 — PKCE ダウングレード。本ライブラリは public / native client への非 PKCE 認可コード発行も /auth で拒否し、token 側ガードは defense in depth として残す

RFC 9700 §4.8 / RFC 7636 §4.6

  • internal/authorize.TestRequest_Validate_PublicClientAlwaysRequiresPKCE
  • test/scenarios.TestScenario_PKCE_007_PublicClientCodeRequiresPKCE
  • internal/grants/authcode.TestExchange_NoPKCE_RejectsSmuggledVerifier

CVE-2025-4144Cloudflare workers-oauth-provider <0.0.5, CVSS 8.1

同じダウングレードを別エコシステムで再現。public / native client は非 PKCE code が発行される前に拒否される

RFC 9700 §4.8

  • internal/authorize.TestRequest_Validate_PublicClientAlwaysRequiresPKCE
  • test/scenarios.TestScenario_PKCE_007_PublicClientCodeRequiresPKCE
  • internal/grants/authcode.TestExchange_NoPKCE_RejectsSmuggledVerifier

CVE-2026-26247GHSA-m5ch-ppfx-xv3v

PKCE S256 を plain または challenge 無しへダウングレード

RFC 7636 §4.6 / RFC 9700 §4.8

  • internal/pkce.TestVerify_RejectsPlainMethod
  • internal/tokenendpoint.TestAuthCode_PublicClient_NoPKCE_Rejected

plain の verifier を文字列の等値比較で照合

RFC 7636 §4.6

  • internal/pkce.TestVerify_RejectsPlainMethodplain を拒否するので生の verifier は比較されず、S256 のダイジェスト比較は定数時間

PKCE を response_type=code にしか強制していなかった

RFC 7636 §4.4 / RFC 9700 §4.8

  • internal/authorize.TestRequest_Validate_RejectsImplicitAndHybridResponseTypes受理するのは code だけなので、発行されるすべてのコードが PKCE 検査を通る

認可コード横取り(クロスクライアント取得) ​

5 件回帰テストで固定

GHSA-vh7g-p26c-j2cwdexidp/dex, 2024

フロントチャネルで横取りした認可コードを 別の client_id で交換して、被害者向けに発行されたトークンを取得できた欠陥。構造的緩和は (code, client_id, redirect_uri[, code_verifier]) のタプル一致を交換時に強制すること

RFC 6749 §4.1.3 / RFC 9700 §4.5 / OIDC Core §3.1.3.2

  • internal/grants/authcode.TestExchange_RejectsClientMismatch

shared single-use-object namespace 経由の認可コード偽造

RFC 6749 §4.1.3

  • op/store/contract.namespaceDisjoint
  • op/store/contract.namespaceConsumeIsScoped

CVE-2026-53518GHSA-7w99-5wm4-3g79

認可コードの同時交換で複数リクエストが成功

RFC 6749 §4.1.3

  • op/store/contract.concurrentAuthCodeConsumestore 契約の勝者は 1 件

CVE-2026-16089認可コードと refresh token

認可コードと refresh token を別 client が交換可能

RFC 6749 §4.1.3 / RFC 6749 §6

  • internal/grants/authcode.TestExchange_RejectsClientMismatch
  • test/scenarios.TestScenario_REF_004_RefreshClientMismatchRejected両方の grant type を検証

CVE-2026-73179Apache CXF

コードの単回使用を、アトミックでない find してから delete の手順で強制

RFC 6749 §4.1.2

  • op/store/contract.concurrentAuthCodeConsumestore 契約: 勝者は 1 つ

クライアント認証 / private_key_jwt ​

17 件回帰テストで固定

あるクライアントを認証しながら、body の別の client_id に対して grant を認可

RFC 6749 §3.2.1

  • test/scenarios.TestScenario_CA_COMMON_05_BodyClientIDMismatchRejected
  • test/scenarios.TestScenario_CA_BASIC_05_BasicHeaderBodyClientIDMismatch
  • test/scenarios.TestAdvisory_BodyClientIDMismatchAcrossGrantsAndEndpointsbody の client_id が不一致なら、refresh_token、client_credentials、PAR、introspection、revocation のいずれでも invalid_client

CVE-2025-27370OIDF 連携、OIDC 系統

private_key_jwt aud confusion: 鍵を複数 AS で使い回したクライアントを、敵対 AS が中継してなりすまし

draft-ietf-oauth-rfc7523bis (Internet-Draft) / FAPI 2.0 Security Profile §5.3.2.1 item 8

  • internal/clientauth.TestPrivateKeyJWTVerifier_AudIssuer_AcceptedViaAuxAudiences
  • internal/clientauth.TestPrivateKeyJWTVerifier_AudOtherAS_Rejected

CVE-2025-27371IETF 連携、OAuth 2.0 系統

同じ欠陥、OAuth プロファイル系統

draft-ietf-oauth-rfc7523bis (Internet-Draft)

  • internal/clientauth.TestPrivateKeyJWTVerifier_AudIssuer_AcceptedViaAuxAudiences
  • internal/clientauth.TestPrivateKeyJWTVerifier_AudOtherAS_Rejected

private_key_jwt の jti の一意性が強制されない — assertion replay

RFC 7523 §3 / CWE-345

  • internal/clientauth.TestPrivateKeyJWTVerifier_JTIReplay_Rejected

GHSA-v3q9-2p3m-7g43ory/fosite, 2020 cluster

同じ jti リプレイ欠陥クラスが別 GHSA として再開示されたもの。構造的緩和は同一(assertion の exp 期間中、jti ごとに 1 回限りの使用)

RFC 7523 §3 / CWE-345

  • internal/clientauth.TestPrivateKeyJWTVerifier_JTIReplay_Rejected

動的クライアントの private_key_jwt 鍵解決時に jwks_uri 経由で SSRF

RFC 7591 §2 / RFC 7523 §3

  • internal/securefetch.TestPolicy_SSRFContract

issuer の prefix を完全一致として受理

RFC 7523 §3

  • internal/clientauth.TestPrivateKeyJWTVerifier_IssuerMustMatchWholly

client assertion の鍵選択またはアルゴリズム方針を JOSE ヘッダで誘導

RFC 8725 §3.1 / §3.10

  • internal/clientauth.TestPrivateKeyJWTVerifier_KeySelectionIgnoresTheAssertionsOwnHeader
  • internal/clientauth.TestPrivateKeyJWTVerifier_RejectsAlgOutsideClientPin

CVE-2026-16093client assertion

署名なしの none assertion が、署名付き client 認証を要求する方針を満たす

RFC 8725 §3.1

  • internal/jose.TestParseSigned_CaseVariantNoneRejected
  • internal/clientauth.TestVerifyClient_AllowedMethodsRejectsOutOfPolicy

CVE-2026-47426GHSA-f2cx-463q-7m2c

JWKS cache の kid 衝突が client 境界を越える

RFC 8725 §3.10

  • internal/clientauth.TestPrivateKeyJWTVerifier_KeySelectionIgnoresTheAssertionsOwnHeaderclient 単位の鍵選択を検証。cache 固有のテストはありません

登録済み JWK が verifier のアルゴリズム方針を拡張

RFC 8725 §3.1

  • internal/clientauth.TestPrivateKeyJWTVerifier_RegisteredKeyCannotWidenTheAlgorithmPolicy

CVE-2026-22746Spring Security

存在しない client_id の応答時間差によるアカウント列挙

CWE-208

  • internal/clientauth.TestVerifyClient_PrivateKeyJWT_UnknownClient_DummyVerifyShim
  • internal/clientauth.TestPrivateKeyJWTVerifier_NoKeysRunsTimingShim

CVE-2026-53431client assertion

期限切れ client assertion を認証に受理

RFC 7523 §3

  • internal/clientauth.TestPrivateKeyJWTVerifier_RejectsExpired期限切れ claim だけを固定

JWT bearer grant が aud の有無しか確認しなかった(本 OP に jwt-bearer grant はなく、同じ束縛が client_assertion に効く)

RFC 7523 §3

  • internal/clientauth.TestPrivateKeyJWTVerifier_AudOtherAS_Rejected

1 つのリクエストで複数のクライアント認証方式を受理

RFC 6749 §2.3

  • internal/clientauth.TestParse_AmbiguousBasicAndFormErrAmbiguousCredentials

client_credentials で、Bearer のアクセストークンをクライアント認証として受理

RFC 6749 §2.3

  • internal/tokenendpoint.TestClientCredentials_BearerAccessTokenIsNotClientAuthentication401 invalid_client、トークンは発行しない

Remote JWKS と fetch の安全性 ​

3 件回帰テストで固定

CVE-2026-48522PyJWKClient

制限のない jwks_uri scheme でローカルまたは非 HTTP リソースを取得

RFC 7591 §2

  • internal/registrationendpoint.TestDCR_ClientMetadataIsTreatedAsAttackerInput
  • internal/jar.TestFetcher_JWKSURISchemeIsConstrainedToTheNetwork

CVE-2026-48524PyJWKClient

未知の kid により JWKS の再取得を無制限に強制

CWE-400

  • internal/jar.TestFetchFresh_BypassesFreshCacheThenThrottles
  • internal/jar.TestJWKSCache_SingleflightCollapsesConcurrentFetches

JAR の request_uri を、client が登録した request_uris と照合せずに fetch

RFC 9101 §5.2

  • internal/authorizeendpoint.TestFetchJARRequestURI_RejectsUnregisteredURI事前登録の検査がネットワーク fetch より前に働き、fetch は securefetch を通る

トークン introspection ​

3 件回帰テストで固定

Introspection を呼び出せるのは confidential caller だけです。public client または token_endpoint_auth_method=none の client は、トークン解決前に 401 invalid_client になります。confidential caller は自分が発行した access token / refresh token を introspect できます。別 client に発行された access token は、対象リソースが caller を ProtectedResource.IntrospectionClients に登録している場合だけ参照できます。refresh token を client 間で委譲することはなく、認可されていない別 client 向け access token は、他の inactive token と同じレスポンス形状になります。

introspection の audience バイパス — confidential クライアントが audience 単位の委譲なしに別のリソースサーバ向けトークンの claim を取得できた

RFC 7662 §2.2

  • internal/introspectendpoint.TestHandler_JWTAccessToken_DifferentClient
  • internal/introspectendpoint.TestHandler_OpaqueAccessToken_DifferentClient

失効条件の一方が他方を覆い隠し、失効済みトークンを active と判定

RFC 7662 §2.2

  • internal/introspectendpoint.TestEndToEnd_ActiveHonoursEveryRevocationInput

CVE-2026-18208introspection

introspection が別 client のトークンまたは失効済みトークンを漏えい

RFC 7662 §2.2

  • internal/introspectendpoint.TestHandler_JWTAccessToken_DifferentClient
  • internal/introspectendpoint.TestHandler_OpaqueAccessToken_Revoked2 ケースを別々に検証

アクセストークンの提示 ​

4 件回帰テストで固定

GHSA-rvq5-wwqv-78pqGHSA-w4fh-qvv9-3v23MCP TypeScript SDK / MCP Python SDK

bearer の検証が、別のリソースサーバ向けに発行されたトークンを受理

RFC 9068 §4

  • op/rs.TestVerifier_AudienceShapesop/rs は構築時に audience を必須とし、JWT 経路ではそれを含まない aud をすべて拒否
  • op/rs.TestVerifier_IntrospectedTokenObeysClaimRulesintrospection 経路にも同じ規則を適用

複数の方法で同時に提示されたトークンを認可

RFC 6750 §2

  • internal/userinfo.TestHandler_POST_BothChannelsRejectedheader と body の併用は invalid_request。query string は読まない

CVE-2025-7043ForgeRock

リフレッシュトークンをアクセストークンとして受理

RFC 6749 §7 / RFC 7662 §2.2

  • internal/userinfo.TestHandler_RefreshTokenAsBearerRefused
  • internal/introspectendpoint.TestHandler_RefreshToken_CarriesNoAccessTokenType

リフレッシュトークンのローテーション ​

9 件回帰テストで固定

ローテーション強制の TOCTOU レースによるリフレッシュトークン再利用バイパス

RFC 9700 §4.14.2 / RFC 6749 §6

  • op/storeadapter/inmem.TestConsumeRefresh_Race

再起動でプロセス内の stale-token 判定が初期化され、ローテーション済み refresh token をリプレイ

RFC 9700 §4.14.2 / RFC 6749 §6

  • internal/grants/refresh.TestExchange_RotationVerdictSurvivesAProcessThatNeverSawTheRotation

CVE-2026-53517GHSA-392p-2q2v-4372

refresh token の同時ローテーションで生きた後続トークンが 2 つに分岐

RFC 6749 §6 / RFC 9700 §4.14.2

  • op/store/contract.concurrentRefreshConsume
  • op/store/contract.concurrentRefreshRotationstore 契約で consume と rotation を検証

CVE-2026-86073GHSA-cw9w-vv67-hf73

refresh request の resource indicator が token audience を拡張

RFC 8707 §2.2 / RFC 6749 §6

  • test/scenarios.TestRefreshTokenIgnoresRequestSuppliedResourcerefresh 時は request parameter を無視

CVE-2026-53512GHSA-pw9m-5jxm-xr6h

refresh-token grant が confidential client 認証を要求しない

RFC 6749 §6

  • test/scenarios.TestRefreshTokenGrantRejectsMissingClientAuthenticationcredential 欠落ケース。誤った値と none の sibling test もあります

CVE-2026-16103deprovisioned subject

deprovision 済み subject が stale refresh / access token を交換可能

RFC 6749 §6

  • internal/tokenendpoint.TestDeprovisionedSubject_RefreshRefusedAndGrantTornDown
  • test/scenarios.TestSubjectDeprovisioning_RefreshRefusedAndAccessTokenDeadrefresh と access token を検証。code と CIBA は sibling test で検証

CVE-2026-90997MySQL CLIENT_FOUND_ROWS

CLIENT_FOUND_ROWS が SQL store の single-use 消費を壊す

RFC 6749 §6 / store contract

  • op/storeadapter/sql.TestMySQL_ClientFoundRows_FullContractMySQL 環境が必要

refresh grant がアクセストークンを受理

RFC 6749 §6

  • internal/tokenendpoint.TestRefreshGrant_AccessTokenPresentedAsRefreshTokenRefusedJWT と opaque のアクセストークン

CVE-2026-107162Express Gateway

refresh grant がトークンを secret にも client にも束縛していなかった

RFC 6749 §6

  • test/scenarios.TestScenario_REF_004_RefreshClientMismatchRejected

セッションライフサイクル(フィクセーション / ローテーション) ​

10 件回帰テストで固定

step 完了の証跡を、クライアントが知り得る値から導いた cookie に保持

CWE-565

  • internal/authorizeendpoint.TestInteraction_ProofCookieNotDerivableFromClientKnownValues平文やクライアントが計算できる値、別の interaction の cookie は拒否

メールで送るリンクを、クライアントが指定した転送ヘッダから組み立て

OIDC Discovery 1.0 §3

  • test/scenarios.TestAdvisory_EmittedURLsIgnoreHostHeaders悪意ある Host、X-Forwarded-*、Forwarded ヘッダは、OP が出力する絶対 URL を変えない

所有者のいない grant すべてが、nil の resource owner を通じて一致

OIDC RP-Initiated Logout 1.0

  • internal/endsession.TestHandler_LogoutLeavesSubjectlessGrantUntouchedログアウトの失効は空の subject を飛ばし、grant management は grant_id とクライアントで引く

GHSA-xhpr-465j-7p9qKeycloak, 2024

メール検証経由の初回ログインフィッシング(CWE-384 セッションフィクセーション)。信頼境界をまたぐ前から存在していたセッションが検証後も有効なまま使われ、cookie を仕込んだ攻撃者が検証後の信頼に乗ってしまう欠陥。構造的緩和は信頼境界でセッション ID をローテーションし、CreatedAt は維持して攻撃者がローテーションを誘発しても寿命を延ばせないようにすること

CWE-384 / OIDC Core §3.1.2.3

  • internal/sessions.TestManager_Rotate_IssuesFreshIDPreservingChooserGroup
  • internal/sessions.TestManager_Rotate_PreservesCreatedAt

OIDC ログインのセッションフィクセーション → アカウント乗っ取り。事前に植えられた session ID が fresh authentication 後も生き残る欠陥。構造的緩和は、authorize / interaction 境界で fresh authn factor が完了した時点で cookie-bound session ID をローテーションし、古い session record を削除すること

CWE-384 / OIDC Core §3.1.2.3

  • internal/authorizeendpoint.TestInteractionPost_RotatesSessionIDAfterFreshAuthn

URL 上の interaction state を開始元とは別のブラウザが解決

CWE-384 / OIDC Core §3.1.2.3

  • internal/authorizeendpoint.TestInteraction_ResolvesOnlyForTheBrowserThatStartedIt

ACR step-up が弱い認証レベルの再利用 session を受理

OIDC Core §3.1.2.3 / RFC 9470 §4

  • internal/authorizeendpoint.TestEndToEnd_ACRStepUp
  • internal/authorizeendpoint.TestEndToEnd_SessionReuseReportsTheLevelReachedstep-up と報告 ACR を別々に検証

end_session が署名未検証の id_token_hint を受理

OIDC RP-Initiated Logout 1.0 §2

  • internal/endsession.TestHandler_BadIDTokenSignature改ざんされた hint は、その aud が post-logout URI を採用する client を選ぶより前に 400 で拒否

CVE-2026-71575Apache CXF

max_age の検査で単位が合わず、比較が逆

OIDC Core 1.0 §3.1.2.1

  • internal/authorizeendpoint.TestEndToEnd_MaxAgeIsMonotoneAtEveryAcceptedValue
  • internal/authorizeendpoint.TestEndToEnd_MaxAgeZeroAlwaysReauthenticates

MFA の完了前に remember-me のセッションを発行

OIDC Core 1.0 §2 (acr semantics)

  • internal/authorizeendpoint.TestEndToEnd_MFAWithholdsSessionUntilSecondFactorCompletesパスワードと TOTP の間には session cookie も record も存在しない

Token exchange と custom grant ​

4 件回帰テストで固定

custom grant の事前条件失敗後にもトークンを発行

RFC 6749 §4.5

  • internal/tokenendpoint.TestCustomGrant_NoTokenEscapesAFailedPrecondition

token exchange が delegation parameter を黙って落として続行

RFC 8693 §2.1

  • test/scenarios.TestTokenExchange_DelegationParametersAreNeverSilentlyDropped

CVE-2026-97846token exchange

token exchange が mTLS binding を落とし、scope を拡張

RFC 8693 §2.1

  • test/scenarios.TestScenario_TX_020_MTLSBoundSubjectRequiresMatchingCert
  • test/scenarios.TestScenario_TX_009_ScopeInflationRejectedbinding と scope を別々に検証

token exchange が impersonation の検査を省略

RFC 8693 §2.1

  • test/scenarios.TestScenario_TX_011_PolicyErrorPreservedVerbatim組み込み側の exchange policy は必須で、常に参照される
  • test/scenarios.TestScenario_TX_009_ScopeInflationRejected

バックチャネル認証(CIBA) ​

1 件回帰テストで固定

CIBA の利用を許可されていない client でも、バックチャネル認証リクエストを開始できた

CIBA Core 1.0 §13

  • internal/cibaendpoint.TestServe_RejectsClientWithoutCIBAGrantunauthorized_client

多要素認証(TOTP / step-up) ​

28 件回帰テストで固定

TOTP コードを送るだけでパスワード検証を完全に飛ばせた欠陥 — primary factor の証明なしで TOTP ステップが進む

RFC 6238 / OIDC Core §2 (acr 意味論)

  • internal/authn.TestLoginFlowTOTPRequiresPrimaryオーケストレータ層
  • internal/authn/totp.TestAuthenticator_BeginRequiresSubject
  • internal/authn/totp.TestAuthenticator_ContinueRequiresSubjectアダプタ層

二要素バイパス — 同じ構造クラス。同じ二層緩和(オーケストレータのステップ順序 + アダプタ側の Subject 必須ゲート)で対応

RFC 6238 / OIDC Core §2

  • internal/authn.TestLoginFlowTOTPRequiresPrimary
  • internal/authn/totp.TestAuthenticator_BeginRequiresSubject
  • internal/authn/totp.TestAuthenticator_ContinueRequiresSubject

required-action email link の one-time-use 意味論が壊れており、傍受された WebAuthn / TOTP enrollment link をリプレイして攻撃者の authenticator を登録できた

one-time credential invariant / OIDC Core §2 (amr 意味論)

  • internal/authn/emailotp.TestContinueVerifyReplayRejected

CIBA 認証フローが interactive login 側の brute-force lockout を迂回し、別の credential-attempt budget を得ていた

CWE-307 / cross-factor lockout invariant

  • internal/authn/lockout.TestCrossFactorPivotTriggersLockout

CVE-2026-33473CVE-2025-43798CVE-2021-43177Vikunja / Liferay / devise-two-factor

TOTP コードを当該または前の time step でリプレイ

RFC 6238 §5.2

  • internal/authn/totp.TestVerify_ReplaysSameStepRejected

CVE-2026-20779GHSA-gx3v-q759-g323

TOTP のリプレイまたは失敗処理が lockout / replay gate を迂回

RFC 6238 / cross-factor lockout invariant

  • internal/authn/totp.TestVerify_LocksAtThirtyFailures
  • internal/authn/totp.TestVerify_ReplaysSameStepRejected
  • op/store/contract.totpAcceptReplay
  • op/store/contract.totpConcurrentAcceptlockout、replay、store TOCTOU を検証

CVE-2026-96445MFA / proxy trust

信頼されていない forwarded header が client IP の識別を変え、または stale MFA enrollment を受理

MFA enrollment invariant / proxy trust boundary

  • internal/proxy.TestResolve_UntrustedRemote_IgnoresForwardedHeaders
  • op/store/contract.totpAcceptStaleEnrollmentproxy trust と stale enrollment を別々に検証

WebAuthn ceremony challenge のリプレイ

WebAuthn Level 3 §13.4.3

  • internal/authn.TestTickFactorScratchRoundtrip
  • internal/authn/passkey.TestAuthenticator_ChallengeComesOnlyFromServerHeldState

vouch されていない direct attestation の AAGUID allowlist を受理

WebAuthn Level 3 §6.5 / §7.1

  • internal/authn/passkey.TestAAGUIDAllowlistOnlyDecidesOnAVouchedAAGUID
  • internal/authn/passkey.TestAAGUIDAllowlistRequiresATrustedAttestationChain

passkey assertion が未登録 credential を使用

WebAuthn Level 3 §7.2

  • internal/authn/passkey.TestCeremony_UnregisteredCredentialIsRefused

CVE-2026-72780GHSA-wg23-69c2-gjc8

passkey の sign counter と user-verification state が更新をまたいで失われる

WebAuthn Level 3 §7.2

  • internal/authn/passkey.TestAuthenticator_UVBitTravelsOnResult
  • internal/authn/passkey.TestPersistCredentialReverseCompletionDoesNotRewindUV と counter を別々に検証

GHSA-6hxq-p678-4hr2passkey attestation

信頼されていない attestation の AAGUID が allowlist を満たす

WebAuthn Level 3 §6.5 / §7.1

  • internal/authn/passkey.TestAAGUIDAllowlistRequiresATrustedAttestationChain

CVE-2026-22751Spring Security

one-time email code の同時使用で複数認証が成功

one-time credential invariant

  • internal/authn/emailotp.TestContinueVerify_ConcurrentSubmissionsOfOneCodeYieldOneSuccess

CVE-2026-48505GHSA-mc5j-f6wx-h9qh

recovery code の同時交換で複数回成功

one-time credential invariant

  • op/storeadapter/inmem.TestRecoveryStore_ConsumeRaceSingleWinner
  • op/store/contract.recoveryConcurrentConsume

MFA チケットが最初の factor のユーザに束縛されていなかった

OIDC Core 1.0 §2

  • internal/authn.TestTick_LaterFactorCannotRebindSubjectchain を ErrSubjectMismatch で終了。対照: TestTick_FirstFactorMayReplaceInheritedSubject

既存セッションを再利用するサインイン経路が、第二要素の要件を省略

OIDC Core §3.1.2.3

  • internal/authorizeendpoint.TestEndToEnd_SessionReuseStillEvaluatesLoginFlowRulesLoginFlow のルールと Decider を発行前に評価し、prompt=none では interaction_required を返す

CVE-2026-61630nginx-ignition

1 つの TOTP コードを、有効な時間幅の中で複数回受理

RFC 6238 §5.2

  • internal/authn/totp.TestVerify_ReplaysSameStepRejected
  • op/store/contract.totpAcceptEarlierstore 契約: 過去の step は拒否

試行回数の制限がない経路を通る、TOTP やリカバリコードへの総当たり

CWE-307

  • op.TestProjectBuiltinStep_AttachesLockoutCounterパスワードを含む組み込みの資格情報ステップはすべて subject ごとの 1 つのカウンタを共有。WithAuthnLockoutStore か、WithStore の値が持つ AuthnLockouts() で組み込まれる
  • internal/authorizeendpoint.TestEndToEnd_PasswordLockout_LockedMatchesWrongPassword
  • internal/authn/totp.TestVerify_LocksAtThirtyFailures
  • internal/authn/recovery.TestAuthenticator_AttemptBudgetTracksRecordedFailures

登録後に TOTP の secret が参照できる状態だった

CWE-200

  • op/totpkit.TestNewEnrolment_AADBindsSubjectstore には暗号文だけを保持し、封じた seed は該当 subject にしか開けない

WebAuthn の登録が challenge を検証せず、subject にも束縛しなかった

WebAuthn Level 3 §7.1

  • op/passkeykit.TestFinish_RejectsForeignChallenge
  • op/passkeykit.TestFinish_RejectsSubjectMismatch登録前のユーザ認証は組み込み側の役割

処理後も WebAuthn の challenge が有効なまま

WebAuthn Level 3 §13.4.3

  • internal/authn.TestPasskeyChallengeIsSingleUseAfterSoftFailure
  • internal/authn.TestPasskeyChallengeRetiredAfterHardFailure

CVE-2026-107276MISP

CVE-2026-82761AshAuthentication

競合により、1 つのメールコードやマジックリンクで 2 回ログインが完了した(本 OP にマジックリンクはなく、単回使用の資格情報は同じ「勝者は 1 つ」の契約に従う)

one-time credential invariant

  • internal/authn/emailotp.TestContinueVerify_ConcurrentSubmissionsOfOneCodeYieldOneSuccess
  • op/store/contract.emailOTPConcurrentConsume
  • op/store/contract.recoveryConcurrentConsume

CVE-2026-110862Better Auth

OAuth の state を、マジックリンクのトークンとして受理

one-time credential invariant

  • internal/authn.TestSingleUseSecretNamespacesAreDisjointリカバリコード、メール OTP、StateRef は互いに引き換えられない

DPoP / sender-constrained token ​

2 件回帰テストで固定

DPoP proof が、公開鍵だけであるべき jwk ヘッダに private EC key material を含んでいても受理していた

RFC 9449 §4.3 step 7

  • internal/dpop.TestVerify_RejectsPrivateKeyInJWKHeader

CVE-2026-41707DPoP replay marker

DPoP replay marker が有効期限前に eviction される

RFC 9449 §11.1 / store contract

  • internal/dpop.TestVerify_ReplayAcrossFullIatWindowverifier の期間を検証。Redis の noeviction 配置は引き続き必要

mTLS クライアント ID ​

3 件回帰テストで固定

転送された scheme ヘッダを、どの接続元からでも信頼

RFC 7239 §8

  • op.TestWrapWithTrustedProxy_IgnoresUntrustedHeaders
  • internal/proxy.TestResolve_UntrustedRemote_IgnoresForwardedHeaders転送ヘッダは、設定した trusted proxy からのものだけを受け付ける

X.509 subject DN の文字列表現をパースして、細工された属性が別 ID と衝突

RFC 8705 §2.1

  • internal/mtls.TestVerifyTLSClientAuth_SubjectDN_CraftedNameDoesNotCollideOnceRendered
  • internal/mtls.TestVerifyTLSClientAuth_SubjectDN_MultiValuedMatcherDoesNotFlatten

Dynamic Client Registration ​

7 件回帰テストで固定

CVE-2026-9705別の OP

registration access token が、管理者が無効にしたクライアントを再び有効化

RFC 7592

  • internal/registrationendpoint.TestManage_OperatorDeletedClientRATCannotRecreate本 OP に無効状態はなく、運用者はクライアントを削除して取り除く。古い token は 401 になり、再作成できない

CVE-2026-22752Spring Authorization Server

未検証の client metadata による stored XSS、権限拡張、SSRF

RFC 7591 §2

  • internal/registrationendpoint.TestDCR_ClientMetadataIsTreatedAsAttackerInput
  • op/interaction.TestHTMLDriver_ClientDisplayNameCannotBecomeMarkup

CVE-2026-61466dynamic client registration

DCR が未知の scope を受理

RFC 7591 §2

  • internal/registrationendpoint.TestRegister_RejectsScopeNotInRegistryadvisory の public-client 形状のケースはこのテストの対象外

GHSA-xwmw-prc4-v3crdynamic client registration

DCR metadata がエスケープされず HTML に到達し、未信頼の software statement を受理

RFC 7591 §2 / §3.1.1

  • internal/registrationendpoint.TestRegister_MetadataValidation_4xx
  • op/interaction.TestHTMLDriver_ConsentClientNameEscapedXSS と software-statement 検証。広い trust-chain の主張はしない

RFC 7592 の registration access token を対象 client と照合していなかった

RFC 7592 §2

  • internal/registrationendpoint.TestManage_Read_4xxGET、PUT、DELETE のいずれも、path の client_id でトークンを引く

DCR が、呼び出し側の指定した、セキュリティ上重要な client 属性をそのまま保存

RFC 7591 §2

  • internal/registrationendpoint.TestRegister_InternalClientAttributesNotWritableメタデータは明示的な許可リスト

DCR の応答が設定を 1 つ欠いており、read-modify-write で失われた

RFC 7592 §2.2

  • internal/registrationendpoint.TestManage_ReadModifyWriteIsLosslessGET して本文をそのまま PUT し、再度 GET しても応答は同一で、保存済み client も変わらない

JARM / レスポンス署名 ​

2 件回帰テストで固定

response_mode=form_post.jwt による open redirect。CVE-2023-6134 の修正を迂回した。JARM 応答は固定の単一アルゴリズムで署名し、エスケープ付きの form_post writer で出力する

FAPI 2.0 Message Signing §5.4.1

  • internal/jarm.TestSigner_AlgIsES256_Structural

CVE-2023-6134Keycloak、親 CVE

redirect_uri 検証の迂回。後に form_post.jwt 版で再び回避された(6927 経由で追跡)

RFC 6749 §3.1.2.3

  • internal/jarm.TestSigner_AlgIsES256_Structural

エラーレスポンスの出力面(redirect / form_post) ​

2 件回帰テストで固定

authorize エンドポイントは、クエリ付きリダイレクトと自動送信される form_post HTML の 2 つの出力面でエラーを返します。どちらの面でも、敵対的な redirect_uri や error_description が HTML 注入や open-redirect 連鎖を起こさないよう、RP 由来の byte 列をエスケープしなければなりません。

GHSA-27gc-wj6x-9w55Keycloak, 2024

error_description をエスケープせず HTML エラーページに反射してしまう欠陥(CWE-79 / CWE-601) — フィッシング / open-redirect 連鎖。二層の緩和: (1) error_description の値はハードコードされた sentinel 文字列のクローズドカタログで、RP の byte 列が直接届かない(2)通信路上では url.Values.Encode がリダイレクト面を percent-encode し、html.EscapeString が form_post 面の action= と value= を共にエスケープ

RFC 6749 §4.1.2.1 / RFC 9700 §4.11.2 / CWE-79

  • internal/jarm.TestWriteFormPost_EscapesRedirectAndJWT
  • internal/authorizeendpoint.TestEmitPlainResponse_EncodesHostileBytes_NoXSS
  • internal/authorizeendpoint.TestEmitPlainResponse_StripsControlBytes
  • internal/jarm.TestWriteParamsFormPost_EscapesValues

CVE-2026-44203GHSA-fq9h-c788-fx73

form_post 出力が反射値をエスケープしない

RFC 6749 §4.1.2.1 / RFC 9700 §4.11.2 / CWE-79

  • internal/jarm.TestWriteFormPost_EscapesRedirectAndJWT
  • internal/jarm.TestWriteParamsFormPost_EscapesValues両方の writer で HTML escaping を検証

運用の可観測性(失効の失敗が見えない問題) ​

2 件回帰テストで固定

/revoke がストレージエラーを黙って握りつぶしていた欠陥。RFC 7009 §2.2 は通信路上の 200 応答を維持することを要求し続けるため、失効処理が実際に失敗しても運用側に観測可能な信号がない状態でした。本ライブラリは通信路上の 200 を維持しつつ、NotFound 以外のストア障害では token.revoke_failed 監査イベントを発火し、SOC ツール側で「気付かれにくい失敗」クラスを検知できるようにしています

RFC 7009 §2.2

  • internal/revokeendpoint.TestHandler_RefreshToken_StoreFault_EmitsAudit

CVE-2026-55221audit logging

交換可能な生の認可コードが audit log に漏れる

audit redaction invariant

  • internal/authorizeendpoint.TestEndToEnd_AuditNeverCarriesRawAuthorizationCode
  • internal/audit.TestSlog_RedactsExtrasWithoutWrappercode digest と extra field の redaction

デバイス認可 grant ​

1 件回帰テストで固定

device_code を検証せずに device_code の token を発行

RFC 8628 §3.4

  • test/scenarios.TestScenario_DEV_024_TokenRequestMissingDeviceCode
  • test/scenarios.TestAdvisory_UnknownDeviceCodeMintsNoToken発行されたことのない code では何も発行せず、設計どおり expired_token を返す
  • test/scenarios.TestScenario_DEV_027_TokenRequestClientMismatch別のクライアントに発行した code では何も発行しない

DoS / パース安全性 ​

JOSE と各エンドポイントの fuzz ハーネスが、細工された入力でも panic を起こさないことを保証します。下記の endpoint ハーネスは未認証の form envelope だけを検証し、認証後の token 処理や JWE 復号には到達しません。

対象fuzzer またはテスト防いでいる CVE リスク
JOSE パースinternal/jose.FuzzJOSEParseCWE-400 / oversized compact JWS とアルゴリズム解析。ParseSigned だけを検証し、JWE 復号は含みません
JWE 復号internal/jose.TestDecrypt_ZipBombResistance
internal/jose.TestDecrypt_PlaintextSizeCap_OverLimit
CVE-2024-29371、CVE-2025-62706(展開後 plaintext の上限)
PAR エンドポイント bodyinternal/parendpoint.FuzzPARFormBody未認証 form envelope のサイズ・パース制限。JWE は対象外
Introspection エンドポイント bodyinternal/introspectendpoint.FuzzIntrospectFormBody未認証 form envelope のサイズ・パース制限。JWE は対象外
Revocation エンドポイント bodyinternal/revokeendpoint.FuzzRevokeFormBody未認証 form envelope の panic 防止。JWE は対象外

FuzzJOSEParse は compact JWS を解析する jose.ParseSigned だけを対象とし、JWE 復号には入りません。WithEncryptionKeyset を設定しない provider は JWE 形の request object を拒否しますが、設定した provider はネストした compact JWE を復号してから内側の JWS を検証します。TestDecrypt_ZipBombResistance と TestDecrypt_PlaintextSizeCap_OverLimit が JWE 復号の plaintext 上限を直接固定します。入力形だけを根拠に依存ライブラリの advisory をカバーしたとは扱いません。

依存ライブラリ側の advisory(クラス単位のみ) ​

7 件クラス単位でのみ掲載

advisory registry は、これらを FuzzJOSEParse に紐づけています。この fuzzer は compact JWS のパースだけを行い、JWE 復号には入りません。いずれも依存ライブラリ自体の挙動を検証するテストは本リポジトリになく、限界が見えるようにここへ載せています。依存ライブラリの修正は govulncheck とバージョン更新で取り込みます。

細工された入力による JWE 復号時の panic

internal/jose.FuzzJOSEParse が ParseSigned の panic-free を保ちます。JWE 復号は検証しません

病的な JSON によるパース DoS

同じ panic を起こさない契約です。リソース上限の assertion はありません

圧縮による増幅。CVE-2024-29371 と同じクラスタ

ParseSigned に圧縮経路はありません。復号側の上限は前掲の CVE-2024-29371 行が担います

JSON 形式パースでの panic

internal/jose.TestParseSigned_RejectsJSONSerialisationShapes が compact-only 境界での拒否を固定します。依存ライブラリの JSON パーサーは対象外です

JWE の圧縮 DoS と悪意ある JWE パラメータ

compact-only の ParseSigned は JWE パラメータに到達しません。直接のテストはありません

CBC モード JWE の padding oracle の可能性

直接のテストはありません

スコープ外 — 組み込み側の責務 ​

36 件OP のスコープ外

下記の advisory は検討のうえ除外したものです。該当する面が OP に存在しないか、本ライブラリを組み込むアプリケーション側の責務です。テストでは固定しておらず、カバー済みとしても数えません。

デバイス承認ページが、要求元のクライアントとその scope を表示しなかった

OP はデバイスの確認ページを提供しません。組み込み側が op/devicecodekit の上に作ります。ApproveUserCode の godoc は、FindByUserCode で得たクライアントと scope をプロンプトに表示することを求めています。

TLS 1.0 / 1.1 での応答、TLS 再ネゴシエーション DoS、SNI routing による mTLS 要件の迂回

本ライブラリは HTTP サーバを所有せず、TLS の終端も SNI による routing もしません。TLS の構成は組み込み側の責務です。セキュリティ方針 を参照してください。

token endpoint の URL、CIBA の通知 endpoint、AWS-ALB の JWKS resolver 経由の SSRF

egress の制御は組み込み側のネットワーク境界です。AWS-ALB や通知 callback の面は本ライブラリに存在しません。存在する jwks_uri の SSRF クラスは CVE-2026-1180 でカバーしています。

RP が ID Token の nonce を保存・検証しなかった、またはブラウザのセッションに紐づけなかった

callback での nonce 検証は RP の責務です。OP は nonce を ID Token に載せます。

GHSA-wxw3-q3m9-c3jrBetter Auth

CVE-2026-61687Hatchet

CVE-2026-62322python-social-auth

CVE-2026-84178Apache Camel

CVE-2026-84312Nginx-UI

CVE-2026-108738Traccar

ログイン CSRF。RP が OAuth の state を省略・誤った束縛・既定値のまま運用した

state の生成と callback での検証は RP の責務です。OP は state をそのまま返します(RFC 6749)。

CVE-2026-79650Apache CXF

RP が攻撃者の制御する state をログイン後のリダイレクト先に使った

ログイン後の遷移は RP の責務です。OP は登録済みの redirect_uri と post_logout_redirect_uri にしかリダイレクトしません。

CVE-2026-62367Vikunja

CVE-2026-106460Backstage

CVE-2026-63472Vendure

CVE-2026-92161FriendsOfFlarum OAuth

RP が email_verified を無視し、メールアドレスだけで外部ログインを既存ローカルアカウントに紐づけた

アカウント連携は RP の責務です。OP の側では、組み込み側の claims source が返す内容どおりに email_verified を返します。

CVE-2026-94276Apache APISIX

リソースサーバが、別の issuer で active な introspection 結果を受け入れた

introspection 結果に対する issuer の確認はリソースサーバの責務です。本 OP は単一の issuer を提供し、応答にそれを含めます。

未認証または無関係な subject への passkey / TOTP 登録、もしくは再認証なしでの登録

OP は登録用 endpoint を公開せず、ログインチェーンにも登録ステップがありません。passkeykit と totpkit は subject を組み込み側から受け取るため、先にユーザを認証するのは組み込み側です(subject の束縛は op/passkeykit.TestFinish_RejectsSubjectMismatch が固定しています)。

ユーザ ID しか保持しない remembered-2FA トークン

OP は remembered-device や remembered-factor のレコードを持ちません。デバイスの信頼は組み込み側の RiskAssessor が供給します。

ユーザ入力や同意なしでの device code 承認、取得済み確認リンクの再利用、最低認証レベルを無視した device grant

/device の確認ページは組み込み側が持ちます。OP は verification_uri_complete を発行するだけで、承認は devicecodekit.ApproveUserCode の明示的な呼び出しです。subject と auth_time は組み込み側が渡します。

revocation 応答に JSONP callback が反射された

どの endpoint にも JSONP モードはありません。revocation は JSON または空の 200 で応答します。

x と d が食い違う OKP JWK

OP は秘密鍵の JWK を取り込みません。鍵は組み込み側から Go の鍵値として渡され、受信する JWK は公開鍵のみです。

Policy Enforcer の access-denied パス経由の認可バイパスと、UMA の permission ticket バイパス

リソースサーバでのポリシー適用はリソースサーバの責務で、UMA は実装していません。

GHSA-68wq-phq7-p2vgSilverStripe MFA

パスワードリセットのフローが MFA の完了前にセッションを発行した

パスワードリセットは組み込み側のアカウント管理に属します。OP にパスワードリセットのフローはありません。

自前実装の SAML XML パーサー

SAML は実装していません(OP のみ)。

このリストに 意図的に 含めないもの ​

  • 本ライブラリ自身に対する CVE。 このマトリクスは advisory の最新台帳ではありません。CVE が発生した場合は SECURITY.md と 脆弱性報告 のフローで扱い、本ページで特定時点の件数を管理しません。
  • 依存ライブラリ・ランタイム側の欠陥。 CI の govulncheck で追跡し、バージョン更新で解決します。上の節に載せるのは、対象となるライブラリ契約を専用テストで示せる場合だけです。入力形や任意機能を無効にしていることはカバレッジとして扱いません。registry 上でクラス単位の扱いになっているものは、上の「依存ライブラリ側の advisory」にまとめています。Go 標準ライブラリの修正(例: Encrypted Client Hello の漏えいを扱う GO-2026-5856)は、core module が宣言する Go baseline と toolchain で取り込みます。この境界を確認するときは core の go.mod を参照してください。
  • 追跡中だが未カバーの advisory。 ソースリポジトリの registry で tracking 状態にある advisory は、具体的なテストで契約を固定するまで本ページに載せません。固定した時点でカバー済みの節に加えます。
  • CVE 番号が無い理論的攻撃。 仕様セクション(例: RFC 8725 §3.x)だけを動機としたテストはコードベースに存在しますが、欠陥クラスを既知の特定 CVE と紐づけられない限り本ページには載せません。

全体像 ​

CVE 起点のテストは、他の 3 種の回帰素材と並んで存在します:

  1. 仕様シナリオ — リポジトリの test/scenarios/ が、CVE の有無に関わらず OIDC / OAuth / FAPI の仕様文言を直接カタログ化しています。
  2. OFCS 適合ハーネス — OFCS 適合状況 を参照してください。OpenID Foundation 認定テストスイートが、FAPI 2.0 プランに沿って公開エンドポイントを end-to-end で実行します。
  3. Fuzz ハーネス — 上で列挙したものです。seed corpus は PR ごとに通常のテストとして実行され、make fuzz は seed を超えて探索します。

本ライブラリが回帰テストで固定化すべき CVE リスクがここに載っていない場合は Issue を起票してください。公開で議論すること自体が脆弱性に該当する内容であれば、脆弱性報告 のフローに従ってください。