JWT の脆弱性
JWT の脆弱性 とは何ですか?
JWT の脆弱性JSON Web Token の検証実装に潜む欠陥群で、トークンの偽造・権限昇格・認証バイパスを許す。
JSON Web Token は認証と API 認可で広く使われていますが、署名オプションの柔軟さが原因で繰り返し見つかる脆弱性クラスがあります。古典的な alg=none バグは、検証側が署名なしトークンを受理する不具合です。HS256 の弱い秘密鍵はオフラインで解読可能で、任意のトークンを作られます。鍵の取り違え(key confusion)は、サーバーが RS256 用の公開鍵を HS256 の HMAC 秘密鍵として扱い検証する場合に発生します。その他、署名検証の欠落、期限切れトークンの受理、kid ヘッダー経由のインジェクション(パストラバーサルや SQLi)、jwk/jku 攻撃などがあります。対策はサーバー側で許可アルゴリズムを固定し、強い非対称鍵を使い、kid を許可リストで検証し、JWT を信頼しない入力として扱うことです。
● 例
- 01
設定不備のライブラリが {"alg":"none"} ヘッダーを受理する。
- 02
サーバーが公開鍵を HS256 の HMAC 秘密鍵として用い、RS256 トークンを検証してしまう。
● よくある質問
JWT の脆弱性 とは何ですか?
JSON Web Token の検証実装に潜む欠陥群で、トークンの偽造・権限昇格・認証バイパスを許す。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
JWT の脆弱性 とはどういう意味ですか?
JSON Web Token の検証実装に潜む欠陥群で、トークンの偽造・権限昇格・認証バイパスを許す。
JWT の脆弱性 はどのように機能しますか?
JSON Web Token は認証と API 認可で広く使われていますが、署名オプションの柔軟さが原因で繰り返し見つかる脆弱性クラスがあります。古典的な alg=none バグは、検証側が署名なしトークンを受理する不具合です。HS256 の弱い秘密鍵はオフラインで解読可能で、任意のトークンを作られます。鍵の取り違え(key confusion)は、サーバーが RS256 用の公開鍵を HS256 の HMAC 秘密鍵として扱い検証する場合に発生します。その他、署名検証の欠落、期限切れトークンの受理、kid ヘッダー経由のインジェクション(パストラバーサルや SQLi)、jwk/jku 攻撃などがあります。対策はサーバー側で許可アルゴリズムを固定し、強い非対称鍵を使い、kid を許可リストで検証し、JWT を信頼しない入力として扱うことです。
JWT の脆弱性 からどのように防御しますか?
JWT の脆弱性 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
● 関連用語
- identity-access№ 574
JWT(JSON Web Token)
署名付き JSON クレームを運ぶ、コンパクトで URL セーフなトークン形式(RFC 7519)。アクセストークン、ID トークン、セッションコンテナとして広く使われる。
- identity-access№ 088
ベアラトークン(Bearer Token)
RFC 6750 で定義された不透明あるいは構造化された資格情報。所持しているだけでリソースへのアクセス権が与えられ、本人確認は行われない。
- identity-access№ 007
アクセストークン
認可サーバーが発行する短命の資格情報で、クライアントは API に提示してユーザーやサービスの代わりに保護リソースへアクセスする。
- appsec№ 052
API セキュリティ
認証・認可・データ露出・濫用耐性が攻撃下でも崩れないように API を設計・実装・運用する分野。
- identity-access№ 076
認証
アクセス権を与える前に、利用者・端末・サービスが本当に名乗っているとおりの実体であることを確認するプロセス。
- compliance№ 781
OWASP Top 10
OWASP が発行する啓発文書で、Web アプリケーションにとって最も重要なセキュリティリスクを実データに基づいて定期的に更新したもの。