Saltar al contenido

Seguridad

Incidente de seguridad en Railway: variables de entorno expuestas. Guía práctica para rotar secretos

Railway dice que un intruso consultó variables de entorno de clientes y descifró parte de ellas en busca de claves de proveedores de IA. Lo que se sabe y una guía práctica para rotar secretos en el orden correcto y detectar usos indebidos.

Por el equipo de seguridad de OpenWAF

11 min de lectura

Compartir

En resumen. Entre el 20 y el 22 de octubre de 2026 un intruso entró en parte de los sistemas internos de Railway. Consultó las variables de entorno cifradas de los clientes y descifró una parte, en busca de claves de API de proveedores de IA. Railway dice que como mucho el 1,85 % de los espacios de trabajo (unos 100.000) pudo verse afectado, pero no puede saber exactamente qué claves se descifraron.

  • Si guardaste secretos en Railway antes del 21 de octubre, rótalos aunque Railway no te haya escrito. Empieza por las claves de proveedores de IA, las credenciales de nube y todo lo que mueva dinero.
  • Rota sin cortes: crea el secreto nuevo, despliégalo, comprueba que funciona y después revoca el antiguo.
  • Busca usos indebidos en los registros de consumo y auditoría: paneles de los proveedores de modelos, CloudTrail, GitHub, Docker Hub, Stripe y tus bases de datos.
  • Es un incidente en Railway, no un CVE del software que ejecutas. No hay parche que aplicar: la solución es rotar y dejar de usar credenciales que duran años.

Qué pasó en Railway

Railway es una plataforma como servicio en la que las aplicaciones leen su configuración, incluidas claves de API y contraseñas de bases de datos, de variables de entorno que Railway guarda cifradas. El informe preliminar de Railway describe el ataque:

  • Una probable escalada de privilegios en su infraestructura de compilación.
  • Acceso a credenciales de la CI, con las que el atacante descifró artefactos que daban más acceso a otras API.
  • Una consulta no autorizada de variables de entorno cifradas, de las que una parte se descifró con las credenciales comprometidas.

Railway no ha publicado cómo entró el atacante al principio, y la investigación forense sigue abierta. Las horas son UTC.

Hora (UTC)Suceso
20 oct, 13:58Salta un aviso de guardia por latencia elevada. Empieza la ventana del ataque.
20 oct, 14:03–16:51Se identifica la escalada de privilegios en la infraestructura de compilación y se paran las compilaciones.
20 oct, 19:53Railway se da cuenta de una «campaña sostenida y dirigida» capaz de escalar a mayor escala.
21 oct, 04:24–05:23Railway ve que el atacante se ha llevado secretos cifrados que en ese momento no podía descifrar.
21 oct, 05:27–07:25El atacante accede a credenciales de la CI y descifra artefactos.
21 oct, 07:25–09:18Aparecen en la base de datos pruebas de la consulta de variables de entorno y de su descifrado parcial.
21 oct, 09:25Se pide a los proveedores que revoquen claves. Las preguntas frecuentes del informe dicen 09:35.
21 oct, hacia las 20:44Comunicado público. Se invalidan las sesiones y se pide a los clientes que roten.
22 oct, 03:32Railway confirma que el atacante ya no tiene acceso a los sistemas internos. Termina la ventana del ataque.
22 oct, 17:00–22:49Vuelve la API y todos los planes pueden desplegar de nuevo.
23 oct, 18:57Railway termina de avisar a los espacios de trabajo que cumplen sus criterios de mayor riesgo.

Los servicios en marcha siguieron funcionando. Solo se pararon las compilaciones y los despliegues.

Qué quedó expuesto y quién corre riesgo

  • Alcance: «como mucho el 1,85 % de todos los espacios de trabajo tuvo alguna variable de entorno potencialmente comprometida», unos 100.000. Como las variables usan cifrado de sobre, Railway no puede identificar exactamente qué claves se descifraron.
  • Mayor riesgo: los espacios de trabajo con muchísimas variables de entorno y los entornos con muchas claves de proveedores de IA.
  • El objetivo: claves de proveedores de IA para hacer ataques de destilación de modelos, según Railway. También lo enmarca en una serie de ataques contra empresas de plataformas.
  • No afectadas: las cuentas de usuario de Railway, según Railway. No descarta el acceso al código fuente de los clientes y lo confirmará en su informe final.
  • El resto: Railway escribió a los espacios con impacto confirmado o de alto riesgo, pero dice que los demás «no están confirmados como a salvo».

