Actively exploited Security news

Railway details how an attacker got from a build server to decrypted customer secrets

Cloud hosting platform Railway published a detailed report on 10 November 2026 about the attack it suffered on 20 and 21 October. The attacker broke out of a build server's isolation, used a misconfigured OIDC binding to reach a credential that decrypts environment variables, and, by Railway's estimate, burned through roughly $740,000 of AI usage with the stolen keys. What is known, who is affected and what customers should do.

Kyberkit editorial team · · event date · reading time 5 minutes · For admins and analysts

Actively exploited: Railway

Key points

  • The attack took place on 20 and 21 October 2026. Railway disclosed it on 21 October and on 10 November published a full report with root cause, timeline and a loss estimate.
  • Entry: a previously unknown flaw in the build infrastructure allowed a partial escape from a build VM's filesystem isolation and theft of a build-server credential. A second path: an erroneously defined OIDC binding in a cloud environment handed the attacker a short-lived cloud credential.
  • The attacker read the history of 353 builds, obtained a copy of the internal monorepo and decrypted a subset of environment variables. Railway gives an upper bound of 1.85% of workspaces (about 100,000); BYOK agent keys and GitHub OAuth tokens of 1,852 users were also exposed.
  • AI keys were the main target. Railway puts unauthorised spend at roughly $740,000 across AWS Bedrock, Google Gemini, OpenAI, SpaceXSI, Anthropic and OpenRouter. No indicators of compromise have been published yet.

What happened

Railway, a platform for deploying apps and databases in the cloud, published a detailed report on 10 November 2026 about an attack that took place on 20 and 21 October 2026. Railway disclosed the incident on 21 October and released a preliminary report a day later, without a root cause. The new report is the first to explain how the attacker got in, what they took and what the stolen keys cost.

Railway says the attacker was mainly after AI provider keys. Their queries against the variables database matched variable names used for AI keys, with a secondary sweep for cloud, database and payment credentials. Railway estimates unauthorised spend at roughly $740,000.

Technical details

Build VM escape. The attacker began creating dummy accounts on 18 October. At 07:28 UTC on 20 October they used what Railway calls a previously unknown vulnerability in its build infrastructure to partially escape filesystem isolation on a build VM. That exposed a credential the build servers use to authenticate to internal systems. Railway doesn't name the flaw and lists no CVE.

Internal systems. With that credential the attacker reached an internal Temporal cluster, which accepted it as a trusted client. From there they read the stored history of 353 builds, including some build variables, and build snapshots gave them a copy of Railway's internal monorepo.

Second path: OIDC. At 03:26 UTC on 21 October they found an erroneously defined OIDC binding in a cloud environment and obtained a short-lived cloud credential. That led to further internal credentials, SSH access to an orchestration machine, and a long-lived credential able to decrypt customer environment variables. Between 04:07 and 05:21 UTC they queried the variables database and decrypted a subset through the key management service.

Attack path at Railway from a build server to decrypted customer variables1. Dummy accounts and a build VM isolation escape via an unknown flaw; 2. Build-server credential → internal Temporal, 353 build histories and a monorepo copy; 3. Misconfigured OIDC binding → short-lived cloud credential → SSH to orchestration machine; 4. Long-lived decryption credential → customer environment variables → AI key abuse1Dummy accounts and a build VMisolation escape via an unknown flaw2Build-server credential → internalTemporal, 353 build histories anda monorepo copy3Misconfigured OIDC binding →short-lived cloud credential → SSH toorchestration machine4Long-lived decryption credential →customer environment variables → AIkey abuse
From dummy account to customer secrets (Railway report, 10 Nov 2026)

What the attacker obtained:

  • environment variables in at most 1.85% of workspaces (about 100,000) – Railway stresses this is an upper bound because logs identify environments, not individual variables,
  • BYOK agent keys and GitHub OAuth tokens for 1,852 users (all reset; Railway found no logins using them),
  • the history of 353 builds, including sealed variables.

Forensics did not indicate access to customer databases. The attacker's last access to customer data was at 09:25 UTC on 21 October.

Railway adds that the keys appear to have been sold on through intermediary services for model distillation, and that the attacker used abliterated models. It cites Wiz research on a wave of AI key theft ("Black October") for context but doesn't attribute the attack. We covered similar agent-driven tooling in our piece on ARTEX attacks.

Who is affected

