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, (^^ゞ