安全指南

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 代理)的数据库,在你轮换之前,任何人都可以从互联网上凭凭据访问。

  • 对于 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 天)。在吊销任何内容之前先导出日志。对每个仓库,检查部署密钥、密钥(secrets)、webhook 和协作者
  • GitHub Container Registry(ghcr.io):Railway 已删除其存储的 GitHub 令牌,但这些令牌在 GitHub 上吊销之前仍然有效。请在 GitHub 上删除旧令牌,创建一个具有 read:packages 权限范围的新令牌,并在每个服务中设置

指南还警告说,拥有推送权限的攻击者可以添加在密码重置后仍然存在的 webhook 或密钥。

4

AI API 与支付:查找不是你产生的用量和费用

根据公司的初步报告,攻击者似乎在寻找 AI 服务商的 API 密钥。公司已发布针对 OpenAI、Anthropic、OpenRouter、Grok、Stripe、AWS 和 GCP 的用量检查指南。例如,OpenAI 指南建议:

  • 删除可能已暴露的密钥,并在同一项目中创建新密钥
  • 打开用量页面,按 API 密钥分组,将暴露窗口期内的 token 量、请求数和模型组合与你的正常流量进行比较
  • 检查该期间的计费支出和已消耗的赠送额度
  • 检查成员和项目成员中是否有你没有邀请的人
  • 保留用量详情,如发现被滥用,请联系服务商的支持团队

至少应检查从攻击窗口开始(10 月 20 日 13:58 UTC)到你轮换密钥为止的时间段(本站说明)。

5

Railway 内部:重新登录、重新创建令牌并重新部署

在应对过程中,公司吊销了所有登录会话、Railway 访问令牌、GitHub 连接和存储桶凭据。部署暂停期间推送的提交没有被部署。

  • 使用注册时所用的同一个 Gmail、GitHub 账户或邮箱登录。使用其他身份登录会创建一个新的空账户(公司指南)
  • 在账户设置中重新连接 GitHub,在服务的 Settings 中重新连接仓库,并部署最新提交
  • CLI:运行 railway logout,然后运行 railway login。CI:重新创建项目令牌(RAILWAY_TOKEN)或账户/工作区令牌(RAILWAY_API_TOKEN),并在 CI 密钥中替换
  • 重新部署使用存储桶的服务,使其获取新凭据。同时检查存储桶中是否有你没有上传的文件或你没有进行的删除(公司称存储桶没有自动备份)
  • 在工作区审计日志中,查找暴露窗口期内并非由你的团队或 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 等通知了可能被解密的密钥,并请求吊销。对部分服务商,Railway 提供了该平台上登记的所有密钥,无论已知是否受影响。超过 100,000 名用户受到服务商重置请求的影响
服务影响
运行中的服务保持在线。新的构建和部署、控制台、API、CLI 和支持在某些时段不可用
公司采取的措施
关闭了可能已被攻陷的内部工具;轮换了所有密钥,并在确认入侵者已被清除后再次轮换;聘请了外部取证公司;将构建器迁移到单租户环境;轮换了所有存储桶的凭据;用经过验证的源代码重建了内部工具;新增了批量吊销 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 连接,部署暂停期间推送的提交没有被部署。公司的指引是:使用注册时所用的同一个 Gmail、GitHub 账户或邮箱登录,重新连接 GitHub,然后部署最新提交。对于 CLI,先运行 railway logout,再运行 railway login;对于 CI,创建新令牌并替换 CI 密钥中的旧令牌。