---
title: "Python の認証ライブラリ Authlib で、署名が 1 つもない JWS（JSON 形式）が「検証済み」として通ってしまう不具合（CVE-2026-96760）: 1.9.0 未満が対象"
url: https://n-t-p.io/worldsecurity/articles/authlib-jws-json-empty-signatures-bypass-1-9-0-2026-96760
lang: ja
kind: 速報
category: 脆弱性・CVE
author: World Security 編集部
published: 2026年10月31日
updated: 2026年10月31日
severity: 緊急
cve: CVE-2026-96760
---

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

> **TL;DR:** Python の認証・認可ライブラリ Authlib で、JSON 形式の JWS の `signatures` が空の配列だと、署名を 1 つも調べないまま本文が「検証済み」として返る不具合（CVE-2026-96760、GitHub は Critical、GitHub 提供の CVSS v3.1 は 9.1、CWE-347）。鍵がなくても通り、本文に権限などが入っていると認証の回避になりうる。修正版は 1.9.0。NVD は評価待ちで、第三者の CVSS は 9.8。EPSS 0.43%、KEV なし（当サイトでは未再現）。

**要点**
- JSON 形式の JWS の署名配列が空だと、検証成功の印が立ったままになり、鍵がなくても本文が「検証済み」として返る（勧告の説明、当サイトでは未再現）
- 本文にユーザー名や権限が入る使い方では、認証の回避になるおそれがある。署名を壊した場合や配列を外した場合は拒否される（勧告の記載）
- 対象は authlib 1.8.0 以下（勧告の本文は 1.9.0 より前）。修正版は 1.9.0（2026-10-14 UTC に公開、最新は 1.9.1）
- すぐ更新できないときは、deserialize_json に渡す前に signatures が空でないことを自分のコードで確かめる（記事側の推定）
- NVD は評価待ち（第三者の CVSS v3.1 は 9.8）、EPSS は 0.43%（10/31）、KEV は掲載なし。悪用の報告は確認できていない

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（ネットワーク・低複雑度・権限不要・ユーザー操作不要。機密性・完全性が高、可用性は影響なし） |
| NVD | Awaiting Analysis（NVD 自身の評価はまだ）。第三者が付けた CVSS v3.1 は 9.8（可用性も高としている）で、GitHub の 9.1 と食い違う |
| EPSS | 0.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 に基づきます。


## 出典
- [GitHub Advisory GHSA-6v38-4h7w-rj9h](https://github.com/advisories/GHSA-6v38-4h7w-rj9h) — GitHub
- [NVD CVE-2026-96760](https://nvd.nist.gov/vuln/detail/CVE-2026-96760) — NIST NVD
- [修正コミット 6c11a02](https://github.com/authlib/authlib/commit/6c11a02da8730914cea08ec195f1108a40dc6733) — GitHub
- [修正プルリクエスト #938](https://github.com/authlib/authlib/pull/938) — GitHub
- [Authlib v1.9.0 リリース](https://github.com/authlib/authlib/releases/tag/v1.9.0) — GitHub
- [FIRST EPSS CVE-2026-96760](https://api.first.org/data/v1/epss?cve=CVE-2026-96760) — FIRST

---
出典: World Security（株式会社NTP） https://n-t-p.io/worldsecurity/articles/authlib-jws-json-empty-signatures-bypass-1-9-0-2026-96760