全聯 小時達 Order & Invoice API Broken Access Control Leading to Customer PII disclosure - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2025-01082
  •  發信 Vendor: 全聯實業
  • Title: 全聯 小時達 Order & Invoice API Broken Access Control Leading to Customer PII disclosure
  • Introduction: API Broken Object Level Authorization

處理狀態

目前狀態

公開
Last Update : 2025/10/29
  • 新提交
  • 已審核
  • 已通報
  • 已修補
  • 未複測
  • 公開

處理歷程

  • 2025/08/29 00:54:43 : 新提交 (由 CheN.. 更新此狀態)
  • 2025/08/29 14:35:08 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/09/03 16:44:00 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/09/03 16:44:00 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/09/03 16:44:00 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/10/22 09:11:45 : 已修補 (由 組織帳號 更新此狀態)
  • 2025/10/22 09:11:51 : 已修補 (由 組織帳號 更新此狀態)
  • 2025/10/29 03:00:05 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2025-01082
  • 通報者:SamChen_696 (CheN..)
  • 風險:高
  • 類型:存取控制缺陷 (Broken Access Control)

參考資料

攻擊者可經由該漏洞取得、修改、刪除系統中的其他使用者的資料,或連線至高權限使用者的頁面。

OWASP Top 10 - 2017 A5 - Broken Access Control
https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control

CWE-284: Improper Access Control
https://cwe.mitre.org/data/definitions/284.html
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

https://mwebapi.pxgo.com.tw/2ndwa/api/order/getOrderDetail?orderSn=<urorderSn>&curShopNo=307000
https://mwebapi.pxgo.com.tw/api/invoice/getDetail?id=<urinvoiceid>

敘述

備註:同步通報至相關窗口

概述

昨天在小時達購物 追蹤訂單進度時,進入到訂單頁面偶然發現會帶出一段 URL "https://shop.pxgo.com.tw/mweb/#/url-assign?&type=hourArrive&secondLevelName=OrderDetail&pageParams={"details":{"orderSn":"112508262101718"" 出於好奇我嘗試把 orderSn(很明顯可以推測的單號) 改成其他單號,神奇的是畫面竟然真的顯示出別人的訂單資訊。 打開 DevTools 檢查發現資料實際來自 API " GET /2ndwa/api/order/getOrderDetail?orderSn=112508262101718&curShopNo=307000 Host: mwebapi.pxgo.com.tw " 用我自己的 Authorization 居然可以拿到其他人的訂單資訊;" GET /api/invoice/getDetail?id=<invoiceId> Host: mwebapi.pxgo.com.tw " 也被我發現有同樣的問題輸入 invoiceId (7碼數字) 就可以直接取得完整的發票資訊,可以去財政部網站查詢就知道用戶買了甚麼商品!若用戶有申請紙本發票 回應中還會包含寄送姓名、電話、地址等未遮蔽的個資直接外洩。雖然說取得訂單資訊API 收件人資訊都會部分 做處理,但透過很多方式其實可以得知被 掉的資訊。例如:大多數用戶會員其實都使用真實姓名當作會員名稱所以從 "memberName" 就可以得知姓名;然後回應還含 deliveryUrl(Uber/Foodpanda)開啟後的追蹤頁或其 API 會呈現完整收件地址、配送備註、Proof-of-Delivery 照片,Foodpanda 回應還包含收件人電話。所以只要透過回應中的第三方配送追蹤連結與投遞照片等間接來源,就能把被 * 遮掉的資訊「補齊為可識別個資」! 其實這就是很典型的 Broken Object Level Authorization 。
圖片

重製步驟

  1. 以帳號 A 登入小時達,用 A 的 Bearer 權杖呼叫 訂單資訊API (輸入屬於帳號 B 的 orderSn) GET https://mwebapi.pxgo.com.tw/2ndwa/api/order/getOrderDetail?orderSn=112508131870900&curShopNo=307000;用 A 的 Bearer 權杖呼叫 發票API (輸入屬於帳號 B 的 invoiceId) GET https://mwebapi.pxgo.com.tw/api/invoice/getDetail?id=8783974

  2. 訂單資訊回應為 200 OK,可見 memberName / receiverName / receiverAddress / receiverPhone / deliveryUrl / dropoffPictureUrl,訪問 deliveryUrl(Uber/Foodpanda 追蹤頁)可進一步看到完整地址、配送備註、配送照片 (甚至用戶電話);發票資訊回應 200 OK ,完整發票資訊 若有申請紙本發票,會返回收件姓名/電話/地址

PoC

截圖佐證
圖片
圖片

提供影片佐證 影片傳至共享資料夾,影片示範嘗試更改單號和發票號碼證實可以未經授權取得他人資料,還有從 Uber/Foodpanda 追蹤頁可以取得更多用戶資訊

影響

個人識別資訊(PII)洩漏:姓名、電話([如果是委託Foodpanda的訂單] 於特定介面/API)、完整地址、配送備註。還有用乎購買的商品、外送照片外洩 (內含收據/單據 間接揭露更多資訊)

修補建議

後端落實物件層級授權:對 orderSn、invoiceId 進行擁有者/授權者比對 不屬於請求者即回 非當前用戶或403;不要僅依賴客戶端傳入的參數。

擷圖

留言討論

聯絡組織

 發送私人訊息
您也可以透過私人訊息的方式與組織聯繫,討論有關於這個漏洞的相關資訊。
;