Darrell TW

n8n 自動化工作流程教學
MarTech 解決方案分享

0%

Zeabur 資安事件:環境變數外洩後,怎麼確認災情與輪替密碼

zeabur-security-incident-env-leak-bg
重點摘要

Zeabur 平台端被入侵,攻擊者拿到專案的環境變數紀錄

  • 官方已實際觀察到 Anthropic、OpenAI、OpenRouter 的 API 憑證被盜用
  • 建一把新 Key 不會讓舊的失效,一定要另外執行撤銷
  • 改 Zeabur 上的 POSTGRES_PASSWORD 變數,不等於改掉資料庫真正的密碼
  • 通知信分兩批寄、判定條件不同,沒收到信不代表沒事
時間軸
  1. 8/27
    Zeabur 偵測到一組內部服務憑證遭到未授權存取
  2. 8/28
    在社群上有看到部分貼文反應收到 Zeabur 信件表示 API Key 等等相關回報
  3. 8/29
    凌晨一點多,我也收到 Zeabur 寄來的「[安全事件更新] 請輪替新增確認受影響的環境變數」

也因此把 Zeabur 專案中的相關 ENV 環境變數重新做一次 rotate
萬幸這次沒有什麼 AI API Key 遭到盜用,還沒觀察到什麼實際的損失

但 ENV 整個外流是非常嚴重且麻煩的
除了 API Key 需要逐一輪替更換以外
也要擔心其他例如密碼等等是否可能會有 DB 被連線 dump 出去的問題

這次到底外洩了什麼

攻擊者拿那組內部憑證去取得部分使用者專案的環境變數紀錄

後續官方對媒體證實的一句話最重:已經實際觀察到 Anthropic、OpenAI、OpenRouter 的 API 憑證遭到盜用
不是「可能外洩」,是真的有人拿去用

官方列出確認曝露的變數名稱:

1
2
3
4
5
6
7
8
9
ACCESS_TOKEN          API_SECRET            AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY CF_API_TOKEN CLIENT_SECRET
CLOUDFLARE_API_TOKEN DIGITALOCEAN_TOKEN GEMINI_API_KEY
GITHUB_PAT GITHUB_TOKEN GOOGLE_API_KEY
LINODE_TOKEN PRIVATE_KEY STRIPE_PUBLISHABLE_KEY
STRIPE_SECRET_KEY ANTHROPIC_API_KEY OPENROUTER_API_KEY
OPENAI_API_KEY DATABASE_URL JWT_SECRET
MONGODB_URI MYSQL_PASSWORD POSTGRES_PASSWORD
REDIS_PASSWORD SECRET_KEY

另外 Zeabur 在調查期間發現 AI Hub 用的 LiteLLM 出現可疑活動
目前 AI Hub 服務已經暫停

補充說明

帳號密碼、個資、付款與信用卡資訊,官方表示沒有被存取的跡象

沒收到信不是沒事

通知分成兩批寄,兩批的判定方式不一樣
信裡自己也寫了「無論您是否收到先前的事件通知」

我這邊的實際狀況是:兩個 Google 帳號只有其中一個收到
有多組 Zeabur 帳號的人可能要特別注意
只查常用信箱會漏掉,也建議先把其他帳號有相關專案或是 ENV 先輪替掉

盤點環境變數

可以在 Zeabur 網頁逐一檢查
如果你會用 Claude Code 等 CLI 工具
可以用 Zeabur CLI 直接幫你排查

1
npx zeabur@latest variable list --id <SERVICE_ID> -i=false --json

用 postgres 模板來示範:

1
2
3
4
postgresql 服務的 PASSWORD   
└─ postgresql.POSTGRES_PASSWORD = ${PASSWORD}
├─ n8n.DB_POSTGRESDB_PASSWORD = ${POSTGRES_PASSWORD}
└─ n8n-ost.DB_POSTGRESDB_PASSWORD = ${POSTGRES_PASSWORD}

雖然是 POSTGRES_PASSWORD 外流,但其實要改的是 PASSWORD
因為 POSTGRES_PASSWORD 是引用 PASSWORD

第三方 API Key:需要直接撤銷重新產生

這是官方特別提醒、也最容易沒做完整的一步

建立一把新的 API Key,不會讓舊的失效
舊 Key 沒有被撤銷之前,它一直都是可以用的

正確順序是四步,不要跳:

  1. 到第三方後台建新 Key
  2. 把新 Key 換到 Zeabur 變數上,重啟服務確認能跑
  3. 回廠商後台撤銷舊 Key(Revoke / Delete,不是只是改名)
  4. log 或是 Usage 和帳單,看撤銷之前有沒有被拿去用

各家的 Key 管理頁,以及查有沒有被盜用要看哪一頁:

服務 Key 管理頁 查有沒有被盜用
OpenAI platform.openai.com/api-keys platform.openai.com/logs 看逐筆 API 呼叫紀錄
Claude platform.claude.com/settings/workspaces/default/keys 同一個後台的 Usage 與 Cost 頁
OpenRouter openrouter.ai/settings/keys Activity 頁的呼叫紀錄

OpenAI 的 /logs 比較好用
可以看到完整的時間、模型、來源等等

