Shikata Ga Nai

Private? There is no such things.

JWT authentication bypass via jku header injectionをやってみた

Hello there, ('ω')ノ

 

jkuヘッダインジェクションによるJWT認証バイパスを。

 

JWT ベースのメカニズムを使用してセッションを処理し。
サーバは、JWT ヘッダの jku パラメーターをサポートしていて。
ただし、キーを取得する前に、提供された URL が信頼できるドメインに
属しているかどうかを確認できず。
/admin で管理パネルにアクセスできるようにする JWT を偽造しcarlos を削除して。
次の認証情報を使用して、自分のアカウントにログインできて。
 wiener/peter
 

まずは、ログインして。

 

 

 

対象のリクエストをリピータへ。

  

 

エンドポイントを/adminに変更してリクエストを送信すると。

管理者ユーザとしてログインしている場合にのみ、

管理者パネルにアクセスできるようで。

 

 

JWT Editor Keysタブで、New RSA Keyをクリックして。

ダイアログで、Generateをクリックして新しいキーペアを自動生成して。

OKをクリックしキーを保存して。

キーサイズは、後で自動的に更新されて。

 

 

 エクスプロイトサーバで、Bodyを空のJWKに置き換えて。


{
"keys": [


 ]
}

 

 

JWT Editor Keysタブで生成したキーのエントリを右クリックして、

Copy Public Key as JWKを選択して。

 

 

コピーしたJWKを貼り付けて、保存して。

 

{
    "kty": "RSA",
    "e": "AQAB",
    "kid": "000e8978-614b-4afb-9212-629315992c62",
    "n": "vCLTXCvPYDKiBMbPEIHeJBkBRXegaCWgUmXxyTbuaf2n7iUruXuuKwSNEsLP0ImMXSb5g_ifKpH4fgB2IKRMwsp9ta9JP7IQxNr_fCqDTPznlML7iURcpfWPb4zxvniiFBewE0kf42fKBs2IkJPIP8OGOo4SYt-U8YNfR1ChPDoMmPRHJkekn7GXcXA3VSQheF-mUyPNDUjA_VPJvWEMEfAnRYVEEhg-UudtsISq9gWFuUFWcI9bCaH__-aldKmH0s0_ENG4XrYKhtI0aGiYWlWyNJCsqBavI1wc11Gg97tehnWDAv6jhXnFDQLliSDHSUzkxZX3TVFRxAxjZbeoYQ"
}

 

 

JSON Web TokenのJWTのヘッダで、kidパラメータを、

エクスプロイトサーバにアップロードしたJWKのkidに置き換えて。

JWTのヘッダにエクスプロイトサーバのURLに設定して。

 

 

ペイロードのsubクレームの値をadministratorに変更して。

 

 

Signをクリックし、生成したRSA鍵を選択して。

Don't modify headerオプションが選択されていることを確認し、OKを。

 

 

再度、リクエストを送信すると管理パネルにアクセスできて。

 

 

Carlosを削除するためのエンドポイントとパラメータを送信すると。

 

 

クリアできて。

 

 

Best regards, (^^ゞ