← Blog

Railways Environment-Variable-Breach: was Railway bestätigt hat, und was sich auf einem eigenen Server ändert

Railyard

23. Oktober 2026 · 8 Min. Lesezeit

Am 21. Oktober 2026 veröffentlichte Railway eine Sicherheitsmitteilung: Eine unbefugte Partei hatte Zugriff auf Systeme erlangt, die Kunden-Environment-Variablen speichern, und bei einigen Kunden die entschlüsselten Werte dieser Variablen erhalten. Railway pausierte plattformweit alle Deployments, widerrief seine eigenen Access-Token und bat jeden Kunden, jedes auf der Plattform gespeicherte Secret zu rotieren. Das ist, was Railway selbst bestätigt hat, was noch aus Berichten aus zweiter Hand stammt, und der tatsächliche architektonische Grund, warum ein Bring-your-own-Server-Modell die Form dieses spezifischen Risikos ändert — nicht jedes Risiko, sondern die Form dieses einen.

Was Railway selbst offengelegt hat

Railway veröffentlichte zwei Dokumente, die hier wichtig sind: eine Sicherheitsmitteilung am selben Tag, am 21. Oktober, und einen längeren vorläufigen Incident-Report ein paar Tage später. Beide sind weiterhin live auf Railways eigenem Blog und beide sind die Primärquelle für alles in diesem Abschnitt.

Laut Railways vorläufigem Report lief der Angriff von 20. Oktober, 13:58 UTC bis 22. Oktober, 03:32 UTC — der zweite Zeitstempel markiert, wann Railway bestätigte, dass der Angreifer keinen Zugriff mehr auf irgendein internes System hatte. Das erste Anzeichen war unauffällig: eine Monitoring-Benachrichtigung an den On-Call-Engineer wegen erhöhter Latenz. Die Untersuchung machte daraus schnell etwas anderes. Bis 14:03 UTC am 20. hatte Railways Team einen versuchten Privilege-Escalation-Angriff in seiner Build-Infrastruktur identifiziert und die Build-Pipelines gestoppt. Um 19:53 UTC am selben Tag zeigten neue Belege, dass der Angreifer Zugriff „in größerem Maßstab, über mehrere Teile des Railway-Systems hinweg, parallel” eskalieren konnte — ab diesem Punkt behandelte Railway es als anhaltende, gezielte Kampagne statt als isolierten Bug. Bis zum 21. Oktober um 7:25 UTC zeigte die Forensik, dass der Angreifer Railways CI-Umgebung erreicht und Artefakte mit API-Credentials entschlüsselt hatte.

Railways eigene Darstellung des Motivs des Angreifers ist konkret: Der Report besagt, dass der Angreifer „versuchte, AI-Provider-API-Keys zu erlangen, um Distillation-Angriffe durchzuführen”, und dass frühe Belege nahelegten, der Angreifer habe Zugriff auf „abliterated models und erhebliche Compute-Ressourcen” gehabt, die eine ungewöhnlich ausgefeilte Ausnutzung von Railways Infrastruktur ermöglichten. Ob diese Zuschreibung im Verlauf der weiteren Untersuchung Bestand hat oder nicht — es ist Railways eigene Einschätzung, keine Vermutung aus externer Berichterstattung.

Der Teil, der Kunden direkt betrifft: Der Angreifer griff auf Railways interne Systeme zu und entschlüsselte gespeicherte Environment-Variablen für eine Teilmenge von Kunden-Workspaces. Railways eigene Zahlen, veröffentlicht im vorläufigen Report: höchstens 1,85 % aller Workspaces hatten möglicherweise kompromittierte Environment-Variablen — etwa 100.000 Workspaces, nach Railways Zählung. Railway sagt, diese Zahl habe sich gehalten, weil seine Systeme „so gebaut sind, dass ein kompromittierter Satz Keys nicht das gesamte System kompromittieren sollte” — d.h. der Blast Radius war durch Design eingedämmt, nicht durch Glück. Separat hat Railway direkt eine größere (nicht spezifizierte) Anzahl von Workspaces benachrichtigt, die es basierend auf forensischer Analyse dessen, worauf der Angreifer tatsächlich zielte, als hochriskant einschätzte — meist Workspaces mit wertvollen AI-Provider-Keys. Einzelne Railway-Nutzerkonten selbst wurden nicht eingeloggt oder kompromittiert; es ging um die an Workspaces gebundenen Environment-Variablen, nicht um Account-Takeover.

