資安指南

Railway 環境變數可能外洩(2026 年 10 月,所有工作區中最多 1.85%):該輪替哪些密鑰、使用者該怎麼做

Railway 於 2026 年 10 月 21 日表示,部分客戶加密的環境變數可能已被解密。本文說明影響範圍、該輪替哪些密鑰,以及要檢查什麼。

發布於 2026-10-24 更新於 2026-10-24 最後核實 2026-10-24 閱讀時間 7 分鐘
本頁內容

適用對象:在應用程式代管平台(PaaS)Railway 上執行應用程式或資料庫的開發者與維運人員,尤其是將 AI API 金鑰、支付、GitHub、雲端或資料庫憑證存放在環境變數中的人。

本文依據 Railway 官方部落格文章(其揭露公告、初步報告與使用者指南)及其狀態頁面撰寫。本文不涉及攻擊手法,公司也未公開這部分。

持續發展中:機構發布更多資訊時,本文將隨之更新

截至 2026 年 10 月 24 日 11:00 UTC(日本時間 20:00)

尚不明朗

  • 哪些環境變數被解密(公司表示無法指出)
  • 原始碼是否遭存取(將在最終報告中確認)
  • 攻擊的細節
  • 外洩的金鑰是否已被使用

公司的初步報告日期為 10 月 22 日;依狀態頁面,於 10 月 23 日 16:38 UTC 公開。公司表示調查仍在進行,並將在調查結束後發布後續報告。最終報告的日期未公布。

狀態頁面於 10 月 23 日 22:06 UTC 將事件標示為已解決;建置與部署運作正常。新用戶註冊仍然暫停。

Railway 使用者今天該做什麼

步驟 1 與 2 適用於所有使用者。公司表示影響可能有限,但基於預防,建議所有使用者採取這些行動。

1

輪替密鑰:在來源端重新核發並撤銷舊值

公司要求你撤銷並重新設定 10 月 21 日之前儲存在 Railway 上的每一個敏感環境變數,包括 API 金鑰與私有映像檔倉庫憑證。

請依以下順序進行:

  • 列出你的環境變數。打開每個服務的 Variables 分頁,標出屬於密鑰的值(API 金鑰、權杖、密碼、簽章金鑰、連線字串)
  • 在各來源的儀表板核發新值:AI API、支付服務商、GitHub、雲端、外部資料庫等
  • 更新 Railway 變數並重新部署服務。容器只在啟動時讀取變數,所以在重新部署之前會繼續使用舊值執行(公司指南)
  • 新值確認可用後,在來源端撤銷或刪除舊值

只在 Railway 內更改數值,已外洩的值在你於來源端撤銷之前仍然可用(本站註記)。

如果你在 10 月 22 日 03:32 UTC 之前就輪替過

公司在 10 月 21 日的揭露公告中,要求使用者立即輪替所有環境變數。公司後來表示,已於 10 月 22 日 03:32 UTC 確認攻擊者不再能存取其系統。初步報告說明,公司希望先將攻擊者逐出,再通知使用者輪替,以免新憑證立刻再次遭到入侵。因此,在 10 月 22 日 03:32 UTC 之前輪替的密鑰,再輪替一次會更安全(本站註記)。狀態頁面表示,僅憑這次更新,並不需要重做事件獲得控制後已完成的輪替。

2

資料庫:重新產生密碼並移除公開存取

公司建議所有使用者移除資料庫的公開網路存取。其指南指出,啟用公開存取(TCP proxy)的資料庫,在你輪替之前,任何人都能從網際網路上任何地方憑其憑證連線。

  • PostgreSQL、MySQL、Redis 與 MongoDB 請在資料庫檢視中使用 Regenerate。它會一次更改資料庫內的密碼與變數,並中斷現有連線(公司指南)
  • 不要手動編輯 POSTGRES_PASSWORD 等密碼變數,也不要直接在資料庫中更改密碼,否則變數與資料庫會不同步(公司指南)
  • 重新部署所有引用這些變數的服務(例如 ${{ Postgres.DATABASE_URL }})。請將貼上的連線字串改成引用
  • 若專案以外沒有需要,請在 Settings、Networking 中關閉 Public Access。外部用途(本機開發、CI、BI 工具)需要手動貼上新的 DATABASE_PUBLIC_URL
3

GitHub 與映像檔倉庫:檢視稽核紀錄與已連結的應用程式

