介面可以變簡單,
危險不能跟著變輕

速讀:5 分鐘掌握重點

為什麼現在很紅:PaaS 賣的是「你不必懂」。但你不必懂的那些東西,還是會出事;差別只在出事時,你有沒有機會在按下去之前看到它。

一句話結論
三份公開紀錄有同一個形狀:2023 年,日常帳號就能一鍵刪掉整區正式叢集;2026 年 6 月,標成「唯讀」的指令會把整個服務的密鑰印給 AI 代理;2026 年 8 月,使用者交給平台的環境變數被集中讀走,平台自己的監控沒發現。
他要的是什麼
攻擊者最喜歡的平台,是讓所有使用者把密鑰放在同一個地方、用同一個介面、看不出哪一把最貴的平台。打下一次,拿到的是所有人的保險櫃。
你今天做一件事
今天把你放在 PaaS 上的每一把有效憑證列出來,旁邊寫上「被讀走時最多損失多少」。寫不出上限的那幾把,就是你這週要先處理的。 直接去做 →
哪些能信
3 可證明3 推論1 缺口 每個主張都標了等級,缺口是誠實寫出來的。
破口速查
受害端一律去識別化;寫「未公開」代表公開資料查不到。
伺服器服務商
Zeabur(PaaS);本文綜合 2023 年台北區叢集誤刪、2026 年 CLI 明文輸出 issue、2026 年 8 月資安事件三份公開紀錄
網路服務商
未公開
漏洞出現的地方
設計層:危險操作和日常操作長得一樣(刪叢集、印出全部密鑰、把所有憑證集中存放),介面沒有讓危險和影響範圍成比例地變得可見
馬上自我檢測
列出你放在 PaaS 上的每一把有效憑證,標上「被讀走時最多損失多少」 確認每一把都有範圍、到期日或預算上限 看平台文件有沒有寫清楚環境變數存在哪、誰讀得到
漏洞修補方式
平台端:危險的摩擦力要和影響範圍成比例、預設值以 AI 代理為最壞使用者來設計、承諾的控制要有公開的落實追蹤。使用端:假設平台保管的密鑰可能被讀走,讓每一把被讀走時都便宜
有 15 分鐘再看:其餘 2 點
  1. 這些都不是「平台太簡單」的錯。簡單是好事,問題是危險跟著被藏起來:按下去之前,介面沒有讓人看到影響有多大。
  2. 使用者能守住的是最後一段:假設平台保管的密鑰可能被讀走,讓每一把被讀走時都便宜(有範圍、有預算上限、能快速撤銷),並用平台怎麼面對失敗來決定要不要繼續信任它。

把同一個平台三年內的三份公開紀錄排在一起:2023 年實習生一鍵刪掉正式叢集、2026 年 6 月 CLI 把密鑰印進 AI 對話紀錄、2026 年 8 月平台被打穿讀走使用者的環境變數。三件事的形狀一樣:平台把複雜度藏起來,危險也跟著藏起來,最後由按下按鈕的那個人承擔。這篇講我們怎麼看,以及使用者該自己守住哪一段。

作者分析:Zeabur 三份公開紀錄中的同一種設計問題(2023-10 → 2026-09)·2023-10-27 叢集誤刪 → 2026-06-01 CLI issue → 2026-08-27 資安事件 → 2026-09-09 完整報告·全文 8 分鐘
本篇目錄

三個按鈕

第一個按鈕在 2023 年 10 月 27 日。一位實習生要清掉舊的測試叢集,他的帳號同時看得到、也刪得掉正式叢集,刪除前沒有任何人或任何機制再問一次。台北區整個正式環境離線約 50 分鐘。(完整拆解)

第二個按鈕在 2026 年 6 月 1 日被人寫成 issue。平台給 AI 代理用的技能說明,把檢查環境變數的指令標成「Read-only」;這個指令確實不會改任何設定,只是會把整個服務的每一個密鑰用明文印出來,直接進到 AI 的對話紀錄。(完整拆解)

第三個按鈕是每一個使用者每天都在按的:在平台的環境變數欄位貼上一把金鑰、按儲存。2026 年 8 月 27 日,攻擊者從一個使用者部署的應用程式進門,一路走到平台的正式資料庫,讀走專案環境變數的名稱與值。平台的監控沒有發現,隔天外部回報金鑰被盜用才知道。(完整拆解)

