Hello there, ('ω')ノ
この脆弱性は、アプリケーションが特定の操作に対して制限(例:一度しか使えないクーポンコード)を設けている場合に発生します。攻撃者が複数のリクエストをほぼ同時に送信することで、サーバーの処理のタイミングのズレを突き、制限を回避することが可能となります。
例:クーポンコードの再利用
- ユーザーがクーポンコードを入力すると、サーバーはそのコードが未使用であることを確認します。
- 確認後、割引を適用します。
- 最後に、そのコードを使用済みとしてデータベースを更新します。
しかし、攻撃者がこのプロセスの最中に同じコードを使ったリクエストを複数同時に送信すると、サーバーがコードを使用済みとマークする前に複数のリクエストが通ってしまい、結果として同じクーポンコードが複数回適用されてしまいます。
🧪 脆弱性の検出と悪用方法
1. 対象のエンドポイントを特定
一度しか使用できないクーポンコードや、特定の制限がある機能を探します。
2. 通常の挙動を確認
クーポンコードを通常通り適用し、成功と失敗のレスポンスを確認します。
3. 同時リクエストの送信
Burp SuiteのRepeaterやTurbo Intruderを使用して、同じリクエストを複数同時に送信します。これにより、サーバーの処理のタイミングを突いて制限を回避できるかを確認します。
🛠️ 防止策
- トランザクションの導入:データベース操作をトランザクションで囲み、処理の整合性を保ちます。
- ロック機構の実装:同時処理を防ぐために、リソースに対するロックを導入します。
- 再試行の制限:同じ操作の短時間での再試行を制限します。
🧠 まとめ
Limit Overrun Race Conditionは、サーバーの処理タイミングのズレを突いた攻撃手法であり、適切な対策を講じないと重大なセキュリティリスクとなります。開発者やセキュリティ担当者は、このような競合状態を意識し、適切な防止策を実装することが重要です。
Best regards, (^^ゞ