Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 646

JWT の脆弱性

監修Cybersecurity entrepreneur & security researcher

JWT の脆弱性 とは何ですか?

JWT の脆弱性JSON Web Token の検証実装に潜む欠陥群で、トークンの偽造・権限昇格・認証バイパスを許す。


JSON Web Token は認証・認可のクレームを運びますが、ヘッダーで宣言される署名アルゴリズムの柔軟さが、繰り返し現れるいくつかの脆弱性クラスを生み出してきました。alg=none バグは Tim McLean 氏が 2015 年に公表したもので、検証側がトークン自身の alg ヘッダーを信頼し、空の署名に対して true を返す「none」検証器へ処理を委ねてしまう場合に発生します。これにより攻撃者はペイロードを書き換えて署名を削除できます。この不具合は Node の jsonwebtoken の 4.2.2 より前のバージョンで修正されました(CVE-2015-9235)。

**鍵の取り違え(key confusion、CVE-2016-10555)**はより巧妙です。サーバーが RS256 と HS256 の両方を受理する場合、攻撃者はサーバーの 公開 RSA 鍵を共有秘密として HMAC でトークンを署名します。素朴な検証器はその公開鍵を HS256.verify() に渡してしまい、偽造が通ってしまいます。関連する問題として、hashcat でオフラインに解読可能な弱い HS256 秘密鍵、exp/nbf チェックの欠落、ヘッダーインジェクションのシンク(kid のパストラバーサルや SQL インジェクション)、そして攻撃者が所有する鍵を検証に指し示す攻撃者制御の jwk/jku/x5u フィールドなどがあります。2022 年には jsonwebtoken の CVE-2022-23529 が、細工した鍵オブジェクトを介した RCE の懸念を提起しました(後に、悪用の前提条件が争点となり撤回されました)。

対策としては、受理する署名アルゴリズムをサーバー側で固定し、信頼できない入力から alg を決して読み取らないこと、強い非対称鍵を使うこと、kid を許可リストと照合すること、埋め込まれた鍵 URL を無視すること、有効期限を強制すること、そしてすべての JWT フィールドを敵対的な入力として扱うことが挙げられます。

flowchart TD
  A[攻撃者が有効な JWT を入手] --> B{ヘッダーを改ざん}
  B -->|alg none、署名を削除| C[検証器は検査を省略?]
  B -->|RS256 を HS256 へ| D[公開鍵で HMAC]
  B -->|jku / kid が攻撃者の鍵を指す| E[不正な鍵で検証]
  C -->|Yes| F[偽造トークンが受理される]
  D -->|Yes| F
  E -->|Yes| F
  F --> G[権限昇格 / 認証バイパス]
  C -->|alg を固定| H[拒否]
  D -->|alg を固定| H
  E -->|kid を許可リスト化| H

  1. 01

    設定不備のライブラリが {"alg":"none"} ヘッダーを受理する。

  2. 02

    サーバーが自身の公開鍵を HS256 の HMAC 秘密鍵として用い、RS256 トークンを検証してしまう。

よくある質問

JWT の脆弱性 とは何ですか?

JSON Web Token の検証実装に潜む欠陥群で、トークンの偽造・権限昇格・認証バイパスを許す。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。

JWT の脆弱性 とはどういう意味ですか?

JSON Web Token の検証実装に潜む欠陥群で、トークンの偽造・権限昇格・認証バイパスを許す。

JWT の脆弱性 からどのように防御しますか?

JWT の脆弱性 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。

関連用語