Railway no ha publicado indicadores de compromiso y no ha confirmado usos indebidos de los secretos robados. The Hacker News recoge la afirmación de un tercero sobre carteras de criptomonedas vaciadas cuyas claves privadas estaban en Railway. Railway no la ha confirmado.

Qué hizo Railway

  • Paró las compilaciones, apagó las herramientas internas que podían estar comprometidas y las reconstruyó desde código validado.
  • Cambió dos veces todas sus claves internas y rotó las credenciales de todos los buckets de almacenamiento.
  • Invalidó todos los tokens de API y de proyecto y todas las sesiones de usuario, y renovó todas las instalaciones de su GitHub App.
  • Pasó las compilaciones a máquinas de un solo cliente.
  • Pidió a GitHub, GitLab, Anthropic, OpenAI, OpenRouter, SpaceXSI, Stripe, Google y otros que revocaran claves. Entregó a GitHub y SpaceXSI todas las claves presentes en la plataforma, así que un aviso de revocación de un proveedor no significa por sí solo que tu clave se descifrara.

Cómo rotar tus secretos, en orden

La petición de Railway es amplia: revocar y sustituir todas las variables sensibles guardadas antes del 21 de octubre, incluidas las credenciales de registros privados, y volver a desplegar. Con decenas de secretos, el orden importa. Empieza por lo que un atacante convierte antes en dinero o en más acceso.

1. Haz el inventario

Exporta los nombres de las variables de cada proyecto y entorno (desde el panel de Railway o con railway variables y un token nuevo). Anota en cada una su proveedor, qué permite y quién puede rotarla. Las variables compartidas y las de referencia también cuentan.

2. Rota en este orden

PrioridadSecretosPor qué
1Claves de proveedores de IA (OpenAI, Anthropic, OpenRouter, Google, xAI…)Es el objetivo declarado del atacante. El abuso se nota en el gasto en cuestión de horas.
2Credenciales de nube (claves de acceso de AWS, claves de cuentas de servicio de GCP, secretos de Azure) y claves de carteras de criptomonedasDan el acceso más amplio. Saca los fondos de cualquier cartera cuya clave estuviera en una variable de entorno: rotar la clave no protege lo que ya controla.
3Pagos y movimientos de dinero (claves secretas y restringidas de Stripe, API de pagos y bancos)Impacto económico directo.
4Código y cadena de suministro (tokens de GitHub y GitLab, claves de despliegue, Docker Hub, npm y PyPI)Permiten llegar a tu código, subir imágenes o publicar paquetes. Railway pide revisar los registros de auditoría de GitHub y de los registros de imágenes.
5Bases de datos y cachés (contraseñas y cadenas de conexión de Postgres, MySQL, MongoDB y Redis)Railway tiene una guía para cada motor. Quita también el acceso público por red a las bases de datos que no lo necesiten.
6Secretos de la aplicación (claves de firma de JWT, secretos de sesión, secretos de cliente OAuth, secretos de firma de webhooks)Con una clave de firma robada, el atacante puede falsificar sesiones. Al rotarla se cierra la sesión de todos los usuarios, así que elige bien el momento.
7Otras claves de SaaS (correo, SMS, monitorización, búsqueda, mapas) y claves de cifradoRota las claves de cifrado con cuidado: hay que volver a cifrar los datos protegidos con la antigua, o conservarla solo para descifrar.

3. Rota sin cortes de servicio

  1. Crea la credencial nueva en el proveedor, con el alcance mínimo y con caducidad o límite de gasto si el proveedor lo permite.
  2. Guárdala en Railway (o pásala a un gestor de secretos) y vuelve a desplegar. Railway invalidó los tokens de API antiguos, así que crea uno nuevo para la CLI y para la CI.
  3. Comprueba que el servicio funciona con el valor nuevo: chequeos de salud, una petición de prueba, la marca de «último uso» del proveedor.
  4. Revoca la credencial antigua en el proveedor. Un secreto sustituido pero no revocado sigue sirviendo a quien lo robó.
  5. Apunta qué rotaste y cuándo. Lo necesitarás para leer los registros y para responder a Railway o a tus propios clientes.

