一早滑脆全是這件事:Zeabur 環境變數外洩,客戶直接火葬場 封面圖
科技

一早滑脆全是這件事:Zeabur 環境變數外洩,客戶直接火葬場

Zeabur 發生機密資訊外洩,客戶收到官方信要求立刻輪換 Stripe 金鑰;金鑰還沒換完,OpenRouter 餘額告警與自動儲值信已經飛來。這不是把 key 寫進 Git 的低級失誤,是託管層把大家的秘密一起交出去。本文整理現況、台灣法規缺口,以及你現在必須立刻做的事。

一早滑 Threads、滑 V2EX、滑群組,時間軸幾乎被同一件事洗版:Zeabur 環境變數外洩。官方信寫「機密資訊外洩,Stripe 金鑰有風險,請立刻輪換」。聽起來像標準資安通報。真正讓人崩潰的是下一秒——金鑰還沒換完,OpenRouter 的餘額告警跟自動儲值信已經飛過來。

有人對過 log:有人拿 Zeabur 上存的 sk 在跑 Opus。一條條金鑰直接燒錢。平台幫你管 env,結果 env 自己先漏。

這不是「使用者自己把 key 寫進 Git」那種低級失誤。是託管層把大家的秘密一起交出去。一個洞,全站客戶一起陪葬。

時間線很短,錢燒得很快

開發者社群目前能對上的敘事大致是這樣:

時間 發生什麼 客戶實際感受
約 8 月 28 日起 官方信:機密資訊外洩,Stripe 金鑰有風險,請立刻輪換 還在拆專案清單、還在登後台
輪換還沒做完 OpenRouter 餘額告警、自動儲值信進來 金鑰已被拿去打模型 API
對 log 之後 被洩的 sk 在跑 Opus 不是探測流量,是直接燒額度

重點不在「有沒有人中獎」,而在攻擊面已經從「可能被用」變成「正在被用」。支付金鑰跟模型金鑰同時出事,代表這批環境變數不是單一服務的設定檔,而是整包生產機密:StripeOpenRouterOpenAI、資料庫密碼、webhook secret,能塞進 Zeabur Variables 的東西,理論上都能被同一條管道帶走。

平台賣的是「你不用自己管伺服器」。客戶付的代價,常常是把整包秘密交給同一扇門。門破了,沒有人可以假裝自己只是使用者設定錯誤。

這跟「自己把 .env 推上 GitHub」不是同一類事故

sk_live 寫進程式碼、把 .env commit 上去、CI log 沒遮罩——那些是開發者自己的作業失誤,影響範圍通常是那一個 repo、那一組人

這次不一樣。客戶是照著 PaaS 的正確用法走:金鑰放在平台的環境變數、不進 Git、由平台注入 runtime。結果漏的是託管層自己。一個漏洞可以同時打到所有把秘密交給它的專案。這叫供應鏈事故,不是新手教學裡的「記得 gitignore」。

白話講:你把保險箱鑰匙寄存在銀行金庫。銀行金庫被撬了。你不能事後被說成「誰叫你把鑰匙給銀行」。給銀行保管,本來就是這門生意的核心。

台灣法規對這件事,牙齒長在別的地方

出事之後大家最常問:官方發一封信,然後呢?罰則呢?時限呢?要不要賠客戶被刷掉的 API 額度、被盜用的付款金鑰、停機的損失?

台灣這邊,牙齒比較利的是政府機關、關鍵基礎設施、特定受監管產業

  • 《個人資料保護法》管的是「個人資料」處理:蒐集、利用、外洩後的通知與損害賠償。金鑰、Stripe secret、OpenRouter sk 本身比較像商業機密與系統憑證,不一定每一筆都能直接套進個資事故的框架;若連帶流出顧客個資、訂單、支付識別資料,才比較容易走到個資法。
  • 《資通安全管理法》主要綁公務機關與關鍵基礎設施提供者:資安責任、通報、演練、罰則相對具體。新創 PaaS、對民間開發者賣託管的雲端平台,實務上常常不在這套強制通報與時限的核心射程裡
  • 契約上多半是服務條款:盡力維護、通知、請你輪換金鑰。對客戶被刷的模型額度、停機、商譽,賠償條款通常寫得很薄,甚至接近免責。

