Shikata Ga Nai

Private? There is no such things.

Code flaws leads to Org/Admin Account Takeoverを訳してみた

Hello there, ('ω')ノ

 

コードの欠陥が組織/管理者アカウントの乗っ取りにつながるを。

 

脆弱性

 権限昇格

 アカウント乗っ取り

 

記事:

 https://mr23r0.medium.com/code-flaws-leads-to-org-admin-account-takeover-ad9515a96eab

 

今回は、コードの欠陥がアカウントの乗っ取りにつながるを。

 

アプリケーションの設計から始めることに。

アプリケーションでは、1 つの組織につき 1 人の管理者/マネージャのみが。

許可されていましたが、他の視聴者はコンテンツを表示するために。

ログインする必要があり。

 注:アカウント ユーザーを作成した後にorganization_name を変更することは不可。

 

設計上の欠陥/安全でない設計:

アカウントを作成しているときに、POST リクエストに非常に奇妙な。

パラメータが表示されて。

 

POST /some_ajax/create_event_flow HTTP/1.1
Host: portal.example.com
Connection: close
Content-Length: 663
sec-ch-ua: "Google Chrome";v="105", "Not)A;Brand";v="8", "Chromium";v="105"
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
sec-ch-ua-platform: "Linux"
Origin: https://portal.example.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Se;c-Fetch-Dest: empty
Referer: https://portal.example.com/create_event_flow
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Cookie:{"methodName":"onboard","params":{"event_params":{"event_name":"Account takeover","event_modules":[1]},"user_params":{"name":"User_name","email":"admin@mr23r0.rocks","password":"Password_Secret"},"community_params":{"name":"Organization_name","slug":"testthing-for-ato","c_id":683,"client_time_zone":"Asia/Calcutta"}}}

 

「c_id」が気づいて。

バックエンドで何が起こっているか見てみてみるとに。

登録しようとすると、アプリケーションは電子メール アドレスでエントリを作成し。

組織テーブルに行を作成して。 (SQL の場合)

次に、現在のリクエストが users テーブルに入り。

定義済みの組織を持つユーザを作成して。

 

INSERT INTO users (username, password, organization) VALUES ("Jack","123", "organization_name") WHERE c_id='683';

 

そのため、「c_id」を被害者の「c_id」に変更すると、被害者の組織に移動して。

     注 : アプリケーションは1 つの組織で複数の管理者/マネージャーをサポートせず。

 

最初のバグが発生して。

設計フローですが、これを「水平権限昇格」と呼ぶこともできて。

 

水平権限エスカレーションとは、ユーザが自分と同じアクセス レベルを。

持つ別のユーザのアクセス権を取得することで。

 

主に達成したいのはアカウントの乗っ取りであり、テストは自分にとって。

すべてのレベルを1つずつ完了するビデオゲームのようなもので。

 

検索後、「Organization_name」に保存されたクロス サイト スクリプティングが。

見つかって。

問題は、被害者の「Organization_name」をどのように変更できるかということで。

 

アカウント作成リクエストを再現してみることに。

「/some_ajax/create_event_flow」に POST リクエストを送信でき、認証は必要なく。

「Organization_name」にクロスサイト スクリプティング ペイロードを配置し。

「c_id」を被害者の「c_id」に変更すると、被害者の「Organization_name」が。

変更されて。


下記が、ログインページのダッシュボードで。

 

 

被害者のアクティブ Cookie を取得しましたが。

アクティブ Cookie によるアカウントの乗っ取りは誰も受け入れず。

そのため、「セッション固定/ログアウトなし」をチェックしたところ。

幸運にもアプリケーションに脆弱性があり。

 

最後の 2 つの脆弱性は、アプリケーションがパスワードを変更するために。

現在のパスワードを取得していたことですが。

リクエストを傍受した後、彼らが現在のパスワードを送信または。

チェックしていないことがわかったので、メール操作を変更して。

 

まとめ:

アカウントを作成して、「c_id」を変更し、「organization_name」に。

ブラインド xss ペイロードを追加して、被害者の Cookie をコピーして。

Cookie を使用して被害者としてログインし、次を使用してパスワードを変更して。


1.パスワードを変更

2.メールアドレスを変更して、パスワードを回復

 

Best regards, (^^ゞ