Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2025-00623
- Vendor: 全聯實業
- Title: 全聯官網/小時達/全電商平台 登入系統 2-Factor Authentication Bypass
- Introduction: 繞過雙重驗證
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
未複測
-
公開
處理歷程
- 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/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 與欲變更的新密碼,就能直接重設,完全繞過第二道身分問題。
重現步驟
-
直接送出
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。
-
取得一組合法 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 端點也對密碼嘗試次做正確的速率限制。