Shikata Ga Nai

Private? There is no such things.

Lab: JWT署名未検証による認証バイパス

Hello there, ('ω')ノ

🧪 ラボ概要

目的:JWT (JSON Web Token) に署名が未検証の弱点があるため、トークンを改ざんして管理者権限を取得し、carlos ユーザーを削除します。


🔓 脆弱性の仕組み

このサイトでは、JWTの 署名検証を行っておらず、どんな改ざんもそのまま受け入れられてしまいます。 原理的には、次のように操作できます。


🛠 攻撃の流れ

  1. 自己ログイン ユーザー「wiener」でログインします。

  2. JWTを確認 Proxy → HTTP historyで、/my-account や他のリクエストに含まれるクッキーのJWTを確認します。

  3. ペイロード内容を確認 JWTのペイロード部分(Base64URLエンコードされたJSON)を、Burp Inspector等で開き、sub(ユーザー名)が「wiener」であることを確認します。

  4. 管理ページにリクエスト先変更 パスを /admin に変更し、アクセスを試みると「アクセス拒否」になります。

  5. JWTのペイロード改ざん ペイロード内で sub を「administrator」に書き換え、「Apply Changes」をクリックして改ざん後のJWTを生成します。

  6. 再度 /admin にアクセス 改ざんしたJWTを含むリクエストで /admin にアクセスすると、署名未検証のため管理者画面にログインできてしまいます。

  7. carlosユーザー削除で完了 管理パネル内にある DELETE /admin/delete?username=carlos リンクを実行し、carlos を削除してラボをクリアします。


✅ 成功要件

  • JWTの署名が検証されず、ヘッダ・ペイロードを書き換えても通ってしまう
  • subadministrator に変えることで 管理者権限を奪取
  • /admin/delete?username=carloscarlos の削除

🔐 対策方法

  • JWTを受信する際は 常に verify() などで署名検証を行う
  • alg=none を許可しない
  • 秘密鍵を厳重に管理し、強力なアルゴリズム(RS256など)を使用
  • JWT改ざんを検知するための監査やログ検証機構の導入

Best regards, (^^ゞ