Skip to content

CVE 回帰マトリクス

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

本ページはそのテスト群の公開リストです。ここに載っている CVE には、少なくとも 1 本のユニット / fuzz テストが対応し、対象を実際に呼び出して拒否動作を pin(固定化)しています。テストへの参照は安定しており、表の各行に挙げたファイル名・テスト名はリポジトリに実在します。

表の読み方

  • CVE — 他実装に対する元の脆弱性開示です。本ライブラリに対する CVE 記録ではありません。テストが防ごうとしている 欠陥クラス を示すためのフィールドです。
  • クラス — 根本的な欠陥の種類(algorithm confusion、redirect_uri マッチング、PKCE ダウングレード等)。
  • RFC アンカ — テストが pin している仕様セクション。
  • テスト — 該当箇所が退行したらビルドを落とすテスト。

JOSE / JWT 検証

CVEクラスRFC アンカテスト
CVE-2015-9235 (jsonwebtoken)alg=none 受理RFC 8725 §3.1internal/jose.FuzzJOSEParse (alg=none seed)
internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
CVE-2016-10555 (jwt-simple)alg=HS256 受理、公開鍵を HMAC secret として使用RFC 8725 §2.1internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
CVE-2015-2951 (jose4j)alg=none 受理RFC 8725 §3.1internal/jose.FuzzJOSEParse
CVE-2024-54150 (cjwt)algorithm confusionRFC 8725 §2.1internal/tokens.TestVerify_AlgConfusion_HSUsingECPublicKeyBytesAsSecret
CVE-2026-22817 / -27804 / -23552 (Hono JWT 2026 cluster)大文字小文字違いの alg=NONE で deny-list を回避RFC 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-2018-0114 (Cisco / node-jose)jwk ヘッダの盲信 — JWS 自身が運ぶ鍵で検証してしまうRFC 8725 §3.1–3.5internal/jose.TestParseSigned_HeaderInjection_NeverFetches
internal/jose.FuzzJOSEParse (jku seed)
CVE-2018-1000531 (inversoft prime-jwt)alg ヘッダのダウングレード + jwk ヘッダの盲信RFC 8725 §3.1internal/jose.TestParseSigned_HeaderInjection_NeverFetches
CVE-2017-11424 (python-jose 系)ヘッダ内の jku URL を辿って鍵を取得RFC 8725 §3.1internal/jose.TestParseSigned_HeaderInjection_NeverFetches
CVE-2019-7644 (Auth0 jsonwebtoken-koa)jwk ヘッダの盲信RFC 8725 §3.1internal/jose.TestParseSigned_HeaderInjection_NeverFetches
CVE-2025-59420 (Authlib)crit 拡張リストを無視RFC 7515 §4.1.11 / RFC 8725 §3.5internal/jose.TestParseSigned_CritHeaderRejectedAtVerify
CVE-2026-32597 (PyJWT)同じ crit 無視欠陥RFC 8725 §3.5internal/jose.TestParseSigned_CritHeaderRejectedAtVerify
CVE-2024-29371 (jose4j JWE 解凍 bomb)細工された JWE によるリソース枯渇RFC 8725 §3.11internal/jose.FuzzJOSEParse (oversize seed)
internal/parendpoint.FuzzPARRequestObject
internal/introspectendpoint.FuzzIntrospectToken
internal/revokeendpoint.FuzzRevokeToken

Authorize / redirect_uri

CVEクラスRFC アンカテスト
CVE-2024-10318 (NGINX OIDC リファレンスモジュール)フロントチャネル id_token が nonce バインディングなしに発行 → セッションフィクセーションOIDC Core §15.5.2 / RFC 9700 §2.1.2internal/authorize.TestRequest_Validate_RejectsImplicitAndHybridResponseTypes (response_type=code 限定)
internal/backchannel.TestSignLogoutToken_EmitsRequiredClaims (logout_token の typ 区別)
CVE-2024-8883 (Keycloak)redirect_uri パッチをワイルドカード / suffix で迂回RFC 6749 §3.1.2.3 / RFC 9700 §4.1internal/authorize.TestRequest_Validate_RedirectURIAttackVariants
CVE-2020-15234 (ory/fosite)大文字小文字違いの redirect_uri が登録値にマッチRFC 6749 §3.1.2.3internal/authorize.TestRequest_Validate_RedirectURIAttackVariants
GHSA-rfq3-w54c-f9q5 (ory/fosite)loopback redirect ルールでホスト / クエリの差し替えを許してしまった欠陥 (修正後はポートのみが実行時に変動可)。本ライブラリは登録値との完全一致のみ許容するためさらに厳格RFC 6749 §3.1.2.3 / RFC 9700 §4.1internal/authorize.TestRequest_Validate_RedirectURIAttackVariants

PKCE / コード交換

