Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2026-00392
- Vendor: 狄卡科技股份有限公司
- Title: Dcard about.*****.tw 生產環境使用 Staging 配置導致內部 Kubernetes 服務與 Staging 域名洩露
- Introduction: about.*****.tw 在生產環境跑著 staging 設定,內部的 Kubernetes 服務位址跟 staging 域名洩漏
- 獎勵金
- 感謝函
- 風雲榜
處理狀態
目前狀態
公開
Last Update : 2026/03/29
-
新提交
-
已審核
-
已通報
-
已修補
-
已複測
-
公開
處理歷程
- 2026/03/23 13:56:12 : 新提交 (由 鄉民 更新此狀態)
- 2026/03/23 14:24:46 : 新提交 (由 鄉民 更新此狀態)
- 2026/03/23 14:25:55 : 新提交 (由 鄉民 更新此狀態)
- 2026/03/23 16:05:42 : 新提交 (由 鄉民 更新此狀態)
- 2026/03/23 18:28:35 : 審核中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2026/03/23 19:02:28 : 修補中 (由 組織帳號 更新此狀態)
- 2026/03/25 13:29:05 : 複測申請中 (由 組織帳號 更新此狀態)
- 2026/03/25 15:19:35 : 確認已修補 (由 鄉民 更新此狀態)
- 2026/03/29 03:00:14 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2026-00392
- 通報者:鄉民
- 風險:高
- 類型:資訊洩漏 (Information Leakage)
參考資料
暫無資料
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)
相關網址
https://about.dcard.tw/
https://creator.dcard.tw/
https://creator.dcard.tw/
敘述
about.dcard.tw 裡有一個部份 它的 Next.js publicRuntimeConfig 裡面寫的是 staging 的設定,不是 production
具體來說,送一個帶 RSC: 1 header 的請求到 about.dcard.tw,回來的 payload 裡面可以看到:
{
"isEnvProd": false,
"isEnvStage": true,
"strapiHost": "http://strapi.default.svc.cluster.local",
"megapxHost": "https://megapx-stage.dcard.io",
"creatorHost": "https://creator-stage.dcard.io",
"tracesSampleRate": 1.0
}
產生以下問題:
strapi.default.svc.cluster.local是內部 Kubernetes 的服務名稱,而且跑在 default namespace 知道命名規則之後,攻擊者如果拿到內網存取權限,可以直接猜其他服務的名字- staging 域名全部都是活的 ,所以這裡我有使用dig,以下都有解析到 Cloudflare IP(104.18.26.37 / 104.18.27.37):
- megapx-stage.dcard.io
- creator-stage.dcard.io
- id-stage.dcard.io
- ads-stage.dcard.io
- about-stage.dcard.io
- stage.dcard.io
目前這些 staging站都被 Cloudflare Access擋下,不過dns有解析這件事本身不太好 staging環境的防禦通常比 production 鬆很多
- Sentry 的
tracesSampleRate設 1.0,production 不應該這樣設,這會讓更多的錯誤細節(stack trace、變數內容)被送出去
btw creator.dcard.tw has same problem
reproduce
先進https://about.dcard.tw/
f12 -> console -> paste JSON.stringify(window.__CLIENT_PUBLIC_RUNTIME_CONFIG, null,2)
output will be like:
'{\n "isEnvProd": false,\n "isEnvStage": true,\n "envName": "staging",\n "isNodeEnvProd": true,\n "nodeEnvName": "production",\n "isDevelopment": false,\n "isPullup": false,\n "version": "2.26.1",\n "sentry": {\n "environment": "staging",\n "sampleRate": 1,\n "release": "[email protected]"\n },\n "domain": "about.dcard.tw",\n "appName": "dcard-official",\n "megapx": {\n "host": "https://megapx-stage.dcard.io"\n },\n "strapi": {\n "url": "http://strapi.default.svc.cluster.local."\n },\n "supportedLanguage": {\n "defaultLocale": "zh-TW",\n "locales": [\n "zh-TW",\n "en"\n ]\n }\n}'
找一下publicRuntimeConfig應該就會發現那些東西
驗證 staging 域名:
dig +short megapx-stage.dcard.io
# 104.18.26.37, 104.18.27.37
修補建議
1. 把 about.dcard.tw & creator.dcard.tw 的部署設定修正為 production 內部服務的URL(像 strapiHost)不要放 `publicRuntimeConfig`
2. 用 `serverRuntimeConfig` 就不會送到 client 端 Sentry sample rate調到 0.01~0.1
3. staging 的 DNS 記錄如果不需要對外解析的話建議拿掉。
擷圖
留言討論
登入後留言
聯絡組織
發送私人訊息
您也可以透過私人訊息的方式與組織聯繫,討論有關於這個漏洞的相關資訊。