Cómo detectar usos indebidos

  • Proveedores de IA: paneles de consumo y coste desde el 20 de octubre. Busca picos, modelos que no usas y peticiones desde direcciones IP o regiones desconocidas. Railway ha publicado comprobaciones para el consumo de OpenAI, Anthropic, OpenRouter y Grok.
  • AWS y GCP: CloudTrail y Cloud Audit Logs para llamadas hechas con tus claves desde fuera de tu infraestructura. Empieza por GetCallerIdentity, usuarios, claves o roles IAM nuevos y regiones inesperadas.
  • GitHub y GitLab: el registro de auditoría de la organización, en busca de tokens, claves de despliegue, autorizaciones de OAuth o de GitHub Apps y clonados de repositorios nuevos. Revisa también qué aplicaciones tienen acceso.
  • Registros de paquetes e imágenes: los registros de auditoría de Docker Hub, npm y PyPI, en busca de subidas o publicaciones que no hiciste tú.
  • Stripe y proveedores de pago: registros de peticiones a la API y eventos, en busca de reembolsos, pagos, webhooks o claves creados después del incidente.
  • Bases de datos: conexiones desde direcciones desconocidas, usuarios nuevos y exportaciones grandes, sobre todo en bases de datos con acceso público por red.

Que no haya alertas prueba poco. Muchos proveedores guardan los registros detallados poco tiempo, así que expórtalos ya.

Deja de guardar claves de larga duración

Rotar arregla este incidente. Las credenciales de corta duración hacen más pequeño el siguiente:

  • Usa federación de identidad de cargas de trabajo (OIDC) en lugar de claves de acceso a la nube. GitHub Actions, GitLab CI y muchas plataformas pueden cambiar un token de identidad firmado por credenciales temporales de AWS, GCP o Azure que caducan en minutos, así que no hay ninguna clave que robar de una variable de entorno.
  • Guarda los secretos en un gestor de secretos con credenciales dinámicas (como Vault o el almacén de secretos de tu nube). La aplicación pide credenciales de base de datos que caducan, en lugar de llevar una contraseña durante años.
  • Limita el alcance y el gasto de las claves de API. Usa una clave por servicio y entorno, con solo los permisos que necesita, límites de gasto y listas de IP permitidas cuando el proveedor lo admita, y con un responsable y una fecha de caducidad.
  • Haz de la rotación una rutina. Un servicio que no puede rotar un secreto sin cortes lo dejará para más tarde en pleno incidente. Ensáyalo.

Dónde encaja OpenWAF

Un WAF no protege los secretos guardados dentro de una plataforma de alojamiento, ni puede impedir que un atacante use una clave de API robada directamente contra el proveedor. Lo que sí puede hacer es limitar lo que un secreto robado de tu aplicación permite por la puerta principal, y evitar que alguien llegue a tu origen rodeándola:

  • Un origen que solo responde a OpenWAF. Con la autenticación del borde ante el origen (mTLS), el borde de OpenWAF presenta un certificado de cliente y tu servidor puede rechazar cualquier conexión que no pase por OpenWAF. Quien descubra la dirección de tu origen en una configuración filtrada sigue sin poder saltarse tus reglas del WAF, tus límites de peticiones ni tu puerta de acceso. La CA de cliente es común a toda la plataforma: prueba que la conexión viene del borde de OpenWAF, no que sea para tu zona, así que sigue comprobando también el Host.
  • Una puerta de acceso que no depende de los secretos de la aplicación. Si se filtró un secreto de sesión o de firma de JWT, un atacante puede falsificar una sesión de administrador con aspecto válido. La puerta de acceso retiene en el borde rutas de administración como /admin o /wp-admin hasta que la persona introduce un código de un solo uso enviado a un correo autorizado. Una cookie falsificada no basta.
  • Límites de peticiones y reglas de IP en el inicio de sesión, el restablecimiento de contraseña y las rutas de API frenan a quien pruebe credenciales robadas (límites de peticiones, reglas de IP y país).
  • Rota también tu token de OpenWAF. Si entre tus variables de Railway había un token de API de OpenWAF, revócalo en el panel y crea otro. Los tokens pueden ser de solo lectura o estar limitados a un cliente o a un dominio, y cada cambio hecho con un token queda versionado y en el registro de auditoría.