CVEクラスRFC アンカテスト
CVE-2024-23647 (authentik ≤2023.10.6, CVSS 6.1)/tokencode_challenge 無し で発行された code に対しても code_verifier を受理 — PKCE ダウングレードRFC 9700 §4.8 / RFC 7636 §4.6internal/grants/authcode.TestExchange_NoPKCE_RejectsSmuggledVerifier
CVE-2025-4144 (Cloudflare workers-oauth-provider <0.0.5, CVSS 8.1)同じダウングレードを別エコシステムで再現RFC 9700 §4.8internal/grants/authcode.TestExchange_NoPKCE_RejectsSmuggledVerifier

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

CVEクラスRFC アンカテスト
GHSA-vh7g-p26c-j2cw (dexidp/dex, 2024)フロントチャネルで横取りした認可コードを 別の client_id で交換して、被害者向けに発行されたトークンを取得できた欠陥。構造的緩和は (code, client_id, redirect_uri[, code_verifier]) のタプル一致を交換時に強制することRFC 6749 §4.1.3 / OIDC Core §3.1.3.4internal/grants/authcode.TestExchange_RejectsClientMismatch

クライアント認証 / private_key_jwt

CVEクラスRFC アンカテスト
CVE-2025-27370 (OIDF 連携、OIDC 系統)private_key_jwt aud confusion: 鍵を複数 AS で使い回したクライアントを、敵対 AS が中継してなりすましRFC 7523bis / FAPI 2.0 §5.2.2internal/clientauth.TestPrivateKeyJWTVerifier_AudIssuer_AcceptedViaAuxAudiences
CVE-2025-27371 (IETF 連携、OAuth 2.0 系統)同じ欠陥、OAuth プロファイル系統RFC 7523bisinternal/clientauth.TestPrivateKeyJWTVerifier_AudIssuer_AcceptedViaAuxAudiences
CVE-2020-15222 (ory/fosite < 0.31.0, GHSA-mh3m-8c74-74xh)private_key_jwtjti の一意性が強制されない — assertion replayRFC 7523 §3 / CWE-345internal/clientauth.TestPrivateKeyJWTVerifier_JTIReplay_Rejected
GHSA-v3q9-2p3m-7g43 (ory/fosite, 2020 cluster)同じ jti リプレイ欠陥クラスが別 GHSA として再開示されたもの。構造的緩和は同一 (assertion の exp 期間中、jti ごとに 1 回限りの使用)RFC 7523 §3 / CWE-345internal/clientauth.TestPrivateKeyJWTVerifier_JTIReplay_Rejected

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

CVEクラスRFC アンカテスト
GHSA-xhpr-465j-7p9q (Keycloak, 2024)メール検証経由の初回ログインフィッシング (CWE-384 セッションフィクセーション)。信頼境界をまたぐ前から存在していたセッションが検証後も有効なまま使われ、cookie を仕込んだ攻撃者が検証後の信頼に乗ってしまう欠陥。構造的緩和は信頼境界でセッション ID をローテーションし、CreatedAt は維持して攻撃者がローテーションを誘発しても寿命を延ばせないようにすることOIDC Core §3.1.2.7internal/sessions.TestManager_Rotate_IssuesFreshIDPreservingChooserGroup
internal/sessions.TestManager_Rotate_PreservesCreatedAt

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

CVEクラスRFC アンカテスト
GHSA-9r3w-4j8q-pw98 (cal.com)TOTP コードを送るだけでパスワード検証を完全に飛ばせた欠陥 — primary factor の証明なしで TOTP ステップが進むRFC 6238 / OIDC Core §2 (acr 意味論)internal/authn.TestLoginFlowTOTPRequiresPrimary (オーケストレータ層)
internal/authn/totp.TestAuthenticator_BeginRequiresSubject
internal/authn/totp.TestAuthenticator_ContinueRequiresSubject (アダプタ層)
GHSA-5jfq-x6xp-7rw2 (Keycloak)二要素バイパス — 同じ構造クラス。同じ二層緩和 (オーケストレータのステップ順序 + アダプタ側の Subject 必須ゲート) で対応RFC 6238 / OIDC Core §2(上と同じテスト群)

JARM / レスポンス署名

CVEクラスRFC アンカテスト
CVE-2023-6927 (Keycloak)response_mode=form_post.jwt で CVE-2023-6134 を迂回 — JARM 追加時に bearer フローと同じ alg 制約が抜けたFAPI 2.0 Message Signing §5.4 / RFC 8725 §3.1internal/jarm.TestSigner_AlgIsES256_Structural
CVE-2023-6134 (Keycloak、親 CVE)元の form-post ダウングレード(6927 経由で追跡)RFC 8725 §3.1internal/jarm.TestSigner_AlgIsES256_Structural

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

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

