脆弱性・CVE速報深刻度: 緊急

Python の認証ライブラリ Authlib で、署名が 1 つもない JWS(JSON 形式)が「検証済み」として通ってしまう不具合(CVE-2026-96760): 1.9.0 未満が対象

目次(5)

CVE-2026-96760

Python の認証・認可ライブラリ Authlib の JsonWebSignature.deserialize_json() に、署名の検証をすり抜けられる不具合(CVE-2026-96760、GHSA-6v38-4h7w-rj9h)が公開されました。GitHub の深刻度は Critical、GitHub 提供の CVSS v3.1 は 9.1 です。修正版は 1.9.0 です。ただし、影響を受けるのは、利用者から届いた JSON 形式の JWS をこの関数で検証している場合です(下の「影響を受ける条件」を参照)。

何が起きるか

  • JWS(署名つきのデータ)の JSON 形式には、署名を並べた signatures という配列があります。
  • 勧告によると、Authlib の検証処理は、最初に「検証成功」の印を立て、配列の中の署名を 1 つずつ調べて、失敗したときだけ印を下ろします。
  • そのため、signatures が空の配列だと、調べる署名が 1 つもなく、印が立ったままになります。本文(payload)が「検証済み」として返ります。
  • 勧告の再現例では、鍵を渡さなくても、正しい鍵を渡しても、空の配列は通りました。署名を壊した場合や、配列そのものを外した場合は、ふつうに拒否されます。
  • 本文に利用者の名前や権限が入っている使い方では、認証を回避されるおそれがあります(勧告の記載)。
  • CISA の整理(SSVC)は、悪用 none(確認なし)、自動化 yes、技術的影響 total です(NVD 経由で確認)。CISA の KEV には載っていません(11/1 時点)。

影響を受ける条件

項目内容
対象PyPI の authlib。GitHub の構造化データは 1.8.0 以下、勧告の本文は「1.9.0 より前」
修正版1.9.0(2026-10-14 UTC に公開。同日に 1.9.1 も公開)
弱点CWE-347(暗号署名の不適切な検証)
評価GitHub 提供の CVSS v3.1 は 9.1(ネットワーク・低複雑度・権限不要・ユーザー操作不要。機密性・完全性が高、可用性は影響なし)
NVDAwaiting Analysis(NVD 自身の評価はまだ)。第三者が付けた CVSS v3.1 は 9.8(可用性も高としている)で、GitHub の 9.1 と食い違う
EPSS0.43%(10/31 時点、パーセンタイル 37.6%)
KEV掲載なし

修正の中身

修正コミットは 6c11a02 です(2026-10-01 UTC)。authlib/jose/rfc7515/jws.py で、signatures が空(または None)のときは、検証失敗の印を最初から立てるようにしました。空の配列を渡すと BadSignatureError になることを確かめるテストも加わっています。この変更は、プルリクエスト #938(10/06 UTC に取り込み)の内容です。コミットが v1.9.0 のタグに含まれることは、タグとの比較で確認しました(コミットはタグより前で、タグの側が 26 コミット先)。1.9.0 には、このほかの修正(NumericDate の検証、JOSE の鍵・スコープ・audience の検証など)も同時に入っています。この記事では CVE-2026-96760 に関する部分だけを扱います。

対応

  1. Authlib を 1.9.0 以上に更新します(2026-11-01 時点の最新タグは v1.9.1)。
  2. すぐ更新できない場合は、deserialize_json() に渡す前に、signatures が空でないことを自分のコードで確かめます(勧告が示す修正の考え方に沿った、本記事の推定の回避策です)。
  3. 利用者から届いた JWS を JSON 形式で受け取っているかどうかは、deserialize_json の利用箇所で確認できます(本記事の推定)。コンパクト形式(ピリオド区切り)の JWS を使う場合は、この勧告の再現例の対象ではありません。

未確認の点

  • 悪用の報告は確認できていません。KEV にも載っていません。
  • NVD は自身の評価をしていません。CVSS は GitHub の 9.1 と、第三者の 9.8 で食い違っています。
  • 対象の版は、GitHub の構造化データ(1.8.0 以下)と勧告の本文(1.9.0 より前)で書き方が違います。1.8.0 より古い版で実際に動くかは確認していません。
  • NVD の公開は 9/28 UTC、修正コミットは 10/1 UTC、修正版は 10/14 UTC、GitHub の勧告は 10/27 UTC です。この順序になった経緯は確認できていません。
  • 日付は、タグ・リリースは Git と GitHub の記録、公開日は GitHub と NVD の記載に基づきます。
  • 実際の環境での再現は行っていません。記載は勧告、修正コミット、NVD に基づきます。

この記事について

出典

この記事を共有