OpenWAF protege el tráfico HTTP y HTTPS. No se pone delante de los puertos de las bases de datos, así que cerrar su acceso público, como recomienda Railway, sigue siendo cosa tuya.

Lista de comprobación

  1. Exporta los nombres de todas las variables de Railway, de cada proyecto y entorno, creadas antes del 21 de octubre de 2026.
  2. Rota primero las claves de proveedores de IA, las credenciales de nube y las claves de carteras; después pagos, control de código y registros, bases de datos, secretos de la aplicación y otras claves de SaaS.
  3. Con cada una: crea la nueva, despliégala, compruébala y revoca la antigua en el proveedor.
  4. Crea tokens nuevos de API y de proyecto de Railway y actualiza la CI y los scripts.
  5. Quita el acceso público por red a las bases de datos que no lo necesiten.
  6. Revisa el consumo en los proveedores, CloudTrail o Cloud Audit Logs, GitHub, los registros de imágenes, Stripe y las bases de datos desde el 20 de octubre, y exporta esos registros antes de que caduquen.
  7. Sustituye las claves de nube de larga duración por federación OIDC y credenciales de corta duración, y pon límites de gasto y caducidad a las claves de API.
  8. Limita tus orígenes a tu WAF con mTLS y pon las zonas de administración detrás de una puerta de acceso que no dependa de los secretos de la aplicación.

Preguntas frecuentes

¿Se vio afectado mi proyecto de Railway?

Railway dice que como mucho el 1,85 % de los espacios de trabajo, unos 100.000, tuvieron alguna variable de entorno potencialmente comprometida, y ha escrito a los que considera de mayor riesgo. También dice que los demás no están confirmados como seguros, así que trata como expuesto cualquier secreto guardado en Railway antes del 21 de octubre de 2026.

¿Tengo que rotar aunque Railway no me haya escrito?

Sí. Railway pide a todos los clientes que guardaran secretos antes del 21 de octubre que los revoquen y los sustituyan, incluidas las credenciales de registros privados, y que vuelvan a desplegar.

¿Hay un CVE para el incidente de Railway?

No. Es una intrusión en la infraestructura de Railway, no una vulnerabilidad del software que tú ejecutas, y no se ha asignado ningún CVE. Railway no ha publicado cómo entró el atacante.

OpenAI o GitHub me avisan de que han revocado mi clave. ¿Me la robaron?

No necesariamente. Railway pidió a varios proveedores que revocaran claves de forma preventiva y entregó a GitHub y SpaceXSI todas las claves presentes en la plataforma, así que un aviso de revocación no significa que esa clave se descifrara. Sustitúyela igualmente.

¿Qué buscaba el atacante?

Según Railway, claves de API de proveedores de IA para hacer ataques de destilación de modelos. Rota primero las claves de IA y revisa si su consumo se ha disparado.

¿Siguen funcionando mis tokens antiguos de Railway?

No. Railway invalidó todos los tokens de API y de proyecto y las sesiones creadas antes del incidente. Crea tokens nuevos y actualiza la CI y los scripts que los usan.

¿Accedió el atacante al código fuente?

Railway dice que no accedió a cuentas de usuario, pero no descarta el acceso al código fuente y lo confirmará en su informe forense final, que no se había publicado cuando escribimos esto.

Fuentes

Temas

  • Railway
  • Railway security incident
  • environment variables
  • secret rotation
  • API keys
  • OIDC
  • short-lived credentials
  • PaaS

Autor

OpenWAF

Sigue leyendo

Ver todo

Trae las webs de tu agencia al acceso anticipado.

OpenWAF es gratis mientras está en acceso anticipado. Crea tu cuenta, añade los dominios de tus clientes y cambia sus servidores de nombres o añade un CNAME: el panel te guía en cada paso.