Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2025-00347
- Vendor: 全聯實業
- Title: 全聯健康關懷系統 Broken Access Control (IDOR) Leading to Information Disclosure
- Introduction: 不當的存取控制權限導致資訊洩漏
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
未複測
-
公開
處理歷程
- 2025/04/29 14:23:44 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/29 14:37:33 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/29 14:39:03 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/29 14:40:02 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/29 14:40:49 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/29 14:42:13 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/29 14:44:02 : 新提交 (由 CheN.. 更新此狀態)
- 2025/04/29 14:54:43 : 新提交 (由 CheN.. 更新此狀態)
- 2025/05/05 11:18:36 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/05/20 17:21:18 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/05/20 17:21:18 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/05/20 17:21:18 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/06/16 10:01:29 : 已修補 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/06/24 03:00:15 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2025-00347
- 通報者: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://pxhc.pxmartevent.com.tw/temp/YYYYMMDDhhmmss.xlsx
敘述
標記:確保公司重視該問題 得到妥善處理,我將漏洞同步通報至hitcon zeroday平台,平台內有完整流程
概述:
離職後想說趁我的工號還可以登入系統的期間,對健康關懷系統 (https://pxhc.pxmartevent.com.tw) 做了一些測試,使用系統的「我的健康資料 → 個人統計 Excel」功能時,意外發現一項嚴重資訊安全問題,「個人統計 Excel」匯出時,系統會生成一組包含血壓、脈搏等健康資訊的 Excel 檔案。然而,該檔案生成後直接儲存於公開目錄(/temp/)下,檔案命名規則固定為「年月日時分秒」格式(例如:20250428193907.xlsx),且無任何授權檢查或存取限制。導致任何人只要推測時間戳記,即可直接下載他人的健康資料檔案,不論是否登入、是否為本人皆可存取。攻擊者可以利用簡單的自動化腳本(如 Burp Suite Intruder、Python)進行遍歷,批量取得大量員工個資,可能導致 許多員工的血壓等PII / Personally Identifiable Information(個人識別資料) 遭未授權者大規模下載。依安全研究人員的道德精神善意通報,敬請相關單位盡速確認並修補。
重現步驟:
-
登入 https://pxhc.pxmartevent.com.tw 並前往「我的健康資料」頁面,點擊「個人統計 Excel」按鈕 選擇日期區間按下「確定」,系統即生成一 個形如 "20250428193907.xlsx" 的檔案
-
多次嘗試並觀察瀏覽器發出的下載請求網址,如:https://pxhc.pxmartevent.com.tw/temp/20250428193907.xlsx(可見路徑固定為 /temp//,檔名以當前時間生成,格式為 年月日時分秒。)
-
發現生成的 Excel 檔案位於公開目錄 /temp/ 下,不需登入即可憑 URL 直接存取下載,且檔案名稱可推測,無任何權限檢查。
-
由於時間戳記邏輯為「年月日時分秒」(YYYYMMDDhhmmss),進行簡單的數學計算 一天中總共有:
24小時 × 60分鐘 × 60秒 = 86400 (種)可能
因此,攻擊者可以在合理時間內列舉所有可能的檔名。為了加速列舉,撰寫以下 Python 程式生成目標日子的所有可能時間清單:""" pxhc.py -------------------------------- 使用方法 $ python pxhc.py 20250428 輸出: ./pxhctimelist_20250428.txt 內容示例: 20250428000000 20250428000001 20250428000002 20250428000003 20250428000004 """ import sys import datetime from pathlib import Path def main(date_str: str) -> None: try: base = datetime.datetime.strptime(date_str, "%Y%m%d") except ValueError: sys.exit("日期格式錯誤,請用 YYYYMMDD 例如 20250428") out_file = Path(f"pxhctimelist_{date_str}.txt").resolve() with out_file.open("w", encoding="utf-8") as f: for h in range(24): for m in range(60): for s in range(60): f.write(f"{base.strftime('%Y%m%d')}{h:02d}{m:02d}{s:02d}\n") print(f"已產生檔案:{out_file}") if __name__ == "__main__": if len(sys.argv) != 2: print("用法: python pxhc.py YYYYMMDD") sys.exit(1) main(sys.argv[1]) -
使用 Burp Suite Intruder 爆破驗證,將 URL 中的時間戳記設置為 Payload 位點,載入剛剛產生的 list ,開始爆破後觀察回應 回應長度為623表示該時間點無檔案產生會跳轉到404頁面,若回應為200 OK表示該檔案存在可下載 且長度明顯大於 623 bytes
-
成功列舉到其他使用者的資料,在測試過程中 即使僅針對當天(例如 2025/04/28)進行爆破,就已成功抓取多份其他人員血壓紀錄檔案。部分檔案甚至是全店或全區員工資料(推測是要抓血壓次數是否達標或其他目的)在我認知中這些資料只有店、區經理(或以上)的管理職才有權限存取,然而目前僅透過簡單的自動化列舉手段,即可未經授權地取得此類敏感資料,顯示存在嚴重的權限控管失效問題(Broken Access Control), 對員工個人隱私權與企業營運資訊均構成重大威脅
PoC:
為了驗證此漏洞能夠被有效利用,我還花了點時間撰寫 exploit 程式,把日期解析、檔名生成、目錄列舉與存活檢測完整整合於一個流程中,透過此程式即可快速列出所有可直接下載的健康資料檔案網址(完整code請見email謝謝)
在此列出幾個有成功列舉的檔案網址作為概念性驗證(因為數量眾多 其餘請見截圖佐證)
提供幾筆Excel截圖進行佐證,未經授權的人員確實可以拿到多筆資料, 20250428094723.xlsx此檔案我估計為高屏處全區資料 共有約2500筆員工資料 (完整內容請見email附件謝謝)
備註:完成測試過後我已將不屬於我的員工資料全數刪除,所有資料也僅作為測試佐證Broken Access Control 問題 無其他用途!!! 重要
影響:
- 大規模個資外洩:任何人僅透過暴力破解猜檔名,即可批次下載員工相關資料
- 未授權角色存取:透過這種方式基層員工可直接抓取店、區經理/總部匯出的全區彙整檔,造成跨層級資訊洩漏。
修補建議
1. 授權驗證:下載前再次驗證登入身分,並比對請求者是否為檔案擁有者。
2. 一次性簽章 URL:檔名加隨機 GUID,並於 URL 中帶短效 Token(Ex:5 分鐘內失效)。