Hello there, ('ω')ノ
🧪 ラボ概要
目的:JWT (JSON Web Token) に署名が未検証の弱点があるため、トークンを改ざんして管理者権限を取得し、carlos
ユーザーを削除します。
🔓 脆弱性の仕組み
このサイトでは、JWTの 署名検証を行っておらず、どんな改ざんもそのまま受け入れられてしまいます。 原理的には、次のように操作できます。
🛠 攻撃の流れ
自己ログイン ユーザー「wiener」でログインします。
JWTを確認
Proxy → HTTP history
で、/my-account
や他のリクエストに含まれるクッキーのJWTを確認します。ペイロード内容を確認 JWTのペイロード部分(Base64URLエンコードされたJSON)を、Burp Inspector等で開き、
sub
(ユーザー名)が「wiener」であることを確認します。管理ページにリクエスト先変更 パスを
/admin
に変更し、アクセスを試みると「アクセス拒否」になります。JWTのペイロード改ざん ペイロード内で
sub
を「administrator」に書き換え、「Apply Changes」をクリックして改ざん後のJWTを生成します。再度 /admin にアクセス 改ざんしたJWTを含むリクエストで
/admin
にアクセスすると、署名未検証のため管理者画面にログインできてしまいます。carlosユーザー削除で完了 管理パネル内にある
DELETE /admin/delete?username=carlos
リンクを実行し、carlos
を削除してラボをクリアします。
✅ 成功要件
- JWTの署名が検証されず、ヘッダ・ペイロードを書き換えても通ってしまう
sub
をadministrator
に変えることで 管理者権限を奪取/admin/delete?username=carlos
で carlos の削除
🔐 対策方法
- JWTを受信する際は 常に
verify()
などで署名検証を行う alg=none
を許可しない- 秘密鍵を厳重に管理し、強力なアルゴリズム(RS256など)を使用
- JWT改ざんを検知するための監査やログ検証機構の導入
Best regards, (^^ゞ