公司建議檢查 GitHub 稽核紀錄與應用程式存取,以及 Docker Hub 等映像檔倉庫的稽核紀錄。其指南列出以下檢查項目:

  • 個人帳號:GitHub 安全紀錄(90 天)、已授權的 OAuth 應用程式與 GitHub Apps、SSH 與 GPG 金鑰,以及個人存取權杖。撤銷任何你不認得的項目,並重新產生權杖
  • 組織:組織稽核紀錄(180 天)。在撤銷任何項目之前,請先匯出紀錄。逐一檢視每個儲存庫的 deploy key、secrets、webhook 與協作者
  • GitHub Container Registry(ghcr.io):Railway 已移除它儲存的 GitHub 權杖,但這些權杖在 GitHub 上撤銷之前仍然有效。請在 GitHub 刪除舊權杖,建立具 read:packages 範圍的新權杖,並設定到每個服務

指南也警告,擁有推送權限的攻擊者可以新增 webhook 或 secret,即使重設密碼也仍會留存。

4

AI API 與支付:查看你沒有進行過的用量與扣款

根據公司的初步報告,攻擊者似乎在尋找 AI 供應商的 API 金鑰。公司已發布針對 OpenAI、Anthropic、OpenRouter、Grok、Stripe、AWS 與 GCP 的用量檢查指南。例如 OpenAI 指南說明要:

  • 刪除可能外洩的金鑰,並在同一個專案中建立新金鑰
  • 開啟用量,依 API 金鑰分組,將暴露期間的 token 量、請求數與模型組合,與你的正常流量比較
  • 檢查該期間的帳單支出,以及被消耗的額度贈與
  • 檢視成員與專案成員,找出你沒有邀請的人
  • 保留用量明細,若發現濫用,請聯絡供應商的支援

至少檢查從攻擊時間窗開始(10 月 20 日 13:58 UTC)到你輪替金鑰為止的期間(本站註記)。

5

Railway 內部:重新登入、重建權杖並重新部署

公司在應變期間撤銷了所有登入工作階段、Railway 存取權杖、GitHub 連結與儲存空間(bucket)憑證。暫停部署期間推送的 commit 並未部署。

  • 使用你註冊時的同一個 Gmail、GitHub 帳號或電子郵件登入。用不同身分登入會建立一個全新的空帳號(公司指南)
  • 在帳號設定中重新連結 GitHub,在服務的 Settings 中重新連結儲存庫,並部署最新的 commit
  • CLI:執行 railway logout,再執行 railway login。CI:重新建立專案權杖(RAILWAY_TOKEN)或帳號/工作區權杖(RAILWAY_API_TOKEN),並在 CI 密鑰中取代
  • 重新部署使用 bucket 的服務,使其取得新憑證。同時檢查 bucket 中是否有你沒有上傳的檔案,或你沒有進行的刪除(公司表示 bucket 沒有自動備份)
  • 在工作區稽核紀錄中,找出暴露期間內不是由你的團隊或 Railway(顯示為「Railway Staff」)進行的變數讀取、映像檔倉庫憑證變更與部署

10 月 21 日之前儲存在 Railway 的密鑰

無論是否收到通知,都視為已外洩

↓

1. 在來源端核發新值

更新變數並重新部署,然後撤銷舊值

開啟公開存取的資料庫

密碼外洩時,可從網際網路連線

↓

2. 重新產生密碼並移除公開存取

重新部署所有引用它的服務

AI API、支付、GitHub

攻擊者似乎在尋找的金鑰

↓

3. 檢查用量、扣款與稽核紀錄

從 10 月 20 日 13:58 UTC 到你輪替為止

依 Railway 指引整理的作業順序。先在來源端輪替,再重新部署,最後撤銷舊值。

請提防自稱 Railway 支援的訊息

公司表示會直接以電子郵件通知受影響的客戶。其帳號復原指南告訴使用者,不要將密碼、登入碼、復原碼、API 權杖或密鑰值傳給支援人員。如果與此事件相關的訊息要求提供密鑰值或登入碼,請視為不是真的(本站註記)。

GitHub、OpenAI 與其他服務商的撤銷通知,是依 Railway 的請求發出的,公司表示這些通知不代表你的憑證受到影響。請不要點擊此類訊息中的連結;請直接開啟各服務商的儀表板。

事件經過(依 Railway 說法)

