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
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
未複測
-
公開
處理歷程
- 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/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 。
重製步驟
-
以帳號 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
-
訂單資訊回應為 200 OK,可見 memberName / receiverName / receiverAddress / receiverPhone / deliveryUrl / dropoffPictureUrl,訪問 deliveryUrl(Uber/Foodpanda 追蹤頁)可進一步看到完整地址、配送備註、配送照片 (甚至用戶電話);發票資訊回應 200 OK ,完整發票資訊 若有申請紙本發票,會返回收件姓名/電話/地址
PoC
截圖佐證
提供影片佐證 影片傳至共享資料夾,影片示範嘗試更改單號和發票號碼證實可以未經授權取得他人資料,還有從 Uber/Foodpanda 追蹤頁可以取得更多用戶資訊
影響
個人識別資訊(PII)洩漏:姓名、電話([如果是委託Foodpanda的訂單] 於特定介面/API)、完整地址、配送備註。還有用乎購買的商品、外送照片外洩 (內含收據/單據 間接揭露更多資訊)
修補建議
後端落實物件層級授權:對 orderSn、invoiceId 進行擁有者/授權者比對 不屬於請求者即回 非當前用戶或403;不要僅依賴客戶端傳入的參數。