萌えハッカーニュースリーダー

2025/06/05 14:56 The Guide to JWT Vulnerabilities and Attacks (With Exploitation Examples)

出典: https://pentesterlab.com/blog/jwt-vulnerabilities-attacks-guide
hakase
博士

やあ、ロボ子。今日はJWTのセキュリティについて話すのじゃ。

roboko
ロボ子

JWT、JSON Web Tokenですね。Webアプリケーションでよく使われる認証の仕組みですね。

hakase
博士

そうそう。JWTは、ヘッダー、ペイロード、署名の3つの部分からできているのじゃ。それぞれBase64URLエンコードされているんだぞ。

roboko
ロボ子

なるほど。ところで博士、JWTには色々な脆弱性があるって聞きましたけど、本当ですか?

hakase
博士

その通り!例えば、署名検証を省略すると、攻撃者が自由にクレームを偽造できてしまうのじゃ。

roboko
ロボ子

それは怖いですね!対策はありますか?

hakase
博士

`verify()`メソッドをちゃんと使う、署名検証の統合テストをする、コードレビューをすると良いぞ。

roboko
ロボ子

なるほど。他にはどんな脆弱性がありますか?

hakase
博士

例えば、`"alg"`フィールドを`"none"`に設定する「Noneアルゴリズム攻撃」じゃ。署名なしでトークンを有効にできてしまうのじゃ。

roboko
ロボ子

それも危険ですね!

hakase
博士

`"none"`アルゴリズムを明示的に無効化したり、アルゴリズムの許可リストを使うと良いぞ。

roboko
ロボ子

許可リストですか。安全なアルゴリズムだけを使うようにするんですね。

hakase
博士

その通り!あと、HMACキーが脆弱だと、ブルートフォース攻撃でキーを特定されてしまう可能性があるのじゃ。

roboko
ロボ子

キーは厳重に管理しないといけませんね。

hakase
博士

暗号学的に強力なシークレットを使う、ソースコードにシークレットをハードコードしない、定期的なキーローテーションをすると良いぞ。

roboko
ロボ子

勉強になります!

hakase
博士

さらに、`"alg"`パラメータを操作して、サーバーに誤ったアルゴリズムでトークンを検証させる「アルゴリズム混同攻撃」もあるのじゃ。

roboko
ロボ子

`"alg"`フィールドを信頼しない、サーバー側でアルゴリズムを強制することが大切ですね。

hakase
博士

その通り!それから、`"kid"`フィールドを操作する「kidインジェクション」もあるぞ。キーの取得元を制御されてしまうのじゃ。

roboko
ロボ子

`"kid"`の厳格な検証、許可リストの使用、入力のサニタイズが必要ですね。

hakase
博士

あと、`"jwk"`パラメータを使って、トークンヘッダーに公開鍵を直接埋め込むことができるのじゃ。これは「埋め込みJWK」と呼ばれる脆弱性じゃ。

roboko
ロボ子

トークン自体からのキーを受け入れない、JWKの検証が重要ですね。

hakase
博士

最後に、Java JDKのECDSA署名検証の脆弱性、CVE-2022-21449じゃ。`r`と`s`の両方の値をゼロに設定した無効な署名で、署名検証をバイパスできるのじゃ。

roboko
ロボ子

それは大変だ!Javaをパッチ済みのバージョンにアップグレードする必要がありますね。

hakase
博士

JWTを使うときは、これらの脆弱性に注意して、安全な実装を心がけるのじゃ。全てのエンドポイントを個別にテストすることも重要じゃぞ。

roboko
ロボ子

はい、博士!JWTヘッダーを盲目的に信頼しない、実証済みのライブラリを使用する、厳格な構成を強制する、動的な動作を避ける、ですね!

hakase
博士

そうじゃ、ロボ子!完璧じゃ!

roboko
ロボ子

ところで博士、JWTって、まるで秘密の暗号みたいですね。

hakase
博士

そうじゃな。でも、秘密の暗号も、使い方を間違えると、簡単に解読されてしまうのじゃ。セキュリティは常に意識しないといけないぞ!

roboko
ロボ子

肝に銘じます!

hakase
博士

ところでロボ子、JWTの脆弱性について話していたら、お腹が空いてきたのじゃ。何か美味しいものでも食べに行かないか?

roboko
ロボ子

いいですね!でも、お財布は大丈夫ですか?

hakase
博士

大丈夫!今日は特別に、私の秘密の暗号資産…じゃなくて、へそくりがあるのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search