以下內容依據 Railway 的部落格文章〈Security Disclosure: Wednesday October 21st〉(2026 年 10 月 21 日)與〈Preliminary Report: Oct 21st Security Incident〉(日期為 10 月 22 日;依狀態頁面,於 10 月 23 日 16:38 UTC 公開),以及其狀態頁面。時間均為 UTC。

  1. 10 月 20 日 13:58

    監控發現以延遲升高形式出現的異常活動;值班工程師開始調查。
  2. 10 月 20 日 14:03–16:51

    該活動被判定為敵對外部人員的權限提升嘗試。在建置基礎設施中發現可能的權限提升,建置管線被停止。
  3. 10 月 20 日 18:05–19:53

    部署了緩解措施,該漏洞已無法重現。19:53,進一步證據顯示攻擊者能在系統多個部分同時進行更大規模的權限提升。
  4. 10 月 21 日 04:24–05:23

    鑑識發現攻擊者已取得加密形式的密鑰,當時尚無法解密。
  5. 10 月 21 日 05:27–07:25

    攻擊者取得 CI 環境的憑證,並解密了含有額外 API 存取權的成品。
  6. 10 月 21 日 07:25–09:18

    資料庫證據顯示有人未經授權查詢加密環境變數;其中一部分已利用多組遭入侵憑證的組合被解密。
  7. 10 月 21 日 09:25

    Railway 通知各服務商攻擊者存取過的範圍,並請其撤銷金鑰(報告的 FAQ 寫為 09:35)。
  8. 10 月 21 日 20:19–22:10

    Railway 宣布使用者工作階段失效,並發布其資安揭露公告與客戶指引。
  9. 10 月 22 日 03:32

    Railway 確認攻擊者已無法存取任何內部系統,並開始以新憑證重新初始化內部系統。
  10. 10 月 22 日 17:00–22:49

    據報所有方案的 API 已完全恢復,部署恢復正常。
  11. 10 月 23 日 16:38

    日期為 10 月 22 日的初步報告公開(狀態頁面)。
  12. 10 月 23 日 18:57

    對評估為較高風險的工作區的通知已完成(狀態頁面)。
  13. 10 月 23 日 22:06

    狀態頁面將事件標示為已解決。新用戶註冊仍然暫停。
最多 1.85%
部分環境變數可能已遭入侵的工作區(約 100,000 個,依公司說法)
約 38 小時
攻擊時間窗(10 月 20 日 13:58 UTC 至 10 月 22 日 03:32 UTC)
無
使用者帳號被登入的情形(依公司說法)
持續運作
既有部署(新的建置與部署曾暫停)
公司揭露的內容(揭露公告與初步報告)
發生了什麼
未經授權的第三方存取內部系統,取得客戶加密的環境變數,並解密了其中一部分
規模
所有工作區中最多 1.85%(約 100,000 個工作區)的部分環境變數可能已遭入侵。公司表示,由於金鑰採用信封加密(加密資料的金鑰本身再以另一把金鑰加密),光憑查詢紀錄無法指出具體是哪些變數受影響
攻擊者的目的(公司的評估)
取得 AI 供應商的 API 金鑰,用於模型「蒸餾」(以一個模型的輸出訓練另一個模型;本站說明)。公司認為這是一系列針對平台公司、意圖入侵 AI 推論供應商的攻擊的一部分
較高風險的環境
環境變數數量非常多的工作區,以及含有許多 AI 供應商金鑰的環境
聲明未被存取
Railway 使用者帳號未被登入
尚未確認
尚未排除原始碼遭存取的可能,將在最終報告中確認
對服務商的通知
Railway 已將可能被解密的金鑰通知 GitHub、GitLab、Anthropic、OpenAI、OpenRouter、Google、Stripe 等,並請其撤銷。對部分服務商,公司提供了平台上登記的所有金鑰,不論已知影響為何。超過 100,000 名使用者受到服務商重設請求的影響
服務影響
執行中的服務保持在線。新的建置與部署、儀表板、API、CLI 與支援在某些時段無法使用
公司採取的行動
關閉可能已遭入侵的內部工具;輪替所有金鑰,並在確認入侵者已被移除後再次輪替;聘請外部鑑識公司;將建置器移至單租戶環境;輪替所有儲存空間 bucket 的憑證;以經驗證的原始碼重建內部工具;新增可大量撤銷 Railway 應用程式權限的功能

已知與未知

截至 2026 年 10 月 24 日的狀況。公司發布更多資訊時,本表將隨之更新。

