Shikata Ga Nai

Private? There is no such things.

ビジネスロジックの脆弱性診断マニュアル(Business Logic Vulnerabilities)

Hello there, ('ω')ノ

🎯 1. ビジネスロジックの脆弱性とは?

アプリケーションの仕様・ルール(ビジネスロジック)に対して不正な操作が可能になる問題です。 これは技術的なバグではなく、設計ミス機能の悪用によって意図しない動作が発生することを指します。

🧠 例:

  • 本来必要なステップをスキップして割引を適用
  • 注文後に金額を変更できる
  • 数量や価格を負の数にして購入できる
  • 制限回数をバイパスして何度でも操作できる

🧭 2. チェックすべき機能・シナリオ一覧

機能 / ページ チェックポイント 備考
🛒 商品購入・注文 数量、価格、送料、合計金額 金額が変わるか、チェックが甘いか
🎁 クーポン適用 同一クーポンを複数回使えるか 他ユーザのクーポンを使用できるかも確認
🔁 ステップ制操作 手順を飛ばせるか(例:認証→決済) URL直打ちやリクエスト改変で試す
💳 支払い処理 価格変更、手数料削除、無料にできるか クライアント側だけの検証になっていないか
📦 返品・キャンセル機能 繰り返しキャンセルや悪用が可能か 在庫や返金処理に影響する操作に注目
📈 ポイント/ボーナス機能 複数回加算できるか 同じ操作で何度も増やせるなど
🧾 申請・登録系 本来1回のみ許可の操作を複数回行えるか イベント応募・登録など

🛠️ 3. 診断方法(基本手順)

  1. アプリケーションの操作フローを観察(ユーザ目線で)
  2. 複数パターンで操作し、期待される動作とのズレを確認
  3. リクエスト内容を変更して再送信(例:価格やステップスキップ)
  4. 以下のような「不自然な成功」をチェック

    • 安すぎる・無料での購入が成立
    • 同じクーポンで何度でも割引
    • ステップを飛ばして処理完了

🧪 4. よくあるテスト項目とペイロード例

テスト項目 変更内容の例
商品価格の変更 "price": 100"price": 1
数量の異常入力 "qty": 1"qty": -5 or "qty": 999999
手順スキップ POST /checkout を直接送信(カート操作を飛ばす)
重複クーポン使用 同じcoupon_codeを複数回入力して反応を見る
割引率の操作 "discount": 10"discount": 100

🧾 5. サンプルケース

例:ECサイトで商品購入

  1. 商品を1円で送信しても購入が成功 → 脆弱性あり
  2. クーポンコードを何度でも適用できる → ロジックバイパス
  3. 手順3(決済)を直接叩いたら注文が成立 → フロー逸脱可能

⚠️ 6. 注意点・ベストプラクティス

  • 🚨 技術的に正しい処理でも業務的に正しくない結果が出る場合に注目
  • 🔁 何度も実行して不自然な挙動が起きないかを見る(例:繰り返しポイント付与)
  • 🧪 負の数・0・大きな数などの境界値テストも重要
  • 👀 仕様書がある場合は仕様と実装の不一致を確認

🧰 7. 補助ツール

  • Burp Suite(Repeater):操作フローを保存して一部変更して再送信
  • ブラウザの開発者ツール(DevTools):フロントエンドの検証
  • Postman / curl:ステップスキップやリクエスト改変

🔑 検査対象を見つけるヒント

  • 「フローが複数ステップに分かれている機能」
  • 「お金・権限・ポイントが絡む操作」
  • 「クーポン・割引・数量・価格に関するUI」

Best regards, (^^ゞ