Lab: JWT authentication bypass via algorithm confusion をやってみた

PortSwiggerのWebSecurityAcademy のラボをやってみた

このラボでは、セッションの処理に JWT ベースのメカニズムを使用し。
堅牢な RSA キー ペアを使用してトークンの署名と検証を行い。
ただし、実装上の欠陥により、このメカニズムはアルゴリズム混乱攻撃に対して脆弱de。

ラボを解決するには、まずサーバーの公開キーを取得します。 これは標準エンドポイント経由で公開されます。 このキーを使用して、管理パネルへのアクセスを許可する変更されたセッション トークンに署名します。
/admin、ユーザーを削除します carlos

 

まずはwiener:peter でログインを。

 

 

Burp Suite でProxyを確認、JWT有りなのでjwt.io で確認を。

 

 

 

alg: RS256 とあるので、対称アルゴリズムを使ってバイパスできないか。

 

まずは公開鍵を探してみて、エンドポイント:/jwks.json と /.well-known/jwks.json を試してみて。

/jwks.json にアクセスすると公開鍵がゲットでき。

 

 

公開鍵が手に入ったので、HS256で公開鍵を作成し、それで署名すればバイパスできるのでは?と考え。

 

JWT Editor でRS256の公開鍵を作成し、それをエンコードしてHS256の公開鍵を作成し。

 

 

これを「Copy public key as PEM」としてコピーし、Decoderに貼り付けてエンコード

 

 

エンコードしたkeyをコピーし、NewSynmetricKey でHS256 の公開鍵を作成。

Generate を押して、"k" の値をエンコードした公開鍵に置き換えて。

 

 

/admin でadminパネルにアクセスし、リピーターへ。

 

 

JSON Web Tokenのタブから、algをHS256、subをadministrator に変更し、

先程作成したHS256の公開鍵でsignする。

Headerは Modify しない。

 

 

Send すると200 OK が返り。

エンドポイント:  /admin/delete?username=carlos へアクセスしてアカウントを削除でき。

 

 

 

 

ほなほな。