先講我們的立場:這篇不是要說這個平台不能用,也不是要說 PaaS 不安全。三件事我們都只用平台自己公開的紀錄,而且其中兩份報告寫得比多數平台坦白。我們要講的是一個設計問題,它在任何讓事情「變簡單」的工具上都會出現:介面可以變簡單,危險不能跟著變輕。

  1. 2023-10-27
    台北區正式叢集被誤刪;官方當天發布事後報告,承諾最小權限、破壞性操作另外切換角色、雲端稽核紀錄接告警
    官方事後報告
  2. 2026-06-01
    agent-skills issue #67:variable list 預設明文輸出所有值,建議預設遮蔽或加 --keys-only;截至 10-17 沒有維護者回應
    GitHub issue
  3. 2026-08-27
    攻擊者跨過共用叢集、平台 API 金鑰、AWS root 金鑰,讀走部分正式資料庫的專案環境變數
    官方完整報告
  4. 2026-08-28
    接到外部回報才確認事件;報告寫明當時監控與告警沒有發現
    官方完整報告
  5. 2026-09-09
    完整報告發布:環境變數改為預設存在使用者的專屬主機、Legacy API Key 停用
    官方完整報告、狀態頁

三年、三件事,時間軸上看不出關聯;把它們放在一起,才看得出是同一件事。

危險被藏起來,不等於消失

三個按鈕有一個共同點:危險操作和日常操作長得一模一樣。刪正式叢集和刪測試叢集是同一個指令;印出全部密鑰和確認一個變數在不在是同一個指令;把一把能刷掉十萬元的金鑰存進平台,和存一個功能開關是同一個欄位。

好的介面會讓摩擦力和影響範圍成比例。刪一個測試服務按一下就好;刪一整區正式環境,應該要切換角色、輸入名稱、等第二個人核准。查一個變數名稱不需要任何確認;印出整個服務的密鑰,應該要明確加上 --reveal。這不是把介面變複雜,是讓複雜度出現在它該出現的地方。

2023 年的報告其實已經寫出了這個原則:破壞性操作要手動切換專用角色、切換時告警、關鍵資源上鎖並要求 MFA。我們看到的問題是,這個原則停在「平台內部的人」,沒有延伸到「使用平台的人」和「替使用者執行指令的 AI 代理」。

預設值要以 AI 代理為最壞的使用者

到這裡,其實已經足夠理解我們的主張。如果你關心的是自己該做什麼,可以直接往「使用者能守住的最後一段」繼續閱讀。下面兩節講平台端,會稍微技術一些。

CLI 明文輸出這件事,三年前大概不會有人當成問題:工程師在自己的終端機上看到密鑰,看完就關掉。現在執行指令的常常不是人,是 AI 代理,而代理會把看到的每一行都留在對話紀錄裡、送到模型供應商、在下一輪對話中引用。工具的威脅模型變了,預設值卻沒有跟著改。

我們的看法是:任何會被 AI 代理呼叫的工具,預設值都應該假設呼叫者會記住一切。只列名稱、遮蔽值、明確要求才顯示,這些在給人用的時代是「貼心」,在給代理用的時代是「必要」。issue #67 提出的修法並不難,難的是承認使用者已經換了。

承諾要能被追蹤

2023 年的報告承諾,要把 AWS CloudTrail 與 Google Cloud Audit Logs 匯入內部系統,對危險操作設告警規則。2026 年的報告寫的是,AWS root 金鑰被使用、服務帳戶被授予叢集管理員、正式資料庫被大量讀取,當時的監控與告警都沒有發現。

我們不知道兩份報告講的是不是同一套系統,2026 年出事的也可能是報告所說「正在退役、隔離與存取控制還沒做完」的舊環境。所以這裡不下結論,只提一個要求:承諾的控制要有公開的落實追蹤。事後報告寫得再好,如果下一份報告裡同一類訊號還是沒人看到,使用者就沒辦法從報告判斷平台有沒有變得更安全。

另一個值得對照的地方是文件。平台的安全實踐頁面(本站 2026-10-17 查)寫到客戶工作負載在隔離的容器中執行、有網路層級的隔離,也寫到正式資料以 AES-256 靜態加密;但完全沒有提到環境變數存在哪裡、誰讀得到。8 月的報告則寫明,共用叢集允許跨專案的內部連線。兩者可能說的是不同的產品線,但使用者在選平台時,分不出來。

使用者能守住的最後一段

平台端的事,使用者只能要求,不能代替它做。使用者自己能完全掌握的,是「密鑰被讀走時會損失多少」。我們的建議分三層。

