Authlibの欠陥により、JSON Web Signature認証をバイパス可能に

Authlibの根本的な役割は、認証済みの信頼できるデータと悪意ある偽造データを区別することです。ところが、巧妙に細工されたJSON Web Signature(JWS)を使うと、攻撃者は暗号署名を一切用意せずに、この重要な検証プロセスを完全に回避できてしまいます。

この脆弱性は「CVE-2026-96760」として識別されており、Authlib 1.7.2以前のバージョンに深刻な影響を及ぼします。Authlibは、OAuth、OpenID Connect、JWT、JWS、JWEといったプロトコルを開発者が容易に統合できるようにする、著名なPythonライブラリです。複雑なWebアプリケーションや最新のマイクロサービス基盤で、トークンの作成と厳格な検証を行う用途にも使われています。

空の署名配列が引き起こす仕組み

問題の根本は、汎用JWS JSONシリアライゼーションの処理、具体的には`JsonWebSignature.deserialize_json()`関数の内部にあります。通常、JWSはペイロードと1つ以上の暗号署名で構成されます。受信側のシステムは、これらの署名を使ってデータの発信元を確実に認証し、構造上の完全性を保証します。ところがAuthlibは、署名配列が完全に空のオブジェクト(`”signatures”:[]`)を受け入れてしまいます。

この条件下では、ライブラリは署名の検証をまったく行いません。それにもかかわらず、ペイロードを認証に成功したものとして返します。そのため、攻撃者に秘密鍵やその他の秘密情報は必要ありません。署名リストを空にしたまま、任意のペイロードを送信するだけで済みます。その結果、ホスト側のアプリケーションは、偽造されたユーザーID、昇格されたロール、広範なアクセススコープ、そのほか改ざんされたデータを無条件に信頼しかねません。JSON Web Tokenの基本原則は、堅牢な署名があれば保護対象のコンテンツを気づかれずに改ざんすることはできない、という前提に本質的に依存しています。

想定される影響と修正をめぐる課題

具体的な影響は、各プロジェクトがAuthlibをどのように組み込み、利用しているかによって大きく変わります。侵害されたサービスは、偽造されたIDを受け入れたり、悪意をもって昇格された権限を付与したり、偽装されたサービス間通信を処理したりするおそれがあります。改ざんされた悪意ある設定を無条件に信頼する可能性もあります。ただし、この欠陥がAuthlibを使うすべてのアプリケーションの自動的かつ全面的な侵害を意味するわけではありません。脆弱な実行パスが、影響を受ける欠陥関数を通じてJSON表現のJWSデータを明示的に処理している場合に限られます。

脆弱性の公開時点で、Authlibには公式で確定した修正は存在していませんでした。CERT/CCの脆弱性ノートによると、CERT/CCは主任開発者との連絡を試みたものの、正式な見解は得られませんでした。そのため、各組織にはプロジェクトのリポジトリを注意深く監視し、今後の更新に備えるよう勧告しています。同じエコシステムに属する別パッケージ「joserfc」と比べると、この状況はいっそう際立ちます。joserfcはバージョン1.7.4で、署名配列が空のJWSオブジェクトを厳格に拒否する対応を自ら実装しました。一方、旧来の`authlib.jose`モジュールは、段階的に非推奨化が進められています。

防御策と全体的な背景

CERT/CCは脆弱性情報の中で、高度な攻撃者が有効な鍵素材をまったく持たずに、署名のない任意のデータを送信できると明確に警告しています。パッチ適用済みのAuthlibが一般提供されるまでは、アプリケーション開発者が自ら、有効な署名を持たないJWSを遮断して拒否する必要があります。さらに、JWS JSONシリアライゼーションを使用している箇所をすべて特定できるよう、コードベースを体系的に監査しなければなりません。

非常によく似た誤りは、この春にJavaベースの「pac4j-jwt」ライブラリでも発生しました。このときも、署名のないトークンが暗号検証をすり抜け、任意のペイロードをアプリケーションに渡すことができました。管理者ロールの付与といった危険なものも含まれていました。

暗号署名されたデータと、アプリケーションが最終的に利用するデータとの境界で生じるこうした深刻な不整合は、JWTのエコシステムに限った話ではありません。この8月には、複数のSecurity Assertion Markup Language(SAML)実装で、複雑なXML構造の解析と、対応するデジタル署名の検証との間に生じた体系的な不整合が原因となり、認証バイパスが意図せず可能になりました。

翻訳元: https://meterpreter.org/authlib-cve-2026-96760-jws-vulnerability/

本記事は meterpreter.org の記事を翻訳・要約したものです。