以下の内容はhttps://cysec148.hatenablog.com/entry/2023/05/10/083604より取得しました。


JWT authentication bypass via algorithm confusion with no exposed keyをやってみた

Hello there, ('ω')ノ

 

鍵が公開されていないアルゴリズムの混乱による JWT 認証バイパスを。

 

JWT ベースのメカニズムを使用してセッションを処理し。
堅牢な RSA キー ペアを使用して、トークンの署名と検証を行い。
ただし、このメカニズムはアルゴリズム混乱攻撃に対して脆弱で。
まずサーバーの公開鍵を取得し。
このキーを使用して、/admin の管理パネルへのアクセスを
許可するセッション トークンに署名し、carlos を削除して。
次の認証情報を使用して、自分のアカウントにログインできて。
 wiener/peter
 
ヒント:
サーバが公開鍵を X.509 PEM ファイルとして保管していると想定できて。
 

まずは、ログインして。

 

 

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

 

 

/admin に変更し、リクエストを送信すると管理者ユーザとして

ログインしている場合にのみ、管理者パネルにアクセスできるようで。

JWT セッションCookie をコピーして、後で使用できるように保存しておいて。

 

 

ログアウトして、再度ログインして。

 

 

新しい JWT セッション Cookie をコピーして、

これで、サーバによって生成された 2 つの有効な JWT が。

 

 

ターミナルで次のコマンドを実行し、2 つの JWT を引数として渡すことに。

token1:初めにログインしたときのJWT セッションCookie 

token2:二度目にログインしたときのJWT セッションCookie

 

     docker run --rm -it portswigger/sig2n <token1> <token2>

 

 

X.509 および PKCS1 形式の Base64 でエンコードされた公開鍵と

これらの各キーで署名された改ざんされた JWTが表示されて。

 

 

セッション Cookie をこの上記の JWT に置き換えてから、リクエストを送信すると

200 応答を受け取り、アカウント ページに正常にアクセスできたので

これは正しい X.509 キーということで。

 

セッション Cookie を削除する 302 応答を受け取った場合、

/login にリダイレクトされるので間違った X.509 キーで。  

 

 

次にBase64 でエンコードされた X.509 キーをコピーして。  

 

 

JWT Editor Keysタブで、New Symmetric Keyをクリックし

ダイアログで [Generate] をクリックして、JWK 形式で新しいキーを生成して。

k プロパティの値を、コピーした Base64 でエンコードされたキーに置き換えて。

これは、実際のキーで。

 

 

JWT のヘッダで、alg パラメータが HS256 に設定されていることを確認し

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

[Sign]で、生成した対称キーを選択して。

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

変更されたトークンは、サーバの公開鍵を秘密鍵として使用して署名されて。

 


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

管理パネルに正常にアクセスしたことを確認でき。

 

 

Carlos を削除するためのエンドポイントとパラメータにアクセスすると。

 

 

クリアできて。

 

 

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2023/05/10/083604より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14