Hello there, ('ω')ノ
💥 JWT攻撃とは
JWT攻撃とは、JWTを改ざんしてサーバに送り、意図しない動作を引き起こす行為です。主な目的は次の2つ:
- 他人になりすましてログイン
- 本来禁止された操作の実行(管理者権限の取得など)
攻撃者が自分で「正しく署名されたJWT」を作成できてしまうと、あらゆるユーザーになりすましが可能になります。
🧨 JWT攻撃の影響(Impact)
JWTは主にログインやセッション管理に使われるため、次のような深刻な影響があります:
- 🔓 ログイン認証のバイパス
- 🔐 管理者や他のユーザーアカウントへのアクセス
- 💥 アプリケーション全体の制御奪取
🔍 JWT脆弱性が生まれる原因
JWTの仕様は柔軟なため、開発者の設定次第で実装ミスが起きやすいです。
よくある脆弱性の原因は以下の通り:
脆弱性の種類 | 内容 |
---|---|
🔓 署名の検証漏れ | JWTの署名が検証されていない or 無効でも受け入れられる |
🧪 アルゴリズム指定ミス | alg: none を使った署名なしトークンが許可されてしまう |
🔐 秘密鍵の漏洩 | GitHubなどに誤ってアップロード、または推測されやすい鍵 |
🚪 脆弱な暗号化アルゴリズム | 弱い署名アルゴリズム(例:HS256)を使い、辞書攻撃が可能に |
🔧 攻撃者の手法例
例えば、次のような操作を行います:
- JWTのペイロードをBase64でデコード
sub
(ユーザー名)やrole
(権限)をadmin
に変更alg
をnone
に変更(検証なし)- 新しいJWTを構築し、CookieやAuthorizationヘッダーに挿入
🔑 対策のポイント
- 🚫
alg: none
を許可しない - ✅ 署名を必ず検証する
- 🔒 強力な署名アルゴリズム(RS256など)を使う
- 🕵️♀️ 秘密鍵は絶対に外部に漏らさない
- ⏱ 有効期限(exp)の設定を忘れない
Best regards, (^^ゞ