Взлом облачной платформы Railway обернулся примерно $740 тыс. расходов на чужие ИИ-запросы. Компания раскрыла цепочку проникновения через ранее неизвестную уязвимость в системе сборки приложений. Потенциально затронуты до 100 тыс. рабочих пространств, но подтверждать кражу секретов у каждого клиента Railway не стала. Подробности появились 10 ноября.
Атака началась 20 октября, когда злоумышленник вышел за пределы файловой изоляции сборки на виртуальной машине с несколькими арендаторами. Полученный внутренний ключ открывал доступ к сервисам Railway, хотя предназначался для загрузки готовых образов. Первые признаки инцидента инженеры заметили по аномальным обращениям к реестру сборок спустя несколько часов.
Внутренний планировщик Temporal ошибочно принимал украденный ключ как доверенный. Через его API атакующий прочитал истории 353 сборок, включая сохранённые переменные, и извлёк монорепозиторий с исходным кодом самой Railway. Получив схему внутренних сервисов, злоумышленник начал искать новые пути проникновения. Признаков скачивания исходников клиентских проектов компания не обнаружила.
Второй путь открылся из-за неверной настройки доверия OIDC в облачной среде. Злоумышленник получил временный доступ к инфраструктуре, добыл SSH-ключ, проник на сервер управления и нашёл данные для расшифровки переменных окружения. С 04:42 до 07:14 UTC 21 октября атакующий обращался к службе управления ключами, выбирая прежде всего секреты провайдеров ИИ.
Railway оценила верхнюю границу затронутых пространств в 1,85%, или примерно 100 тыс. Журналы показывают, для каких окружений могла пройти расшифровка, но не раскрывают точный перечень похищенных значений. Подтверждена компрометация связанных токенов 1852 пользователей, включая GitHub OAuth. Компания отозвала токены и не нашла следов входа в аккаунты Railway с их помощью.
Похищенные ключи использовали для платных обращений к моделям, накопив около $740 тыс. несанкционированных расходов. В запросах атакующего встречались также секреты облачных сервисов, баз данных и платёжных систем, однако доказательств доступа к клиентским базам нет. Railway добивается возврата средств у провайдеров и обещает покрыть расходы, которые поставщики услуг не компенсируют.
Нападение вписывается в серию краж ключей ИИ-сервисов. Wiz сопоставила сообщения как минимум девяти платформ за октябрь, включая Fireworks AI, OpenCode и Warp. Wiz проследила и дальнейшее использование украденных ключей. Общей уязвимости у эпизодов не выявили, а участие одной группировки не доказано. Похожую охоту за API-ключами ранее замечали в атаках на LiteLLM и другие ИИ-системы.
Railway дважды останавливала сборки, сменила внутренние ключи и перевела задания на отдельные временные виртуальные машины. К 22 октября работу восстановили для всех тарифов. Компания закрыла использованные пути проникновения, а клиентам ранее рекомендовала заменить секреты. Номера CVE и оценки CVSS для описанного обхода изоляции пока не опубликованы.
