Un joven investigador de seguridad de 16 años, conocido como Faav, ha expuesto una importante vulnerabilidad en Titan, un servicio interno de analítica de Microsoft. Utilizando un token manipulado y la credencial 'admin', logró acceder a datos sensibles como metadatos de cuentas y correos electrónicos de empleados. Este incidente subraya la importancia de validar siempre las firmas digitales de los tokens de autenticación.
Cada vez que un usuario inicia sesión en una aplicación o servicio, se transmite un token que contiene información sobre su identidad y permisos. La seguridad de este proceso no radica tanto en el contenido del token como en su firma digital, que verifica su origen y garantiza que no ha sido alterado. A pesar de que este método es conocido por ser mejorable, aún se presentan fallos, como el recientemente descubierto en Microsoft.
El investigador de seguridad Faav, de 16 años, logró ejecutar consultas SQL con privilegios de administrador en Titan, el servicio de analítica interna de Microsoft. Esto lo consiguió al manipular un token y emplear el usuario 'admin', una configuración predeterminada común. A través de este acceso, Faav obtuvo metadatos de la plataforma, incluyendo aproximadamente 25.000 cuentas, 17.990 correos electrónicos de empleados y 24.569 paneles de control. Además, identificó que el servicio se conectaba a 17 bases de datos de analítica, estimando que estas contenían alrededor de 17,3 billones de filas.
Faav reportó la vulnerabilidad al Microsoft Security Response Center el 5 de septiembre. Microsoft cerró el acceso el 9 de septiembre y le concedió una recompensa de 5.000 dólares el 17 de septiembre, según lo detallado en su blog.
El 25 de agosto, Faav, asistido por su herramienta de inteligencia artificial Antares, descubrió la API de Titan. Aunque la interfaz web del servicio era solo accesible para el personal, la API estaba expuesta en un host de Azure. Durante diez días, Antares probó diversas variaciones de tokens hasta confirmar que el servidor aceptaba tokens sin firma. Sin embargo, no pudo encontrar un usuario que Titan reconociera. Fue entonces cuando Faav tuvo la idea de cambiar el campo de usuario a 'admin'. Esta acción permitió que Titan lo tratara como un nombre de usuario local con rol de administrador, ejecutando la consulta con éxito.
La relevancia de este hallazgo radica en que no fue necesario un ataque sofisticado. Titan verificaba el contenido del token (inquilino, audiencia, aplicación y usuario) pero omitía la validación de su firma, invalidando así el resto de las comprobaciones. Es irónico que la documentación de Azure Application Gateway recomiende explícitamente validar la firma, el emisor, el destinatario y la caducidad del token. Este caso también ilustra la eficacia de la caza de vulnerabilidades asistida por IA, donde la máquina actúa como un complemento de la pericia humana. Faav mencionó que Antares proporcionó la persistencia durante diez días, pero la idea de probar con 'admin' fue suya.
Este tipo de vulnerabilidad no es sofisticada ni nueva. Más allá de la persistencia, la solución implicó probar un método clásico, y este tipo de acceso ha sido documentado desde 2015. En ese año, el investigador Tim McLean demostró que varias librerías aceptaban tokens declarados sin algoritmo. Cinco años después, el Grupo de Trabajo de Ingeniería de Internet (IETF) publicó directrices de seguridad para el estándar JSON Web Token.
Faav aclaró que el impacto potencial de este ataque fue hipotético, ya que no accedió a datos de clientes y se limitó a metadatos y a dos muestras de una fila de datos de Bing. La cifra de 17,3 billones de filas es una estimación basada en metadatos, que probablemente incluye datos históricos, duplicados y derivados. Microsoft revisó el texto antes de su publicación, realizando recortes en secciones y cifras, aunque todos los detalles técnicos provienen del propio investigador.
La principal lección de este incidente, aunque no es nueva, es crucial y recurrente: siempre se debe verificar la firma de los tokens, configurar el servidor para que acepte solo algoritmos específicos, independientemente de lo que declare el token, y no asumir que una API es segura solo porque su interfaz web esté oculta.