全聯 PX Pay App 發票記帳 Hardcoded Secrets leads to Authentication Bypass - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2025-01525
  •  發信 Vendor: 全聯實業
  • Title: 全聯 PX Pay App 發票記帳 Hardcoded Secrets leads to Authentication Bypass
  • Introduction: 寫死 AES 與 HMAC 明文金鑰,攻擊者可以還原演算法並偽造 token

處理狀態

目前狀態

公開
Last Update : 2026/01/15
  • 新提交
  • 已審核
  • 已通報
  • 已修補
  • 未複測
  • 公開

處理歷程

  • 2025/12/15 14:47:34 : 新提交 (由 CheN.. 更新此狀態)
  • 2025/12/15 14:55:23 : 新提交 (由 CheN.. 更新此狀態)
  • 2025/12/18 17:10:16 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/01/05 14:13:32 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/01/05 14:13:32 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/01/05 14:13:32 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/01/07 14:04:52 : 已修補 (由 組織帳號 更新此狀態)
  • 2026/01/07 14:04:56 : 已修補 (由 組織帳號 更新此狀態)
  • 2026/01/07 14:05:05 : 已修補 (由 組織帳號 更新此狀態)
  • 2026/01/15 03:00:11 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2025-01525
  • 通報者: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://pxmart-einvoice.cmoney.tw/api/token/v2/auth
https://pxmart-einvoice.cmoney.tw/api/accountbook/User/AccountDataByMonthsAndCalDropFromInvoice
https://pxmart-einvoice.cmoney.tw/api/accountbook/record/User/ExpenseRecord

敘述

備註:同步通報至 HITCON ZeroDay

概述

前天看到 App 裡面有個蠻有趣的區域叫 “發票記帳”,似乎是跟 CMoney 廠商一起合作開發出來的功能,覺得挺有趣的 所以決定探索看看。在逆向 apk 後 靜態分析反編譯的程式碼,發現有做些混淆但不太強,經過一番探索在 x9.h 找到寫死的 AES 與 HMAC 明文金鑰和連結 https://pxmart-einvoice.cmoney.tw/ ,打開後 network 顯示有個 api 端點 https://pxmart-einvoice.cmoney.tw/api/token/v2/auth 似乎是用來交換 Token 的,請求必須包含 X-Cmoney、X-Date 以及帶有簽章的 Authorization 等特殊參數。回頭進一步探索分析 ca.b 和 v9.a 等檔案,成功還原這些 Header 的加密與簽章演算法。之後我撰寫了 Python 腳本來模擬 App 的行為,在完全不需要帳號密碼的情況下成功騙過伺服器,將任意 Member ID 轉換成合法的 JWT Token。透過抓包 App 找到多個可利用的 api 端點,可以任意讀取和寫入目標帳號的 "發票與記帳"。

重置步驟

  1. 生成偽造簽章,執行第一版 Python 腳本,利用外洩的金鑰與還原的演算法,針對目標 Member ID 生成合法的 API 簽章與加密參數。
    圖片

  2. 將生成的 Headers 帶入 向 Auth API 發送 POST 請求。伺服器驗證簽章通過後,將回傳該會員的有效 JWT Token。

  3. 使用取得的 JWT Token,即可呼叫記帳 API (https://pxmart-einvoice.cmoney.tw/api/accountbook/User/AccountDataByMonthsAndCalDropFromInvoice) 讀取目標會員的敏感消費紀錄。
    圖片

PoC

洩漏金鑰
圖片

演算法還原
圖片
圖片

測試結果
圖片
圖片
圖片

2 種版本的 Python 腳本,見郵件附件

影片簡單展示如何操作第二版本的 PoC 程式及證明其影響,請至共享資料夾查看。

影響

接管發票記帳區域:攻擊者可繞過帳密驗證,偽造簽章直接取得任意會員的有效 Token。操作此區域所有功能。

修補建議

移除客戶端金鑰:App 不應持有任何 AES/HMAC 金鑰。
金鑰輪替:金鑰已確認外洩,修補後須立即更換新金鑰。

擷圖

留言討論

聯絡組織

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