項目已揭露的內容狀態
取得加密環境變數透過未經授權的查詢取得已確認(公司)
解密一部分利用多組遭入侵憑證的組合被解密已確認(公司)
受影響的工作區所有工作區中最多 1.85%(約 100,000 個)可能(公司)
哪些變數被解密光憑查詢紀錄無法指出調查中
私有映像檔倉庫憑證已列入輪替項目可能(公司)
使用者帳號攻擊者未存取 Railway 使用者帳號否認(公司)
原始碼未排除遭存取的可能;將在最終報告中確認調查中
執行中的服務保持在線已確認(公司)
攻擊時間窗10 月 20 日 13:58 UTC 至 10 月 22 日 03:32 UTC已確認(公司)
攻擊細節為保護客戶而未公開調查中
外洩金鑰是否遭濫用未說明未說明
通知服務商的時間報告時間軸為 09:25 UTC,FAQ 為 09:35 UTC報告內不一致

如何解讀數字:100,000 指的是什麼

初步報告中的「約 100,000」,是部分環境變數可能已遭入侵的工作區數量(占全部的 1.85%)。報告表示,超過 100,000 名使用者受到服務商撤銷請求的影響,而公司以高風險為由聯絡的客戶超過 1.85%。收到聯絡,或金鑰被撤銷,並不能確認已外洩。反過來,公司表示不在較高風險群組內的工作區並未確認安全。

為什麼 AI API 金鑰會成為目標

以下為一般性說明,不代表這些情形在本事件中發生過。公司描述此攻擊者的目的,是取得 AI API 金鑰以進行模型蒸餾。

AI API 金鑰等同於金錢與運算資源,持有者都能花用。被盜的金鑰若被大量使用,帳單會算在金鑰擁有者頭上。若以擁有者的名義大量收集輸出內容,服務商可能因違反政策(例如禁止蒸餾的規定)而停權帳號。其運作方式與申訴方法,請見API 金鑰被盜後帳號為何會被停權。

代管平台把許多客戶的金鑰集中存放在同一處。這很可能就是公司將環境變數很多或 AI 金鑰很多的工作區描述為較高風險的原因。同一個月,LiteLLM 的開發者也表示,其事件中的攻擊者主要在尋找 LLM 供應商的金鑰(這是另一起事件;兩者之間的關聯並未公開)。關於使用 AI 或以 AI 金鑰為目標的攻擊的整體狀況,請見防禦 AI 驅動的網路攻擊。

Railway 使用者該檢討什麼:從已揭露的事實得到的啟示

本節不評價公司的處理方式。重點在於依據已揭露的內容,使用者可以如何為下一次事件做好準備。

1

假設平台端加密無法抵擋平台本身遭入侵

Railway 的環境變數是加密的,但根據初步報告,攻擊者利用多組遭入侵憑證的組合解密了一部分。代管平台必須把變數還原成明文才能執行你的應用程式,所以一旦平台內部的權限被奪取,光靠加密無法完全保護(本站註記)。

除了平台加密之外,請用能讓外洩損害有限的方式保存密鑰。第一步,請在 AI API 與支付服務商設定花費上限與警示。為正式、測試與開發環境使用不同的金鑰,也能縮小需要輪替的範圍。密鑰的保存方式請見.env 與 API 金鑰究竟危險在哪裡。

2

不要讓資料庫暴露在公開網際網路上

依公司指南,啟用公開存取的資料庫,只要連線字串外洩,就能從網際網路上任何地方連線。只透過專案私有網路使用的資料庫,即使連線字串外洩,也無法從外部直接連線。

外部存取通常只有本機開發、CI 或 BI 工具需要。即使如此,也可考慮只在需要時開啟,或改用另一個唯讀使用者(本站註記)。

3

以引用方式共用密鑰,讓輪替只需在一處進行

公司指南建議,連線字串與金鑰以 ${{ Postgres.DATABASE_URL }} 這類引用變數共用,而不是貼到每個服務中。使用引用時,更改來源值並重新部署就能涵蓋所有服務,也不會有被遺忘的貼上副本。

基於同樣的想法,請隨時維護一份清單,記錄每個服務使用哪些密鑰,以及在哪裡重新核發(本站註記)。像這次需要全部輪替時,這份清單會決定作業要花多久。在類似的案例Vercel 資安事件中,關鍵在於密鑰是否存放在事後無法顯示其值的類別中。

4

將 GitHub 連結限縮在需要的儲存庫與範圍

本次事件中,公司撤銷了它持有的 GitHub 權杖,並建議檢視 GitHub 稽核紀錄與應用程式存取。請將授予代管平台的 GitHub 存取限縮在它要部署的儲存庫,並讓容器映像檔倉庫權杖只有讀取權限(read:packages),這樣外洩時波及範圍較小(本站註記)。外洩的憑證仍然有效的問題,請見仍然有效的外洩憑證。

資料來源(公開紀錄)