Railway customers, particularly accounts created before 21 October 2026 that stored AI, cloud (AWS, GCP), database, payment or private registry credentials in environment variables. Railway emailed customers it judged to be at high risk. Organisations whose keys were held in Railway by a contractor or developer are affected indirectly.

Railway recorded unauthorised usage at AWS Bedrock, Google Gemini, OpenAI, SpaceXSI, Anthropic and OpenRouter.

How to tell if you were hit

Railway has not published indicators of compromise yet – it is sharing them privately with law enforcement and plans to publish them once cleared. Until then:

  • review AI provider billing and usage since 20 October 2026 (unexpected models, volumes, times of day),
  • in your cloud accounts (AWS, GCP), look for new access keys, unfamiliar roles and API calls from unknown addresses – Railway published separate guides for both,
  • check your GitHub audit log for OAuth app access and installed GitHub Apps, and your registries (Docker Hub) for new logins and pushed images,
  • check logs of publicly reachable databases for logins from unknown addresses.

What to do

  1. Rotate every variable and key stored in Railway and treat the old values as compromised, even if the provider has already revoked the key. Rotate manually where you can.
  2. Rotate private registry credentials and review their audit logs.
  3. Remove public network access from databases that don't need it and rotate database passwords (Railway published guides for MySQL, Redis and MongoDB).
  4. Report unauthorised charges using the form in Railway's report and to the AI provider.
  5. Set spending caps and alerts with AI providers so a stolen key shows up before it does serious damage.
  6. If your GitHub email differs from your Railway email and you can't sign in, use email login.

Railway has since rebuilt its build system (each build on a dedicated ephemeral VM with a credential that can only push one image), rebuilt CI, issued a new PKI and root CA, moved to short-lived, narrowly scoped credentials and centrally logs every secret decryption.

Timeline

Timeline of the Railway attack18 Oct 2026: Attacker starts creating dummy accounts; 20 Oct 2026, 07:28: Build VM isolation escape; 20 Oct 2026, 13:58: Railway spots anomalous API calls and starts incident response; 21 Oct 2026, 03:26: Short-lived cloud credential via misconfigured OIDC binding; 21 Oct 2026, 04:07–07:15: Variables database queried, a subset decrypted; 21 Oct 2026, 09:25: Attacker evicted; providers receive lists of exposed keys; 21–22 Oct 2026: Public disclosure and preliminary report; 10 Nov 2026: Full report with root cause and ~$740,000 loss estimate18 Oct 2026Attacker starts creatingdummy accounts20 Oct 2026,07:28Build VM isolation escape20 Oct 2026,13:58Railway spots anomalous APIcalls and starts incidentresponse21 Oct 2026,03:26Short-lived cloud credentialvia misconfigured OIDCbinding21 Oct 2026,04:07–07:15Variables database queried,a subset decrypted21 Oct 2026,09:25Attacker evicted; providersreceive lists of exposed keys21–22 Oct2026Public disclosure andpreliminary report10 Nov 2026Full report with root causeand ~$740,000 loss estimate
Attack and disclosure (Railway, times in UTC)

FAQ

I have a Railway account. Are my secrets exposed?

Railway can't tell which individual variables were read – its logs identify environments, not variables – so it gives an upper bound of 1.85% of workspaces. The safe approach is to treat every variable stored in Railway before 21 October 2026 as compromised and rotate it. Railway emailed customers it judged to be at high risk.

Isn't it enough that Railway revoked its own tokens?

No. Railway revoked its own access tokens, sessions and storage bucket credentials, but third-party keys in your variables (AI, cloud, database, payments) have to be rotated with each provider. Some providers revoked exposed keys themselves; don't rely on it.

Who pays for usage on stolen keys?

According to Railway, AWS Bedrock and Google Gemini have fraud refund policies, while OpenAI and SpaceXSI review refunds case by case. Railway covers Anthropic breached-key costs and all OpenRouter costs, and says it will backstop other unrecovered losses. Report the charges using the form in Railway's report.

Who was behind the attack?

Railway hasn't attributed it. It believes the keys were resold for model distillation, but says it has not established whether the original attacker ran those resale services or supplied credentials to others.

Sources

  1. Railway – Incident Report: October 21st Security Attack (10 Nov 2026)
  2. Railway – Preliminary Report: Oct 21st Security Incident (22 Oct 2026)
  3. Railway – Security Disclosure: Wednesday October 21st (21 Oct 2026)

Spotted a mistake? Let us know and we will correct it openly.