CVEクラスRFC アンカテスト
GHSA-27gc-wj6x-9w55 (Keycloak, 2024)error_description をエスケープせず HTML エラーページに反射してしまう欠陥 (CWE-79 / CWE-601) — フィッシング / open-redirect 連鎖。二層の緩和: (1) error_description の値はハードコードされた sentinel 文字列のクローズドカタログで、RP の byte 列が直接届かない (2) 通信路上では url.Values.Encode がリダイレクト面を percent-encode し、html.EscapeStringform_post 面の action=value= を共に escapeRFC 6749 §4.1.2.1 / RFC 9700 §4.10internal/jarm.TestWriteFormPost_EscapesRedirectAndJWT
internal/authorizeendpoint.TestBuildRedirectError_EncodesHostileBytes_NoXSS
internal/authorizeendpoint.TestBuildRedirectError_StripsControlBytes

運用の可観測性 (revoke のサイレント失敗)

CVEクラスRFC アンカテスト
GHSA-7mqr-2v3q-v2wm (ory/fosite)/revoke がストレージエラーを黙って握りつぶしていた欠陥。RFC 7009 §2.2 は wire 上の 200 を要求し続けるため、revocation が実際に失敗しても運用側に観測可能な信号がない状態でした。本ライブラリは wire 200 を維持しつつ、NotFound 以外のストア障害では token.revoke_failed audit イベントを発火し、SOC ツーリング側でサイレント失敗クラスを検知できるようにしていますRFC 7009 §2.2internal/revokeendpoint.TestHandler_RefreshToken_StoreFault_EmitsAudit

DoS / パース安全性

JOSE と各エンドポイントの fuzz ハーネスが、細工された入力でも panic を起こさないことを保証します:

対象fuzzer防いでいる CVE クラス
JOSE パースinternal/jose.FuzzJOSEParseRFC 8725 §3.11 / CVE-2024-29371(解凍 bomb), 2015 alg=none cluster
PAR request objectinternal/parendpoint.FuzzPARRequestObjectCVE-2024-29371(CVSS 7.5、jose4j JWE 解凍 bomb)
Introspection tokeninternal/introspectendpoint.FuzzIntrospectTokenCVE-2024-29371
Revocation tokeninternal/revokeendpoint.FuzzRevokeTokenRFC 8725 §3.11 / CVE-2024-29371(panic 免疫)

FuzzJOSEParse の no-panic + JWS-only 契約は、OP が決して受理しない入力形 (compact JWS のみ、JWE / 圧縮の経路は不在、CBC-mode JWE alg は allowlist 外) を起点とする依存ライブラリ側のアドバイザリ群もクラス単位で覆っています:

アドバイザリソースクラスカバレッジ
GHSA-78h2-9frx-2jm8go-joseJWE 復号時の panic — ParseSigned は JWS のみで JWE 復号経路に到達しない
GHSA-c6gw-w398-hv78go-jose病的 JSON でのパース DoS — no-panic fuzz 契約でカバー
GHSA-c5q2-7r4c-mv6ggo-jose圧縮増幅 (CVE-2024-29371 cluster) — compact JWS のみで圧縮経路なし
GHSA-pvcr-v8j8-j5q3lestrrat-go/jwxJSON 形式パース panic — compact-only 拒否でカバー
GHSA-hj3v-m684-v259lestrrat-go/jwxJWE 圧縮 DoS — 同じ compact-only 契約
GHSA-7f9x-gw85-8grflestrrat-go/jwx悪意ある JWE パラメータ DoS — 同じ compact-only 契約
GHSA-rm8v-mxj3-5rmqlestrrat-go/jwxCBC-mode JWE の padding oracle 可能性 — JWS-only allowlist (RS256 / PS256 / ES256 / EdDSA) が CBC-mode JWE alg を全排除

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

  • 本ライブラリ自身に対する CVE。 本ライブラリは pre-v1.0 で、現時点で公表 CVE はありません。発生した場合は SECURITY.md脆弱性報告 のフローで扱い、本ページではありません。
  • OP の入力契約が構造的に弾けない依存ライブラリ側欠陥。 これらは CI の govulncheck で追跡し、バージョン更新で解決します。一方、OP の compact-JWS-only / JWS-only allowlist 契約がトリガとなる入力を構造的に拒否できる場合 (JWE 側の panic、CBC padding oracle など) は、上の表に「クラスカバレッジ」として fuzz ハーネスへのポインタを添えて掲載しています。
  • TLS / トランスポート層の欠陥 (例: GHSA-gr79-9v6v-gc9rGHSA-q8hq-4h99-fj7x)。本ライブラリは HTTP サーバを所有しないため、TLS の構成は組み込み側の責任です。詳細は セキュリティ方針 を参照。
  • SAML 側の欠陥 (例: GHSA-m9hp-7r99-94h5)。本ライブラリは SAML を実装しません (OP のみ)。
  • CVE 番号が無い理論的攻撃。 仕様セクション(例: RFC 8725 §3.x)だけを動機としたテストはコードベースに存在しますが、欠陥クラスを既知の特定 CVE と紐づけられない限り本ページには載せません。

全体像

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

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

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