- 21 жовтня 2026 року Railway в офіційному анонсі повідомила, що стороння особа могла отримати доступ до змінних оточення клієнтів, а частину з них — розшифрувати.
- Під загрозою API-ключі, паролі до баз даних і облікові дані приватних registry, що зберігалися в Railway.
- Усі деплої на платформі зупинено на час розслідування. Запущені сервіси працюють, але нові ключі викотити неможливо.
- AI-провайдери, зокрема OpenRouter, превентивно відкликають ключі, тому застосунки отримують
401чи402. - Railway радить усім користувачам негайно ротувати всі секрети й перевірити логи на підозрілу активність.
Новина оновлюється в міру появи нових даних.
Railway — популярна хмарна платформа для деплою застосунків, якою користуються тисячі стартапів і розробників. Інцидент зачіпає не лише саму платформу: якщо ключі до зовнішніх сервісів зберігалися в її змінних оточення, під загрозою опиняються й ці сервіси. Нижче — що відомо на зараз, що каже компанія і що робити користувачам.
📚 Зміст статті
- 📌 Що сталося
- 📌 Хронологія інциденту
- 📌 Що каже Railway
- 📌 Чому зупинено деплої
- 💼 Як це проявляється у ваших проєктах
- ✅ Що робити користувачам Railway
- 📌 Що поки невідомо
- ❓ Часті питання (FAQ)
🎯 Розділ 1. Що сталося
За даними Railway, вранці 21 жовтня компанія виявила аномальну активність у системах, які зберігають змінні оточення клієнтів. Попереднє розслідування показало, що стороння особа могла отримати доступ до зашифрованих змінних, а для частини з них — і до розшифрованого вмісту.
У змінних оточення розробники зазвичай тримають найчутливіші дані: API-ключі, паролі до баз даних, облікові дані приватних registry контейнерів. Тому інцидент зачіпає не лише саму платформу, а й усі зовнішні сервіси, ключі до яких у ній зберігалися.
🎯 Розділ 2. Хронологія інциденту
- 21 жовтня, ранок — Railway виявляє аномальну активність у системах зі змінними оточення.
- 21 жовтня, ~20:44 UTC — компанія публікує security disclosure у своєму блозі й зупиняє всі деплої.
- 21–22 жовтня — користувачі отримують email-сповіщення від Railway; AI-провайдери, зокрема OpenRouter, превентивно відключають ключі й повідомляють власників.
🎯 Розділ 3. Що каже Railway
Компанія вважає, що атака — частина серії нападів на платформні компанії, мета яких — дістатися до ключів AI-inference провайдерів. Railway повідомила цих провайдерів, щоб ті заздалегідь відкликали ключі.
За попередньою оцінкою, постраждала лише частина користувачів. Проте Railway рекомендує всім клієнтам негайно ротувати всі змінні оточення, API-ключі та облікові дані приватних registry, а також перевірити логи відповідних сервісів на підозрілу активність. Компанія обіцяє окремо написати тим, чиї акаунти підтвердять як постраждалі.
🎯 Розділ 4. Чому зупинено деплої
Поки розслідування триває, будь-який новий деплой означає, що платформа знову читає й розшифровує секрети — зокрема нові ключі, які користувачі щойно вписали. Якщо вразливість ще не закрита, свіжі ключі теж можуть витекти. Тому Railway спершу закриває діру, а вже потім відновлює збірки.
Уже запущені сервіси продовжують працювати. Заблоковані лише нові деплої, перезапуски й застосування змінених змінних.
🎯 Розділ 5. Як це проявляється у ваших проєктах
Якщо ваш застосунок на Railway працює з AI-API, найімовірніше, ви вже бачите:
- помилки
401 Unauthorized(або402 Payment Required) від OpenRouter та інших AI-провайдерів, хоча баланс у плюсі й код не змінювався; - банер «Limited Access — Deploys have been paused temporarily» у дашборді Railway при спробі передеплою;
- нові значення у Variables не застосовуються: контейнер працює зі старими змінними, доки його не перезапустять.
Ми зіткнулися з цим на практиці: в одному з наших проєктів на Spring Boot, розгорнутому на Railway, близько 01:30 UTC 22 жовтня всі запити до OpenRouter почали падати:
401 Unauthorized on POST request for "https://openrouter.ai/api/v1/chat/completions": [no body]
org.springframework.web.client.HttpClientErrorException$Unauthorized
Баланс був у плюсі, код не змінювався. Невдовзі прийшов лист від OpenRouter про превентивне відключення ключа. Новий ключ локально запрацював одразу, але на продакшн його не викотити: Variables оновлено, а контейнер і далі працює зі старим, уже відкликаним ключем. Пізніше 401 змінився на 402 — і це теж був старий ключ, а не проблема з оплатою.
Тобто ключ уже відкликано, а викотити новий неможливо, доки Railway не відновить деплої. Справа не у вашому коді.