Shikata Ga Nai

Private? There is no such things.

ビジネスロジックの脆弱性とは?設計ミスが招く実例と学び方

Hello there, ('ω')ノ

✅ ビジネスロジックの脆弱性とは

アプリケーションの「業務フロー」や「利用ルール」に基づいた設計上の不備により、 ユーザーが意図されていない操作や悪用をできてしまう問題です。


💡 なぜ検出が難しいのか?

  • SQLインジェクションやXSSのような明確な「技術的パターン」がない
  • アプリの本来のビジネスルールを知らないと判断できない
  • 多くが人間の設計ミスや想定不足によって生まれる

🔍 よくある設計ミスと脆弱性例

設計ミス 脆弱性の例
💰 割引や価格設定のバリデーション不足 商品価格を0円に改変して購入できてしまう
🔄 ステータス遷移の検証不足 「未発送」なのに「返品申請」できてしまう
🛒 在庫管理の整合性ミス 同時に複数ユーザーが注文して在庫を超過する
⏱️ 時間制限の検証漏れ 有効期限が過ぎたリンクを再利用できる
🎯 リクエスト順序の依存性 本来2ステップ必要な処理が1ステップで完了してしまう

🧠 攻撃者視点での発見方法

  1. 「想定される使い方」「実際にできる操作」のギャップを探す
  2. 順序・条件・権限などのルールを逆手にとって操作を試す
  3. フローやステータスがクライアント側でしか制御されていない箇所を探す

🎓 教訓と対策

開発側の教訓 内容
ビジネスルールも「セキュリティ要件」として設計せよ 設計段階から仕様通りにしか動けないことを担保
バックエンドでも必ず状態検証を行う フロント側のUI制御だけに頼らない
「何を防ぎたいか」を明文化し、テストケースに反映する 仕様逸脱を自動化・検出可能に

✅ まとめ

  • ビジネスロジックの脆弱性は技術的ではなく「設計的」な問題
  • 形式的な攻撃手法ではなく、人間的な視点での「すき間」探しが重要
  • 開発者・診断者ともに「仕様通りに動いてるか?」という観点が不可欠

Best regards, (^^ゞ