「What about RefreshToken?」から学ぶ

ソース:https://medium.com/@iknowhatodo/what-about-refreshtoken-19914d3f2e46

 

脆弱性:ATO

 

これは面白い記事だった。

理解するのに時間が掛かりましたが。。

 

訳:

RefreshToken が時限爆弾である理由
この記事では、RefreshToken を使用してアカウントを引き継ぐ方法を共有し。

 

Google OAuth を介してプログラムにユーザー登録を行う場合、これはいくつかの手順で行われ。

  1. ユーザーはサードパーティ (Google) で認証を行い、認証が成功すると、トークン (AccessToken および IdToken) が返され。
  2. この場合、ユーザー アカウントは非アクティブになるか未検証になるため、Web サイトはターゲット アカウントをサードパーティ アカウント (Google) にリンクする役割を担うエンドポイント [/v1/user/connect] へのリクエストを作成し。
  • このエンドポイント [/v1/user/connect] は、次のようないくつかのパラメータを取りまして。
    1. ユーザー名: Static Unique Number の略で、Google アカウントに属し。
    2. 電子メールを送信し。
    3. また、Authorization ヘッダーも受け取ります [Authorization header == IdToken]

このエンドポイントに関するメモ:

  • 電子メールは IdToken の電子メール アドレスと同一である必要があり、Google ID も有効であり、別のアカウントに関連付けられていない必要があります。

登録プロセスに関する注意事項:

  • このエンドポイントに直接接続するユーザー名として Google アカウントの userId がアカウントに含まれていることが Web サイトで検出された場合: [/v1/user/connect]

変更メール機能に関する注意事項: 

  • ユーザーは誰でも自分のメールアドレスをウェブサイトに登録した別のメールアドレスに変更することができますが、この場合、確認コードによるアクティベーションプロセスが完了するまでアカウントのステータスは未確認になり。

攻撃シナリオ:

  • いくつかのテストの後、登録プロセス中にユーザー名の値の代わりに userId(GoogleID) を挿入できることがわかり。AccessToken、IdToken、および RefreshToken を取得した後、AccessToken を使用して現在の電子メールを被害者の電子メールに変更し。
  • 上で述べたように、アカウントに、このエンドポイント [/v1/user/connect] に直接接続するユーザー名として Google アカウントの userId が含まれていることが Web サイトで検出された場合。
  • したがって、最初の登録プロセスで取得した RefreshToken を使用して新しいトークンを取得し、まだ検証されていない被害者の電子メールと GoogleID を含む IdToken を取得でき。

Exploitation:

  1. Google OAuth 経由でサインアップして、Google userId を取得し。そして登録手続きを完了し、その後アカウントを削除しまし。
  2. ここで、電子メールとパスワードを介してサインアップして、ユーザー名の値の代わりに Google userId を挿入し。登録プロセスが完了すると、AccessToken、IdToken、および RefreshToken を取得でき。
  3. AccessToken を使用して現在の電子メールを被害者の電子メールに変更して。この場合、確認するまで私のアカウントは停止され。
  4. RefreshToken を使用して新しいトークンを注文し。

 

IdToken を翻訳 (デコード) した後、被害者の電子メールはすでに存在していましたが、検証されていないことがわかり、GoogleID も存在していて。

 

  5. このエンドポイント [/v1/user/connect] を使用して、登録プロセス (ステップ 1) で取得した Google アカウントの userId を被害者の電子メールに関連付けました。

 

 

6. ここで、以前に被害者のアカウントに挿入したユーザー ID に関連付けられているのと同じ電子メールを使用して、Google OAuth を使用して targetApp にログインまたは新しいアカウントを登録しようとすると、{Google userId を被害者の電子メールにリンクする} ことで、被害者の口座に直接送られる。

 

 

ほなほな。