Shikata Ga Nai

Private? There is no such things.

JWT攻撃とは何か?

Hello there, ('ω')ノ

💥 JWT攻撃とは

JWT攻撃とは、JWTを改ざんしてサーバに送り、意図しない動作を引き起こす行為です。主な目的は次の2つ:

  • 他人になりすましてログイン
  • 本来禁止された操作の実行(管理者権限の取得など)

攻撃者が自分で「正しく署名されたJWT」を作成できてしまうと、あらゆるユーザーになりすましが可能になります。


🧨 JWT攻撃の影響(Impact)

JWTは主にログインやセッション管理に使われるため、次のような深刻な影響があります:

  • 🔓 ログイン認証のバイパス
  • 🔐 管理者や他のユーザーアカウントへのアクセス
  • 💥 アプリケーション全体の制御奪取

🔍 JWT脆弱性が生まれる原因

JWTの仕様は柔軟なため、開発者の設定次第で実装ミスが起きやすいです。

よくある脆弱性の原因は以下の通り:

脆弱性の種類 内容
🔓 署名の検証漏れ JWTの署名が検証されていない or 無効でも受け入れられる
🧪 アルゴリズム指定ミス alg: none を使った署名なしトークンが許可されてしまう
🔐 秘密鍵の漏洩 GitHubなどに誤ってアップロード、または推測されやすい鍵
🚪 脆弱な暗号化アルゴリズム 弱い署名アルゴリズム(例:HS256)を使い、辞書攻撃が可能に

🔧 攻撃者の手法例

例えば、次のような操作を行います:

  1. JWTのペイロードをBase64でデコード
  2. sub(ユーザー名)やrole(権限)をadminに変更
  3. algnoneに変更(検証なし)
  4. 新しいJWTを構築し、CookieやAuthorizationヘッダーに挿入

🔑 対策のポイント

  • 🚫 alg: none を許可しない
  • 署名を必ず検証する
  • 🔒 強力な署名アルゴリズム(RS256など)を使う
  • 🕵️‍♀️ 秘密鍵は絶対に外部に漏らさない
  • 有効期限(exp)の設定を忘れない

Best regards, (^^ゞ