目前查看來都是我平時的排程和自動化產生的紀錄
並沒有特別有其他意外的發現

資料庫密碼:改環境變數不等於改密碼

按照官方給的 Rotate Key 文件
不是只更新 ENV 的值而已
而是需要另外再用 command 去更新 DB 裡面使用的密碼
否則重新啟動服務後,會有錯誤的情況發生

官方那份輪替指南需要注意

Zeabur 把一份輪替指南掛在事件通知上,PostgreSQL 那行長這樣:

1
psql -U root -c "ALTER USER postgres WITH PASSWORD '<新密碼>';"

三個地方會出事:

問題 後果
ALTER USER postgres 把角色名寫死 Zeabur 的 postgres 模板通常沒有 postgres 這個角色,回 role "postgres" does not exist
-U root 把使用者寫死 Odoo 這類模板的使用者是 odoo-admin,這行直接連不上
沒有 -d psql 預設會連「跟使用者同名的資料庫」,而那個資料庫不存在

如果 指令少了 -d
會有個錯誤是「資料庫 root 不存在」
一般人看到會往角色跟權限的方向找,很難聯想到是預設資料庫的問題

不用管自己的 Username 是什麼,可以用一個比較通用的指令

1
psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "ALTER USER CURRENT_USER WITH PASSWORD '<新密碼>';"

$POSTGRES_USER$POSTGRES_DB 是容器本來就帶的環境變數,CURRENT_USER 自動對應目前連線的身分
想先確認自己的使用者是誰,最快是去環境變數分頁點開 POSTGRES_USER 的眼睛圖示

Zeabur 環境變數分頁,標示點開 POSTGRES_USER 右側的眼睛圖示就能看到資料庫使用者帳號

如何在 Zeabur 網頁版走一次輪替

輪替做完之後,我自己用網頁介面重新走一次流程
在「環境變數 → 編輯原始環境變數」把 PASSWORD 改成新值,然後就以為做完了

Zeabur 編輯變數彈窗,紅框標出 PASSWORD 的值欄位並註明換成新的,右下角是儲存按鈕

存檔完回到服務狀態頁,狀態是運作中 1/1
這一頁右下角那張寫著「指令」的卡片,就是等一下要用的容器終端機入口

Zeabur postgresql 服務的服務狀態頁,狀態顯示運作中 1/1,右下角三張卡片依序是檔案、記錄、指令,其中「指令」被標號 1,那就是容器終端機的入口

麻煩的是當下服務完全正常
健康檢查回 200、log 乾淨、workflow 照跑

因為 n8n 從改變數之後就沒重啟過,目前的舊連線還是對的
這是一顆定時炸彈,下一次重啟才會炸掉噴 Error

這時候按下「全部重啟」就是直接引爆

Zeabur 專案設定的批次動作區塊,有全部暫停與全部重啟兩個按鈕

所以順序要反過來
先進容器把資料庫裡面的密碼也改掉,再回來重啟

psql 執行 ALTER USER 成功的終端機畫面,上方三行是 collation version mismatch 的 WARNING、DETAIL、HINT,最下面一行 ALTER ROLE 才是真正的執行結果

上面那三行 WARNING、DETAIL、HINT 看起來很像出錯,其實每次連線都會出現,跟密碼一點關係都沒有
真正的結果是最下面那行 ALTER ROLE
psql 成功的時候就只回一行 ALTER ROLE,不會跟你說「成功」

改完密碼回到 n8n 服務按「重新啟動」:

Zeabur n8n 服務狀態頁面,箭頭指向左下角的重新啟動按鈕

重啟之後大約 1~2 分鐘,資料庫端也看得到重啟後才建立的新連線

常見問題

我沒收到 Zeabur 的通知信,是不是就沒事?
不一定
通知分兩批寄、判定條件不同,信裡自己也寫「無論您是否收到先前的事件通知」
建議現在就先查詢自己在 Zeabur 上是否有部署服務,跟是否有填入 API Key 在環境變數中
我建了新的 API Key,舊的會自動失效嗎?
不會
一定要另外到廠商後台執行撤銷(Revoke / Delete)
順序建議是:建新 Key → 換上去確認服務正常 → 再撤銷舊的
Zeabur AI Hub 還能用嗎?
官方在調查期間發現 AI Hub 使用的 LiteLLM 有可疑活動,已經先暫停服務
如果你的 workflow 有串 AI Hub,要先準備替代的模型來源

相關文章推薦

n8n 資安漏洞 CVE-2025-68613 快點來更新你的 n8n 版本!

上一次的 n8n 資安事件,含 Zeabur 平台的版本更新步驟

n8n 資安漏洞 CVE-2025-68613 快點來更新你的 n8n 版本!
n8n 安裝部署與更新教學:Cloud、Zeabur、Docker 比較

各種部署方案的比較,也包含自架要自己扛哪些事

n8n 安裝部署與更新教學:Cloud、Zeabur、Docker 比較
n8n AI 模型 Router 教學:Zeabur AI Hub 智慧切換模型

這次事件中被暫停的 AI Hub,之前寫過的用法介紹

n8n AI 模型 Router 教學:Zeabur AI Hub 智慧切換模型

參考來源

分享這篇文章