結果就是大家這兩天看到的標準作業:先道歉、請你自己換 key。 法規真的不太把「民間開發者把生產機密交給新創 PaaS」這塊當一回事。出事才發現整條鏈沒人負責——平台說已通知,金流商說金鑰在你那邊,模型商說用量是你的帳號,客戶夾在中間自己止血。

這不是幫平台開脫,也不是說台灣完全沒有民法、消保、契約可以走。而是承認一件很難聽的事實:對這種規模的託管外洩,強制通報時限、對客戶的法定賠償、主管機關能不能進場,實務上常常空心。 你的護城河還是自己的輪換速度,不是一封官方信。

現在立刻做,不要等第二封信

順序比心情重要。先斷血,再追究。

  1. 全部輪換,不要挑著換。 凡是曾經存在 Zeabur 的 API key、資料庫密碼、Stripe(含 webhook secret 與受限金鑰)、OpenRouterOpenAI、其他 LLM 供應商、SMTP、OAuth client secret、JWT 簽名、雲端存取金鑰——舊的作廢,新的重生。舊鑰留著「觀察」等於繼續開著水龍頭。
  2. 查用量與異常呼叫。 Stripe 看付款、退款、顧客匯出、金鑰權限;OpenRouter / OpenAI 看 token、模型(這次社群已點名 Opus)、來源 IP、突然出現的自動儲值。資料庫看連線來源與異常查詢。能關自動儲值就先關,能設硬上限就設硬上限。
  3. 檢查下游有沒有被拿去對顧客動手。 金鑰外洩不只燒自己的額度,也可能被拿去建假收款連結、讀交易紀錄、改 webhook。支付這條線要當生產事故,不是「AI 帳單變貴了」而已。
  4. 能搬就評估要不要搬。 至少不要把正式環境的秘密只放在單一平台。正式金鑰用獨立的密鑰管理(雲端 KMS、獨立 vault)、最小權限、依環境拆開;預覽環境不要共用 production secret。平台可以管部署,不該是你唯一的保險箱。
  5. 留證據。 官方信、時間戳、用量截圖、log、自動儲值信件。之後要談賠償、保險或對客戶交代,靠的是紀錄不是記憶。
你以為夠了 其實不夠
只換 Stripe live key webhook、restricted key、測試金鑰、連動的發票與顧客匯出權限都要重看
只停 OpenRouter 自動儲值 舊 sk 還能打,直到你撤銷;帳號層還要看有沒有被加 webhook 或新鑰
只改 Zeabur 面板上的值 舊值已經在外面,改面板救不了已外洩的那一份
等官方事後報告 燒錢跟盜刷是現在進行式

資安沒做好,不是官方發一封信就結束

託管的承諾很誘人:push 就上線、env 幫你注入、不用自己顧機器。這次把那句話翻過來寫——你把秘密集中存放的地方,就是爆破半徑最大的地方。 一個洞打到全站客戶,客戶的錢、服務、信任一起燒掉。

平台該不該負更大的責任?該。台灣法規現在能不能逼它負到和傷害等比例的責任?常常不能。這兩句可以同時成立。所以對還把正式環境金鑰只放在單一 PaaS 的人來說,現在不是發文痛罵的時間,是輪換、查帳、拆單一依賴的時間。

滑脆可以繼續罵草台。金鑰先換完。燒過的額度再算。信任這件事,沒有一封「請立刻輪換」可以自動補回來。

🪙

開始您的加密貨幣之旅

立即註冊全球最大加密貨幣交易所 幣安 (Binance),使用專屬推薦碼 CLICK168,即可享有手續費終身優惠與專屬的新人迎新大禮包!

👉 領取幣安專屬註冊優惠