Railways Reaktion, in eigenen Worten: Alle Deployments wurden plattformweit während der Triage pausiert (bestehende, bereits laufende Deployments blieben online; was gestoppt wurde, waren neue Builds und neue ausgehende Deployments). Railway widerrief alle eigenen Access-Token „aus übergroßer Vorsicht”. Es benachrichtigte Partner-Anbieter — darunter GitHub, GitLab und AI-Provider —, damit sie offengelegte Credentials proaktiv widerrufen konnten, abgeschlossen bis 09:25 UTC am 21. Oktober. Die empfohlenen Maßnahmen für jeden Kunden: jede in Railway gespeicherte Environment-Variable und jeden API-Key rotieren, Private-Registry-Credentials neu ausstellen, öffentlichen Datenbank-Netzwerkzugriff entfernen, wo er bestand, und GitHub-/Docker-Registry-Audit-Logs auf Ungewöhnliches prüfen. Deployments wurden ab dem 22. Oktober schrittweise wiederherstellt, mit vollständiger Wiederherstellung noch am selben Tag.

Warum wurden Railways Environment-Variablen offengelegt?

Basierend auf dem, was Railway veröffentlicht hat, lief der Pfad so: Privilege Escalation innerhalb Railways Build-Infrastruktur, die dem Angreifer einen Fuß in der Tür zur CI-Umgebung gab, die entschlüsselte Artefakte mit API-Credentials enthielt — und von dort aus erweiterte sich der Zugriff auf die Systeme, die Kunden-Environment-Variablen speichern, was dem Angreifer erlaubte, eine Teilmenge davon zu entschlüsseln. Kurz gesagt: Ein kompromittiertes internes System (Build/CI) reichte aus, um ein anderes System zu erreichen (den verschlüsselten Secrets-Store), das für sich genommen ein härteres Ziel hätte sein sollen. Diese Verkettung ist die eigentliche Lehre, mehr als jeder einzelne Schritt für sich.

Was noch aus zweiter Hand kommt, nicht von Railway selbst

Ein paar Details, die seit der Offenlegung weit kursiert sind, stammten nicht aus Railways eigenem Blog und sollten als berichtet, nicht bestätigt, gelesen werden. Die Blockchain-Forscherin Taylor Monahan und mehrere Krypto-Branchenmedien berichteten, dass als Environment-Variablen in Railway gespeicherte Wallet-Private-Keys von einer einzigen Adresse abgeräumt wurden, mit berichteten Verlusten um 371.000 USD über 500+ Transaktionen auf 19+ EVM-Chains, und einem ersten Diebstahl, der zeitlich etwa zwei Stunden vor Railways eigener öffentlicher Mitteilung lag. Railways eigene veröffentlichte Materialien erwähnen keine Dollar-Summe für Krypto-Diebstahl, keine spezifische Angreifer-Wallet-Adresse und keinen solchen Zeitvergleich — diese Einordnung kommt vollständig von externen Forschern und den Medien, die über sie berichten. Es ist plausibel, es passt zu der Art von Workspace, die der Angreifer berichteten Angaben zufolge priorisierte, aber es ist nichts, was dieser Beitrag über „mehrere Medien haben es berichtet, Railway hat die konkrete Zahl in seinen eigenen Beiträgen bis zum Verfassen dieses Texts weder bestätigt noch dementiert” hinaus verifizieren kann.

Warum ein BYO-Server-Modell die Form des Risikos ehrlich ändert

Es wäre einfach, diesen Abschnitt als „Railyard hat dieses Problem nicht” zu schreiben. Das ist nicht korrekt, und es lohnt sich, präzise zu sein, warum.