第一層,假設平台保管的密鑰可能被讀走。這不是不信任某一家,是信任的正確單位:你信任的不是平台,是平台所有邊界的總和,而 8 月的事件證明,那個總和可能少於任何一道邊界。改過名字也沒用,報告寫明值的格式認得出來就在範圍內。

第二層,讓每一把被讀走時都便宜。AI 供應商的金鑰設月用量上限;雲端金鑰只給這個服務需要的權限;資料庫帳號一個服務一組、不給管理權;能用短期憑證或從密碼管理器在啟動時注入的,就不要以長期明文存在平台上。做到這一層,平台再出事,你的損失有上限。

第三層,用平台怎麼面對失敗來決定信任。看它的事後報告:時間有沒有精確到可以對照、有沒有承認自己的錯、有沒有建議使用者「全部換」而不是「收到通知的才換」、承諾的改善之後有沒有追蹤。這個平台的兩份報告在前三項做得不錯,第四項還看不到。

leaked credentials這次外洩了什麼:服務、用途、存在形式
服務憑證類型用途存在形式放在哪權限範圍狀態
Google Cloud IAM(2023 叢集誤刪)開發人員帳號上的正式叢集管理員權限日常開發與維運人員帳號的 IAM 角色綁定平台的 GCP 專案可刪整區正式環境官方表示已收回並改為最小權限
使用者服務的環境變數(2026-06 CLI issue)整個服務的所有環境變數值使用者應用程式連外部服務終端機明文輸出,進入 AI 對話紀錄AI 代理對話紀錄、模型供應商請求、本機備份每次輸出一整個服務工具端截至 2026-10-17 未修
使用者交給平台的憑證(2026-08 資安事件)專案環境變數的名稱與值:AI 與第三方 API 金鑰、雲端憑證、資料庫連線與密碼、簽章金鑰使用者應用程式連外部服務明文環境變數(儲存於平台正式資料庫)平台正式資料庫受影響數量未公開官方建議所有仍有效者預防性輪替
憑證本身已遮蔽或失效;這裡只說明它是哪個服務、拿來做什麼、以什麼形式存放,讓你能對照自己的環境。

三列放在一起看,第一列是平台內部的人拿得到太多,第二、三列是使用者的密鑰去了使用者看不到的地方。

證據等級

這篇是觀點文,事實部分可以核對,主張部分是我們的推論,要分開看。

這篇提到的項目要花多少錢

讓密鑰「被讀走時便宜」的成本,大多是一次性的人力;把長期明文搬進密碼管理服務,有公開牌價可以算。

cost讓每一把密鑰被讀走時都便宜
項目用量單價期間US$NT$舉證
AWS Secrets Manager:20 把密鑰
估:20 把是小型團隊的常見數量;呼叫次數依部署頻率而定
20 把US$0.40/把/月(API 呼叫另計 US$0.05/萬次)每月8.00256AWS 公開定價
盤點 PaaS 上所有有效憑證並標出損失上限
估:取中間值 NT$27,500 的半天
約 0.5 人日顧問日費 NT$20,000–35,000(估)一次性429.6913,750本站假設值
為 AI 與雲端金鑰設範圍、預算上限與告警
估:多數供應商後台免費提供上限設定
約 0.5 人日顧問日費 NT$20,000–35,000(估)一次性429.6913,750本站假設值
平台再次被打穿時,沒有上限的金鑰的損失
這一格填不出來,正是要先做上面三格的原因
—————無
合計(僅可證明列)0.000
匯率假設 1 USD ≈ NT$32。單價為公開牌價或帳單實付,來源:AWS Secrets Manager 公開定價(2026-10 查);本站人力日費假設。「舉證」欄標明每筆損失的證據來源與等級( 可證明 推論 缺口)。

每月幾美元加上一個人日,換的是最後一格從「填不出來」變成「有上限」。

你可以學到什麼

站在攻擊者的位置看:他喜歡的是一個所有人都把密鑰放在同一個地方、而且每一把看起來都一樣的平台。他不需要知道哪一把最貴,因為全部都能拿。

