Upgrade to Pro — share decks privately, control downloads, hide ads and more …

決済代行サービスの実装における検証不備を悪用 (Security.Tokyo)

bubby963
March 06, 2023

決済代行サービスの実装における検証不備を悪用 (Security.Tokyo)

【発表日付】
2023年2月22日

【イベント】
Security.Tokyo

【発表概要】
Stripe APIの直接呼出しにより、競売で売られている商品を、最初入札額及び競売終了前に購入できた脆弱性を解説

bubby963

March 06, 2023
Tweet

Other Decks in Technology

Transcript

  1. 2. マーケットプレース商品の購入の流れ • 競売とは別に、商品が一定価格で販売される「マーケッ トプレース」という機能もあります。 • マーケットプレースから商品を購入する際は、以下の流 れで処理されます。 1. 買いたい商品の購入手続きを開始するリクエストを送信

    2. Stripeによる、「Payment Intent」というオブジェクトが 生成され、それを一意に識別する「Payment Intent Client Secret」が返されます 3. ユーザのブラウザから、保存された決済手段の識別子及 びpayment intent client secretを渡してStripe APIを直接呼び出すことにより、決済が実行 競売商品購入時との一番大きな違いは、Stripe APIを 呼び出して決済を実行する処理は、バックエンドではなく、 クライアント側で行われる点になります。 1. 購入手続き開始用リクエスト 2. Payment intent secretの取得 3. Stripe API直接呼出しによる決済実行
  2. 3. StripeのPayment Intentとは Stripeの公式仕様書では以下のように定義されています PaymentIntent (支払いインテント) API を使用して、複雑な決済フローを処理できる組み込みを構築します。この API は、支払いの作成から決済までを追跡し、必要に応じて追加の認証ステップをトリガーします。

    簡潔にいうと • 支払いの開始から完了までの決済過程全般を、ユーザ及び支払いセッションごとに管理するための仕組み • 決済手段を登録できる「Payment Method API」と組み合わせて使用するのが基本 • 各Payment Intentオブジェクトに、それを一意に識別するPayment Intent Client Secret、及び購入 価格や通貨といった支払い詳細が格納されます
  3. 5. 攻撃の流れ (3/3) 5. Payment Intent Client Secret、使用するユーザの登録済み決済方法を識別する「Payment Method ID」、及び対象アプリの「Stripe

    Public Key」を渡して、Stripe APIに対し決済を実行するリクエス トを直接送信します。 6. 発行時の最高入札額で購入できたことを確認します
  4. 6. その他応用できる場面の考察 基本的には、Payment Intent Client Secretがユーザに渡される仕様となっているサイトであればこういった 脆弱性が潜在している可能性あり。実際には、下図の通り、公式手順書に従って導入した場合はこの仕様に なるので、標的となり得るサイトが多い。 この動きを悪用した他の脆弱性候補として、以下を考察しました。 •

    クレジット制度のあるサイト上で、クレジット残高を差し引いた金額を持つPayment Intent Client Secret を多数作成しておき、順番に決済を実行していく • ユーザが商品を販売できるサイト上で、低価格で売っている商品に対しPayment Intent Client Secret を生成後、当該商品の価格を大きく上げる。