Hello there, ('ω')ノ
脆弱性報告レポート
(PortSwigger Web Security Academy – Lab: High-level logic vulnerability)
概要(Summary) — 140 字以内
/cart エンドポイントの quantity パラメータが負数を許容しており、カート内個数を人為的にマイナス化できる。総額を負値まで減算し、Lightweight l33t leather jacket を残高以内(実質無料)で購入可能。
再現手順(Steps) — 3〜5 行
- シークレットウィンドウで https://lab-url/ にアクセスし、wiener:peter でログイン。
- 最安値の商品(例:Water bottle)をカートへ追加。
- Burp で POST /cart をインターセプトし、
quantity=-99
に書き換えて転送。 - カートを更新し、合計金額が 負であることを確認。
- その後 Lightweight l33t leather jacket を通常数量で追加し、総額が残高以下になったら注文確定。 (全操作 30 秒以内に再現可能)
結果(Result)
項目 | 値 |
---|---|
カート総額 | -$320.00 → 皮ジャン追加後 $5.00 |
購入完了メッセージ | “Congratulations, your order has been placed!” |
ユーザ残高 | 減少 5 ドルのみ(本来 1337 ドル) |
主要リクエスト差分
POST /cart HTTP/1.1 Host: lab-url Cookie: session=… Content-Type: application/x-www-form-urlencoded - productId=1&quantity=1 + productId=1&quantity=-99
期待挙動(Expected) — 1 行
quantity は 1 以上の整数のみ許容し、0 以下はサーバで拒否(HTTP 400 または 403)。
影響度(Impact)
- 任意の負価格を作成 ⇒ 売上損失・在庫不整合
- 支払フローに連動する場合、不正送金・ポイント不正取得 へ波及
- OWASP A07:2021 識別と認証の失敗/ビジネスロジックの欠陥
- CWE-1284 不適切な算術演算チェック
修正提案(Optional)
- quantity <= 0 をサーバ側バリデーションで拒否。
- 価格計算を「数量 × 正規単価」で再計算し、クライアント値を信用しない。
- 不整合時は トランザクションをロールバック しログを残す。
- 単体テストに「負数・過大数」ケースを追加し、CI で自動検出。
PoC 添付物
- Screenshot 1 : quantity = -99 送信直後の Burp 画面(赤枠付き)
- Screenshot 2 : カート合計 -$320 表示
- Screenshot 3 : 皮ジャン追加後、$5 で購入確定
- PoC-request.txt / PoC-diff.txt : 上記リクエスト全文と差分
Retest プラン
修正報告後、同手順で quantity=-1
を送信し HTTP 400/403 を確認。未修正なら新スクショを添付しリオープンします。
7 日後まで進捗をお待ちしております。よろしくお願いいたします。
Best regards, (^^ゞ