Railyards Control Plane speichert ebenfalls Kunden-Environment-Variablen zentral, verschlüsselt im Ruhezustand, in ihrer eigenen Datenbank — unter Verwendung desselben allgemeinen Ansatzes (Encryption at Rest mit einem server-gehaltenen Key), den jede Plattform nutzt, die Kunden-Secrets speichert, Railway eingeschlossen. Wenn Railyards eigene Control-Plane-Datenbank und ihr Encryption-Key beide kompromittiert würden, wäre dieselbe allgemeine Art von Offenlegung, die Railway beschrieben hat, strukturell auch hier möglich. Dass einem der Server gehört, ändert nichts daran, dass ein zentrales Dashboard deine Variablen irgendwo halten muss, bevor es sie an einen Server weitergeben kann — jemand muss das Secret zwischen dem Moment, in dem du es eingibst, und dem Moment, in dem deine App es liest, in Verwahrung haben.

Der Teil, der sich tatsächlich ändert, ist, was danach passiert: wo die entschlüsselte Kopie landet und zu lebenden, in Nutzung befindlichen Secrets einbrechen muss. Im Fall von Railway verlief der tatsächliche Pfad des Angreifers über Build-Infrastruktur und eine CI-Umgebung, die Teil von Railways eigener gemeinsam genutzter Multi-Tenant-Betriebsumgebung sind — dieselben Systeme, die die Anwendungen aller bauen und betreiben. Ein Privilege-Escalation-Bug in dieser gemeinsamen Infrastruktur versetzte den Angreifer in die Lage, Secrets zu erreichen, die zu Workspaces gehörten, die mit der ursprünglichen Schwachstelle nichts zu tun hatten. Build-Infra, Control Plane und die Compute-Ressourcen, die Kundencode ausführen, sitzen alle innerhalb des internen Perimeters einer einzigen Firma, sodass ein Riss in einer von ihnen potenziell ein Riss in allen ist.

Bei einem BYO-Server-Modell muss die Control Plane die Variablen eines Kunden immer noch zu einem gewissen Zeitpunkt entschlüsseln — aber sie tut das, um sie einmal, beim Deploy, an einen Server auszuliefern, der im eigenen Cloud-Account genau dieses Kunden sitzt, nicht an eine gemeinsam genutzte Compute-Flotte, die die Plattform betreibt. Die entschlüsselte, lebende Kopie des Environments einer Anwendung — diejenige, die ein Angreifer eigentlich will, weil sie im Speicher eines laufenden Prozesses sitzt — existiert auf Infrastruktur, auf die die eigenen Engineers der Plattform außerhalb dieses einen Auslieferungsschritts keinen ständigen Zugriff haben. Ein Bug in der eigenen Build-Pipeline der Plattform ist ein echtes Risiko für die Control-Plane-Daten der Plattform (wie überall), aber er liefert einem Angreifer keine gemeinsam genutzte Compute-Umgebung, über die er sich zu den lebenden, laufenden Secrets anderer Kunden vorarbeiten kann, weil es keine gibt — das „lebende” Environment jedes Kunden ist eine andere Maschine in einem anderen Account.

Das ist eine engere Aussage als „das kann nicht passieren”, und das sollte sie auch sein: Es geht spezifisch um den Blast Radius über gemeinsam genutzte Compute, nicht darum, dass Railyards Verschlüsselung kryptografisch stärker wäre als die von Railway. Die ehrliche Einordnung ist, dass ein BYO-Server-Modell einen spezifischen Pfad zum schlimmsten Ergebnis entfernt — ein Angreifer, der von einem Bug auf Plattformseite direkt zu lebenden Secrets über viele unverbundene Kunden hinweg via gemeinsamer Runtime-Infrastruktur springt — ohne jeden anderen Pfad zu entfernen, einschließlich eines Breach der eigenen Datenbank und des Schlüsselmaterials der Control Plane, was ein Risiko bleibt, das jedes zentralisierte Dashboard trägt, unabhängig davon, wo die Compute läuft.

Was das für dich bedeutet, unabhängig von der Plattform