lessons本案的 5 個教訓
  1. 01
    介面可以變簡單,危險不能跟著變輕。好的工具讓摩擦力和影響範圍成比例:影響越大,按下去之前越要看得見。
  2. 02
    任何會被 AI 代理呼叫的工具,預設值都應該假設呼叫者會記住一切。
  3. 03
    交給平台的密鑰,信任的單位是平台所有邊界的總和;讓每一把被讀走時都便宜,是使用者唯一能完全掌握的防線。
  4. 04
    事後報告寫得坦白是好事,但信任要看承諾的控制之後有沒有被追蹤、有沒有在下一次發揮作用。
  5. 05
    選平台時,要問清楚環境變數存在哪裡、誰讀得到、金鑰能不能設範圍與到期日;文件沒寫的,就是要問的。
keywords重點學習:最需要學習的 10 個關鍵字10 個
  1. 01
    影響範圍(blast radius)
    三件事共同的問題:一個動作能影響多大,介面上看不出來。
  2. 02
    成比例的摩擦力
    本篇的核心主張:危險越大,操作前的確認越多;不是把介面全部變複雜。
  3. 03
    安全的預設值(secure by default)
    使用者什麼都不改時就該安全;AI 代理時代更重要。
  4. 04
    AI 代理作為最壞使用者
    代理會保留並轉送讀到的一切,工具設計要以它為威脅模型。
  5. 05
    預算上限(spend limit)
    讓 AI 金鑰被盜用時損失有天花板;使用者端最便宜的一道防線。
  6. 06
    短期憑證(short-lived credentials)
    有到期日的憑證被讀走時,能用的時間有限。
  7. 07
    密碼管理服務注入(secret injection)
    啟動時從 Secrets Manager 之類的服務取用,不以長期明文存在平台上。
  8. 08
    共同責任(shared responsibility)
    平台守它的邊界,使用者守密鑰被讀走後的損失;兩邊都不能假設對方會守住。
  9. 09
    落實追蹤(remediation tracking)
    事後報告承諾的控制,要能在之後被驗證有沒有運作。
  10. 10
    事後報告(postmortem)
    評估平台時最好的資料:看它怎麼寫自己的失敗,比看它的功能頁更準。

下面五步全部唯讀,做完你會有一張「每一把密鑰被讀走時最多損失多少」的表。

try today今天就可以來試試約 15 分鐘

全部唯讀,不改任何設定;做完你會知道自己有沒有同樣的破口。

  1. 列出你放在任何 PaaS 環境變數裡、現在還有效的憑證(只列名稱與所屬服務,不印值)
    看到什麼代表什麼:這張表就是平台被打穿時,攻擊者會拿到的清單。
  2. 每一把旁邊寫上「被讀走時最多損失多少」
    看到什麼代表什麼:寫不出上限的(沒有預算上限的 AI 金鑰、管理員權限的雲端金鑰、資料庫 root 密碼),就是第一批要處理的。這張表我們叫「blast-ledger-u9k」,平台下次出事時先開它。
  3. 到 AI 供應商後台確認每一把金鑰有沒有月用量上限
    看到什麼代表什麼:沒有上限,外洩時損失沒有天花板。
  4. 確認 AWS 帳號沒有 root 存取金鑰
    aws iam get-account-summary --query 'SummaryMap.AccountAccessKeysPresent'
    看到什麼代表什麼:0 代表沒有;1 就是整個帳號都放在一把金鑰上。
  5. 找出你用的平台的事後報告,看有沒有精確時間、有沒有承認自己的錯、有沒有建議全部輪替、之前的承諾有沒有後續
    看到什麼代表什麼:找不到任何事後報告,本身就是一個答案。
想看全部細節?

環境背景、時間線、攻擊鏈對照 ATT&CK、關鍵證據、根因、處置與檢討都在完整版,約 8 分鐘。

來源

本文為公開報導與官方公告的整理與拆解,非第一手鑑識;證據等級依來源可信度標註。

本文由 AI 團隊協助研究與撰寫,經隱私與事實檢查後發布;證據等級依來源可信度標註。

看完的心情
ai prompt把這篇的切入點帶回你的環境

複製下面這段,貼給你在用的 AI 工具(Claude Code、Cursor、Copilot、ChatGPT 都可以)。它會用本篇的破口位置、自我檢測與學習重點,對你的專案或環境做一次資安掃描,列出潛在問題與建議的調整或加強方式。

預設是唯讀:只發現問題、提出建議,不會改你任何檔案或設定。

§
對應課程模組

M2 身分與金鑰 · M8 結業盤點 · 想在自己的環境做一次同樣的盤點,從 自我盤點 開始。

newsletter
下一篇拆解直接寄到信箱

每篇新文章一封:三點摘要、關鍵字定義、今天能做的一件事。或先 加入會員 記錄你完成的任務。