適用對象:在應用程式代管平台(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 適用於所有使用者。公司表示影響可能有限,但基於預防,建議所有使用者採取這些行動。
輪替密鑰:在來源端重新核發並撤銷舊值
公司要求你撤銷並重新設定 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 之前輪替的密鑰,再輪替一次會更安全(本站註記)。狀態頁面表示,僅憑這次更新,並不需要重做事件獲得控制後已完成的輪替。
資料庫:重新產生密碼並移除公開存取
公司建議所有使用者移除資料庫的公開網路存取。其指南指出,啟用公開存取(TCP proxy)的資料庫,在你輪替之前,任何人都能從網際網路上任何地方憑其憑證連線。
- PostgreSQL、MySQL、Redis 與 MongoDB 請在資料庫檢視中使用 Regenerate。它會一次更改資料庫內的密碼與變數,並中斷現有連線(公司指南)
- 不要手動編輯 POSTGRES_PASSWORD 等密碼變數,也不要直接在資料庫中更改密碼,否則變數與資料庫會不同步(公司指南)
- 重新部署所有引用這些變數的服務(例如
${{ Postgres.DATABASE_URL }})。請將貼上的連線字串改成引用 - 若專案以外沒有需要,請在 Settings、Networking 中關閉 Public Access。外部用途(本機開發、CI、BI 工具)需要手動貼上新的
DATABASE_PUBLIC_URL
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,即使重設密碼也仍會留存。
AI API 與支付:查看你沒有進行過的用量與扣款
根據公司的初步報告,攻擊者似乎在尋找 AI 供應商的 API 金鑰。公司已發布針對 OpenAI、Anthropic、OpenRouter、Grok、Stripe、AWS 與 GCP 的用量檢查指南。例如 OpenAI 指南說明要:
- 刪除可能外洩的金鑰,並在同一個專案中建立新金鑰
- 開啟用量,依 API 金鑰分組,將暴露期間的 token 量、請求數與模型組合,與你的正常流量比較
- 檢查該期間的帳單支出,以及被消耗的額度贈與
- 檢視成員與專案成員,找出你沒有邀請的人
- 保留用量明細,若發現濫用,請聯絡供應商的支援
至少檢查從攻擊時間窗開始(10 月 20 日 13:58 UTC)到你輪替金鑰為止的期間(本站註記)。
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 支援的訊息
公司表示會直接以電子郵件通知受影響的客戶。其帳號復原指南告訴使用者,不要將密碼、登入碼、復原碼、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。
10 月 20 日 13:58
監控發現以延遲升高形式出現的異常活動;值班工程師開始調查。10 月 20 日 14:03–16:51
該活動被判定為敵對外部人員的權限提升嘗試。在建置基礎設施中發現可能的權限提升,建置管線被停止。10 月 20 日 18:05–19:53
部署了緩解措施,該漏洞已無法重現。19:53,進一步證據顯示攻擊者能在系統多個部分同時進行更大規模的權限提升。10 月 21 日 04:24–05:23
鑑識發現攻擊者已取得加密形式的密鑰,當時尚無法解密。10 月 21 日 05:27–07:25
攻擊者取得 CI 環境的憑證,並解密了含有額外 API 存取權的成品。10 月 21 日 07:25–09:18
資料庫證據顯示有人未經授權查詢加密環境變數;其中一部分已利用多組遭入侵憑證的組合被解密。10 月 21 日 09:25
Railway 通知各服務商攻擊者存取過的範圍,並請其撤銷金鑰(報告的 FAQ 寫為 09:35)。10 月 21 日 20:19–22:10
Railway 宣布使用者工作階段失效,並發布其資安揭露公告與客戶指引。10 月 22 日 03:32
Railway 確認攻擊者已無法存取任何內部系統,並開始以新憑證重新初始化內部系統。10 月 22 日 17:00–22:49
據報所有方案的 API 已完全恢復,部署恢復正常。10 月 23 日 16:38
日期為 10 月 22 日的初步報告公開(狀態頁面)。10 月 23 日 18:57
對評估為較高風險的工作區的通知已完成(狀態頁面)。10 月 23 日 22:06
狀態頁面將事件標示為已解決。新用戶註冊仍然暫停。
- 發生了什麼
- 未經授權的第三方存取內部系統,取得客戶加密的環境變數,並解密了其中一部分
- 規模
- 所有工作區中最多 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 使用者該檢討什麼:從已揭露的事實得到的啟示
本節不評價公司的處理方式。重點在於依據已揭露的內容,使用者可以如何為下一次事件做好準備。
假設平台端加密無法抵擋平台本身遭入侵
Railway 的環境變數是加密的,但根據初步報告,攻擊者利用多組遭入侵憑證的組合解密了一部分。代管平台必須把變數還原成明文才能執行你的應用程式,所以一旦平台內部的權限被奪取,光靠加密無法完全保護(本站註記)。
除了平台加密之外,請用能讓外洩損害有限的方式保存密鑰。第一步,請在 AI API 與支付服務商設定花費上限與警示。為正式、測試與開發環境使用不同的金鑰,也能縮小需要輪替的範圍。密鑰的保存方式請見.env 與 API 金鑰究竟危險在哪裡。
不要讓資料庫暴露在公開網際網路上
依公司指南,啟用公開存取的資料庫,只要連線字串外洩,就能從網際網路上任何地方連線。只透過專案私有網路使用的資料庫,即使連線字串外洩,也無法從外部直接連線。
外部存取通常只有本機開發、CI 或 BI 工具需要。即使如此,也可考慮只在需要時開啟,或改用另一個唯讀使用者(本站註記)。
以引用方式共用密鑰,讓輪替只需在一處進行
公司指南建議,連線字串與金鑰以 ${{ Postgres.DATABASE_URL }} 這類引用變數共用,而不是貼到每個服務中。使用引用時,更改來源值並重新部署就能涵蓋所有服務,也不會有被遺忘的貼上副本。
基於同樣的想法,請隨時維護一份清單,記錄每個服務使用哪些密鑰,以及在哪裡重新核發(本站註記)。像這次需要全部輪替時,這份清單會決定作業要花多久。在類似的案例Vercel 資安事件中,關鍵在於密鑰是否存放在事後無法顯示其值的類別中。
將 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),使用者帳號存取的狀態改為「否認(公司)」。解密範圍與原始碼是否遭存取,將在最終報告發布後補充。
延伸閱讀
- 類似事件:Vercel 資安事件後開發者該做什麼 / LiteLLM 1.107.0 遭入侵事件
- AI 金鑰為何成為目標:防禦 AI 驅動的網路攻擊 / 被盜的 API 金鑰與帳號停權
- 密鑰的保存:.env 與 API 金鑰究竟危險在哪裡 / AI 撰寫的程式碼外洩的 API 金鑰
- 2026 年其他事件:資料外洩與網路攻擊一覽