Shikata Ga Nai

Private? There is no such things.

Lab: High-level logic vulnerabilityの脆弱性報告レポート

Hello there, ('ω')ノ

脆弱性報告レポート

(PortSwigger Web Security Academy – Lab: High-level logic vulnerability


概要(Summary) — 140 字以内

/cart エンドポイントの quantity パラメータが負数を許容しており、カート内個数を人為的にマイナス化できる。総額を負値まで減算し、Lightweight l33t leather jacket を残高以内(実質無料)で購入可能。


再現手順(Steps) — 3〜5 行

  1. シークレットウィンドウhttps://lab-url/ にアクセスし、wiener:peter でログイン。
  2. 最安値の商品(例:Water bottle)をカートへ追加。
  3. Burp で POST /cart をインターセプトし、quantity=-99 に書き換えて転送。
  4. カートを更新し、合計金額が であることを確認。
  5. その後 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)

  1. quantity <= 0 をサーバ側バリデーションで拒否。
  2. 価格計算を「数量 × 正規単価」で再計算し、クライアント値を信用しない。
  3. 不整合時は トランザクションをロールバック しログを残す。
  4. 単体テストに「負数・過大数」ケースを追加し、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, (^^ゞ