Ein paar praktische Lektionen gelten, egal ob du auf Railway, Railyard oder irgendetwas anderem bist, das Secrets in einem Dashboard hält:

  • Rotiere alles, was über das Dashboard irgendeiner Plattform offengelegt ist, nach einem Zeitplan, nicht nur nach einer Breach-Mitteilung — statische, langlebige API-Keys in einem zentralen Speicher sind eine stehende Verbindlichkeit unabhängig von jedem einzelnen Vorfall.
  • Scope Credentials eng. Eine Datenbank-Credential, die nur eine Datenbank erreichen kann, oder ein API-Key mit den minimal nötigen Berechtigungen, begrenzt, was eine gestohlene Kopie tatsächlich wert ist.
  • Bevorzuge die eigenen IAM-Rollen oder kurzlebigen Credentials deines Cloud-Providers gegenüber statischen Secrets, wo der Provider das unterstützt — das steht spezifisch deshalb zur Verfügung, weil die Compute bei einem BYO-Server-Modell im eigenen Account liegt, sodass das native Identitätssystem der eigenen Cloud überhaupt eine Option ist.
  • Frage bei jeder Plattform, die du nutzt, was kompromittiert werden müsste, um ein entschlüsseltes, tatsächlich genutztes Secret zu erreichen — nicht nur, ob die Datenbank im Ruhezustand verschlüsselt ist. Encryption at Rest ist Grundvoraussetzung; die eigentliche Frage ist, wie viele Systeme zwischen einem Bug in einem unverbundenen Teil der Plattform und den tatsächlichen Secrets deiner laufenden Anwendung stehen.

Siehe den vollständigen Vergleich: Railyard vs. Railway, und das Environment-Variable-Modell selbst: Variables and secrets. Wenn du speziell von Railway weg migrierst: Migrating from Railway.

FAQ

Warum wurden Railways Environment-Variablen offengelegt? Laut Railways eigenem vorläufigem Report eskalierte ein Angreifer Privilegien innerhalb Railways Build-Infrastruktur, erreichte dessen CI-Umgebung und griff von dort auf Systeme zu, die Kunden-Environment-Variablen speichern — und entschlüsselte eine Teilmenge davon. Railway hat die spezifische technische Schwachstelle, die die anfängliche Eskalation ermöglichte, nicht offengelegt.

Wie viele Railway-Kunden waren betroffen? Railways eigene Zahl ist höchstens 1,85 % aller Workspaces, etwa 100.000, hatten möglicherweise kompromittierte Environment-Variablen. Eine separate, größere, nicht spezifizierte Anzahl von als hochriskant eingeschätzten Workspaces wurde direkt benachrichtigt.

Hat Railway den berichteten Krypto-Diebstahl bestätigt? Nein. Die Zahl von etwa 371.000 USD, die spezifische Wallet-Adresse und der Zeitvergleich zu Railways öffentlicher Mitteilung stammen alle von externen Blockchain-Forschern und auf Krypto spezialisierten Medien, nicht aus Railways eigener veröffentlichter Offenlegung oder dem vorläufigen Report.

Macht Hosting auf dem eigenen Server das unmöglich? Nein. Die Control-Plane-Datenbank einer Plattform muss deine Secrets immer noch irgendwo halten, bevor sie sie deployt, und dieser Speicher bleibt ein Ziel, unabhängig von der Architektur. Was sich ändert, ist, dass die entschlüsselte, lebende Kopie, die in deiner Anwendung läuft, auf deinem eigenen Server liegt statt in der gemeinsam genutzten Compute-Flotte der Plattform, was einen spezifischen Pfad entfernt — einen Bug auf Plattformseite, der zu einer Route in die lebenden Secrets anderer Kunden wird — ohne jedes Risiko zu entfernen.

Quellen

Behalte deine Secrets auf deinem eigenen Server.

Sieh, wie Railyard Environment-Variablen handhabt, und was sich wirklich ändert, wenn der Server dir gehört.

Kostenloser Plan, keine Kreditkarte, und 14 Tage Pro für jedes neue Team. Ein fester Preis pro Team.