APIを直接呼び出してユーザーの個人データ(PII)を盗む

今日、私たちは情報セキュリティのトピックについて議論することにしました。Kunal pandeyの記事の翻訳を公開し、脆弱性を検出して、時代を先取りします


前書き



ユーザーの個人データ(PII)の盗難は私たちにとって当たり前になっています。攻撃者は、XSSおよびIDORの脆弱性、APIエンドポイントの開示などを使用して、個人データを取得する多くの方法を見つけます。



この記事で説明するシナリオは、APIエンドポイントの動作を観察するだけでテストできます。以下の例では、APIを呼び出すことにより、任意のユーザーの個人情報を他のAPIエンドポイントに保存できます。



説明



私が招待さ れたHackerOneBug Bountyプラットフォームのプライベートプログラムの1つで、ストアのポータル、つまり販売者の作業のセクションをテストすることが提案されました。ここでは、店舗の従業員はすべての顧客に「注文」の招待状を送信できます。必要な情報を取得するために、販売者はこのリクエストをメールまたはQRコードを使用して顧客に送信します。







支払いを行うための招待状のリンクを受け取った後、購入者は次の場所にアクセスします:payment-na.examle.com/0811ebf4-d7d0-ba31-9ce68648a5a9必要なデータを入力します。







リクエストを傍受すると、BurpSuiteは入力されたデータを含むPOSTAPIエンドポイントを検出します。



リクエスト



POST /na/customer/client/v1/session/002420e4-e031-47aa-8d94-6f7c40c248c7 HTTP/1.1

Host: payments-na.example.com

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0

Accept: application/json, text/plain, */*

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

Accept-Encoding: gzip, deflate

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

X-Cdc-Client: 2.15.45

Content-Length: 125

Origin: https://payments-na.example.com

DNT: 1

Connection: close

Referer: https://payments-na.example.com



{"browser_prefilled":[],"customer_details":{"country":"US"..............},"skipped_fields":[],"user_submitted":true,"action":"continueAddressUnverified"}




回答







フォームに記入すると、操作は完了です。完了しました。支払い







へのPOSTメソッド中に-na.example.com/na/customer/client/v1/session/002420e4-e031-47aa-8d94-6f7c40c248c7すべての情報が保存され、支払いが行われます。



運用段階



ユーザーまたは攻撃者は、上記の方法と同様に、発注機能を使用できるポータルの別のセクションを見つけて、次の支払いリンクを受け取る可能性があります:payment-na.examle.com/fa5daba4-5d50-8f80 –9eb1-ebia3ea6d665







その場合は、フォームに記入し、Burp Suiteでリクエストをインターセプトしpayment-na.example.com / na / customer / client / v1 / session / xxxxへのPOSTリクエストを受信し、生成されたAPIエンドポイントをロードして、他のリクエストを破棄します。私たちはそれらを送りませんでした。



受信したAPIエンドポイント:payment-na.example.com/na/customer/client/v1/session/96afd42f-4281-4529-9b8c-3ba70b0f000b



さらにテストするために、このエンドポイントはブラウザのGETメソッドを使用して使用することもできます。以下は、結果のAPIエンドポイントのスクリーンショットです。







ご覧のとおり、情報はまだ追加されておらず、パラメーターも指定されていません。



次に、このAPIリンクを取得して、注文の詳細を入力した他のユーザーに送信します。被害者がこのAPIリンクをクリックするとすぐに、ここに保存された前回の送信のすべての個人データ(/ na / customer / client / v1 / session / 002420e4-e031-47aa-8d94-6f7c40c248c7)が指定されたエンドポイントにコピーされます。 API:/ na / customer / client / v1 / session / 96afd42f-4281–4529–9b8c-3ba70b0f000b



被害者が送信したAPIリンクをクリックすると、ユーザーのすべての個人データがこのエンドポイントにコピーされます。



被害者側から:







攻撃者がインコグニートモードでこのAPIエンドポイントにアクセスするだけで十分であり、被害者のデータ(電子メール、アドレスなど)がコピーされます。



被害者の個人データ:







このように、攻撃者は、新しいセッションAPIエンドポイントを作成して他のユーザーに送信するだけで、任意のクライアントの個人データを取得できます。



バグに取り組む



ポータル開発チームは、GETメソッドを削除し、POSTメソッドにバインドし、上記のPOSTメソッドリクエストに認証トークンヘッダーを追加しました。このリクエストでは、サーバーから認証されるたびに行われます。



これにより、上記のシナリオを繰り返す可能性が排除されました。これは、APIを介してユーザーの個人データをコピーする攻撃です。



キーポイント



1.このような攻撃のシナリオは異なる可能性があります。私の例は、そのうちの1つにすぎません。そのような脆弱性に注意を払い、同様のシナリオを作成するためにさらに深く掘り下げてみてください。攻撃者が他にどのようにあなたを攻撃する可能性があるか。



2.説明した例では、認証トークンヘッダーの検証が行われなかったため、攻撃者のAPIは被害者のAPIエンドポイントに対して認証されました。これにより、サーバーはクライアントの個人データを別のAPIエンドポイントにコピーできました。



イベントのコース:



7月22日:ポータルチームに脆弱性を報告しました。



7月23日:レポートはチームによってレビューされ、重大度は中に設定されました。



7月23日: 500ドルの報酬を受け取りました。



7月27日:問題が解決し、レポートが編集されました。



All Articles