Shikata Ga Nai

Private? There is no such things.

Lab: Excessive trust in client-side controlsnの脆弱性報告レポート

Hello there, ('ω')ノ

脆弱性報告レポート

(PortSwigger Web Security Academy – Lab: Excessive trust in client-side controls)


概要(Summary) — 140 字以内

/cart」エンドポイントが price パラメータをクライアント入力のまま信用しているため、任意価格を設定でき、Lightweight l33t leather jacket を本来より低額で購入できます。


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

  1. 新規シークレットウィンドウを開く。
  2. https://portswigger-lab-url/ にアクセスし、wiener:peter でログイン。
  3. 商品一覧で Lightweight l33t leather jacket をカートに追加。
  4. Burp で POST /cart リクエストを取得し、price=1 に書き換えて送信。
  5. ブラウザを更新し、支払残高内で購入完了できることを確認。 ※所要時間:30 秒以内

結果(Result)

項目
注文確定画面表示 “Congratulations, your order has been placed!”
購入額 $1.00(実際は $1337.00)
ユーザ残高 減少しない/微小減のみ

主要リクエスト差分

POST /cart HTTP/1.1
Host: lab-url
Cookie: session=…
Content-Type: application/x-www-form-urlencoded

- productId=9&redir=PRODUCTS&price=1337
+ productId=9&redir=PRODUCTS&price=1

期待挙動(Expected) — 1 行

price 値はサーバ側で再計算し、クライアント値を無視する(例:価格改ざん時は HTTP 403)。


影響度(Impact) — ビジネス損害を含め記載

  • 誰でも任意価格で商品購入 ⇒ 直接的な売上損失
  • 同一論理欠陥が他商品の在庫管理にも影響する恐れ
  • OWASP A06:2021 — 入出力データの整合性不備
  • CWE-345 — 不完全な入力検証による信頼性の欠如

修正提案(Optional)

  1. カート処理時、productId を基にサーバ側で正規価格を再計算
  2. 価格や数量など 信頼できないクライアント値を無視
  3. 重要パラメータには HMAC 付きトークンを適用し改ざん検知。
  4. 単体テストに マイナス価格/異常値 入力ケースを追加。

PoC 添付物 — スクショ+テキスト 2 点セット

  • Screenshot 1 : 改ざん後カート表示(価格 $1.00、赤枠強調)
  • Screenshot 2 : 購入完了画面
  • PoC-request.txt : 上記 Burp リクエスト全文
  • PoC-diff.txt : price パラメータ差分(上記コードブロック)

(※動画は再生制限の可能性があるため省略)


追加検証(Retest プラン)

修正完了通知後、同手順で price 改ざんが 403 応答となることを確認予定。未修正の場合は新スクショを添付しリオープンします。


7 日後まで進捗をお待ちします。よろしくお願いいたします。

Best regards, (^^ゞ