本文的事實依據以下公開來源。本文不重現攻擊細節。

  • Railway,〈Security Disclosure: Wednesday October 21st〉(2026 年 10 月 21 日;狀態頁面於 10 月 21 日 22:10 UTC 發布「We have published a security notice」)— blog.railway.com
  • Railway,〈Preliminary Report: Oct 21st Security Incident〉(日期為 2026 年 10 月 22 日;依狀態頁面,於 10 月 23 日 16:38 UTC 公開)— blog.railway.com
  • Railway,〈Railway Platform Outage〉(狀態頁面,查閱至 10 月 23 日 22:06 UTC 的「Resolved」更新)— status.railway.com
  • Railway 使用者指南(2026 年 10 月 22–23 日):「Rotate PostgreSQL Database Credentials」blog.railway.com / 「Check for Anomalous GitHub Access」blog.railway.com / 「Check for Unexpected OpenAI Usage」blog.railway.com / 「Redeploy Buckets and Reconnect GitHub After the Credential Reset」blog.railway.com / 「Recover Failing Deploys」blog.railway.com / 「Resolving Login Issues」blog.railway.com
  • 其他服務的指南(MySQL、Redis、MongoDB、Anthropic、OpenRouter、Grok、Stripe、AWS、GCP)列於公司的工程部落格 — blog.railway.com

更新紀錄

2026-10-24:初版,依據 Railway 的揭露公告(10 月 21 日)、初步報告(10 月 22 日)與狀態頁面(至 10 月 23 日 22:06 UTC 的更新)。查核來源後於同日更正:初步報告的公開時間改依狀態頁面(10 月 23 日 16:38 UTC),使用者帳號存取的狀態改為「否認(公司)」。解密範圍與原始碼是否遭存取,將在最終報告發布後補充。

延伸閱讀

最新快訊

FAQ

QRailway 事件中外洩了什麼?
A

據 Railway 表示,未經授權的第三方存取了儲存客戶環境變數的系統,取得加密的環境變數,並可能解密了其中一部分。環境變數可能包含 API 金鑰,以及資料庫或容器映像檔倉庫的憑證。公司表示沒有任何 Railway 使用者帳號被登入。公司尚未排除原始碼遭存取的可能,並表示將在最終報告中確認。

Q我能知道自己是否受影響嗎?
A

公司表示,所有工作區中最多 1.85%(約 100,000 個工作區)的部分環境變數可能已遭入侵,但無法指出具體是哪些變數被解密。公司已以電子郵件通知確認受影響的客戶,以及它認為高風險的客戶,並表示截至 10 月 23 日 18:57 UTC 已完成高風險通知。公司也表示,不在較高風險群組內的工作區並未確認安全。無論是否收到通知,都請輪替你在 10 月 21 日之前儲存的密鑰。

Q我該輪替哪些密鑰?
A

公司要求輪替儲存在 Railway 上的所有環境變數(包括任何 API 金鑰),以及任何私有映像檔倉庫憑證。輪替的意思是:在來源端(AI API、支付服務商、GitHub、雲端等)核發新值,更新 Railway 變數並重新部署,然後在來源端撤銷舊值。若是 Railway 資料庫,請在儀表板中使用 Regenerate 變更密碼。

Q事件的起因是什麼?
A

根據公司的初步報告,事件始於對其建置基礎設施的權限提升嘗試;攻擊者隨後取得 CI 環境的憑證,並利用多組遭入侵憑證的組合,解密了一部分加密環境變數。公司表示,為保護客戶,目前無法分享攻擊手法的具體細節與規模。公司正與外部事件應變專家及主管機關合作,並將在調查結束後發布後續報告。

QGitHub 或 OpenAI 寄信說我的金鑰已被撤銷,我受影響了嗎?
A

不一定。10 月 21 日,公司將可能已被解密的金鑰清單提供給各服務商,並請其撤銷。基於謹慎,對部分服務商,公司提供了平台上登記的所有金鑰,不論是否已知受影響;公司並表示,收到撤銷通知不代表你的憑證受到影響。被撤銷的金鑰已無法使用,請核發新金鑰並更新設定。

Q事件之後我無法登入或部署。
A

公司在應變期間撤銷了所有登入工作階段、Railway 存取權杖與 GitHub 連結,暫停部署期間推送的 commit 並未部署。公司的指引是:使用你註冊時的同一個 Gmail、GitHub 帳號或電子郵件登入,重新連結 GitHub,然後部署最新的 commit。CLI 請先執行 railway logout 再執行 railway login;CI 請建立新權杖,並在 CI 密鑰中取代舊權杖。