全聯官網/小時達/全電商平台 登入系統 2-Factor Authentication Bypass - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2025-00623
  •  發信 Vendor: 全聯實業
  • Title: 全聯官網/小時達/全電商平台 登入系統 2-Factor Authentication Bypass
  • Introduction: 繞過雙重驗證

處理狀態

目前狀態

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

處理歷程

  • 2025/06/23 19:34:55 : 新提交 (由 CheN.. 更新此狀態)
  • 2025/06/23 19:37:04 : 新提交 (由 CheN.. 更新此狀態)
  • 2025/06/25 02:27:24 : 新提交 (由 CheN.. 更新此狀態)
  • 2025/06/26 23:27:36 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/07/01 17:46:02 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/07/01 17:46:02 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/07/01 17:46:02 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/08/23 03:00:07 : 公開 (由 HITCON ZeroDay 平台自動更新)
  • 2025/08/25 14:19:32 : 已修補 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/09/02 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2025-00623
  • 通報者: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://alb.pxpay.com.tw/pxmart/dsf/api/webLoginVo
https://alb.pxpay.com.tw/pxmart/dsf/api/forgetPassword

敘述

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

概述

在協助複測 ZD-2025-00307 時重新觀察整個登入流程,發現 2FA 實際上只被前端攔住。正常流程輸入帳號與密碼後,系統會強制簡訊雙重驗證,必須在畫面輸入 6 位碼才能完成登入;但直接呼叫最後一支 API POST /pxmart/dsf/api/webLoginVo HTTP/2 Host: alb.pxpay.com.tw,只要帳號與密碼正確,不需帶入驗證碼,伺服器會立即回傳 Location: https://shop.pxgo.com.tw/mweb/#access_token=…。簡而言之,只要知道任一使用者的帳密,就能在當事人不知情的狀況下直接取得 access token 並登入。
同一端點也沒有嘗試次數限制,正常畫面連錯六次系統會鎖帳號,但透過這支 API 可以無速率限制爆破密碼。
忘記密碼流程出現相同問題。畫面上先要求輸入 OTP,再強制回答「安全問題/生日/交易密碼…」其中一題才可設定新密碼;然而最後的封包 POST /pxmart/dsf/api/forgetPassword HTTP/2 Host: alb.pxpay.com.tw 只要帶入電話號碼、收到的 OTP 與欲變更的新密碼,就能直接重設,完全繞過第二道身分問題。
圖片

重現步驟

  1. 直接送出
    POST /pxmart/dsf/api/webLoginVo
    { "moblie":"09xxxxxxxx", "password":"urpassword",
    "client_id":"e790b859-22b7-4eeb-bfff-60d85c636f4a",
    "redirect_uri":"https://shop.pxgo.com.tw/mweb/",
    "response_type":"token" }

    即回應 200 並在 Location 帶 access_token。
    圖片

  2. 取得一組合法 OTP 後送出
    POST /pxmart/dsf/api/forgetPassword
    { "phoneNumber":"09xxxxxxxx",
    "validCode":"<OTP>",
    "passType":"LOGINPW",
    "password":"urnewpassword",
    "countryCode":886 }

    回應 200,密碼立刻生效。
    圖片

PoC

完整登入封包
圖片
完整重置密碼封包
圖片

影響

攻擊者只需帳密或一次性簡訊即可接管帳號

可藉由無速率限制的端點進行密碼爆破

2025/04/15 Update

發現一個衍伸問題,有趣的是我注意到登入系統有"強制"弱密碼政策只允許6 -10碼密碼且不能使用特殊字符,他可以跟2FA bypass漏洞做一個完美的利用,經過一番研究和測試 我能夠證明連結弱密碼政策會造成大量帳號被接管。台灣手機電話號碼規則為 09XX XXX XXX 以我的電話號碼為例 ,前6碼固定 後4碼作為帳號枚舉 製作列表0939220000-0939229999, 1萬種可能,對端點POST /pxmart/dsf/api/webLoginVo HTTP/2 Host: alb.pxpay.com.tw 設置密碼為123456(最簡單弱密碼組合嘗試) 使用 Intruder 做噴灑攻擊測試,發現光是這區間就存在至少50組弱密碼帳號(扣除有時會出現timeout錯誤和誤差) 且可以進行接管,我們先前有說到由於token是共用的所以像是官網和全電商平台的帳號也會同時被接管!
圖片
為了可以更方便的利用漏洞(PoC用途) 我撰寫了exploit 程式 pxpay_exploit.py
完整程式請見email

使用方法只需要輸入想測試的電話號碼前6碼和密碼組合,程式會自動列舉出該區間內的所有可能帳號(共 1 萬筆),嘗試登入偵測是否為使用弱密碼的帳號。一旦成功,即會印出該帳號對應的 Access Token 登入網址,作為帳號接管的證據。
圖片
建議是強制系統要求強密碼政策,只單純修復2FA問題是治標不治本的

註:由於結合弱密碼政策造成眾多帳號多平台接管問題,我會將風險更新為“嚴重”

修補建議

後端必須在發 token/改密前檢查 server-side 標記 (Ex:otp_verified 與 challenge_passed),未通過則拒絕請求

在 api 端點也對密碼嘗試次做正確的速率限制。

擷圖

留言討論

聯絡組織

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