以下の内容はhttps://cysec148.hatenablog.com/entry/2025/05/27/170145より取得しました。


想定外の入力値を処理できない脆弱性 ― 負の数や極端な値がもたらす設計崩壊

Hello there, ('ω')ノ

✅ 脆弱性の概要

多くのアプリケーションは、画面上では正常な入力値しか想定しておらず、 異常な入力値(負の数、異常に大きな値、桁外れな文字列など)への対処を忘れていることがあります。


💣 典型的な設計ミスの例:送金処理

以下は、送金処理の簡略化されたコードです:

$transferAmount = $_POST['amount'];
$currentBalance = $user->getBalance();

if ($transferAmount <= $currentBalance) {
    // 送金を実行
} else {
    // 残高不足でブロック
}

ここで amount-1000 を送ると…

  • -1000 <= 現在の残高常に true
  • 送金が許可されてしまう
  • さらに、受取先と送金元が逆転する可能性もあり、被害者から攻撃者に送金されてしまうことも!

🔍 監査時に試すべき「想定外の値」

フィールド種別 試すべき入力値
数値系 -1, 0, 99999999, 1.5, 'abc'
文字列系 ''(空文字), A*10000, 特殊文字
日付系 1970-01-01, 9999-12-31, null
フラグ系 true, false, yes, 0, 1, 2, -1

🛠 Burpを使った検証手法

  1. 対象機能をブラウザで実行(例:商品注文、送金、数量入力など)
  2. Burp Proxyで通信をキャプチャ
  3. 該当のパラメータを Repeaterで改変

    • quantity=-10
    • amount=9999999
    • discount=100
  4. サーバーのレスポンスや画面挙動を観察

✅ 設計の教訓と対策

教訓 対策
データ型の受け入れ可能範囲を定義せよ 数値は必ず min <= 値 <= max のチェックを行う
クライアント側の制御だけでは不十分 JSでの検証はあくまで補助。必ずサーバー側で再検証すること
「想定外」の入力が来ることを前提に作れ nullや型不一致を想定し、try-catchやバリデーションで明示対応

✅ まとめ

  • 想定外の入力=バグや脆弱性の入口
  • 特に負の数、極端な値、異常な型は要注意
  • Burp Repeaterを活用してサーバーが本当に検証しているか確認せよ

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/05/27/170145より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14