Mostrando entradas con la etiqueta Hijacking. Mostrar todas las entradas
Mostrando entradas con la etiqueta Hijacking. Mostrar todas las entradas

viernes, enero 16, 2026

WhisperPair: Una vulnerabilidad que permite espiar víctimas con BlueTooth Headset

El mundo de los "Cascos con micrófono", los famosos "Headset" Bluetooth, me ha llamado la atención desde el día uno que tuve los AirPods de Apple. Entonces, jugando con ellos escribí un artículo que se llamaba: "AirPods Pro: Unas pruebas en casa de Safety & Security" donde vi que había algunas cosas que nos estaban bien, por lo que escribí el artículo de "AirPodsSpy: Cómo te pueden vigilar por tus AirPods" que generó mucho ruido. Tiempo después, Apple mejoró algunas de las cosas que yo os decía que tenía que mejorar, y os lo publiqué en el artículo: "Apple arregla el AirPod "Spy" añadiendo alertas de seguridad y permitiendo Find My por Internet".
Todo esto os lo cuento, porque es la razón por la que me ha encantado el trabajo de WhisperPair, donde unos investigadores han descubierto cómo muchas de las implementaciones que están haciendo los fabricantes de "Headset" Bluetooth del protocolo de Google Fast Pairing para conectar sus cascos con los dispositivos Android, no es completo.

Figura 2: WhisperPair

Para entender la vulnerabilidad hay que entender que el sistema de Android - igual que el de iPhone - tiene dos procesos distintos. El primero de ellos es el de Conectar un Headset Bluetooth, y el segundo de ellos es del Parear un Headset Bluetooth, que parece lo mismo, pero no lo es. El primero de ellos es, permite que unos "Headset" se utilicen en un dispositivo Android. Este es un proceso sencillo que seguro que muchos habéis hecho. Y pueden ser tus cascos o los cascos de otro. No pasa nada.
Lo único que pasa es que el dueño, gracias a la red de localización de dispositivos basada en los terminales Android - igual que Apple hace con sus iPhone - el dueño puede localizar dónde se encuentra su dispositivo porque los terminales Android reportan los dispositivos Bluetooth que ellos ven a su alrededor. Una red mundial para localizar cualquier dispositivo.

He aquí el punto: los Bluetooth Headset pueden funcionar sin tener ningún dueño.

¿Y esto es un problema? No lo sería si un atacante no pudiera forzar un dispositivo remotamente a Parearse con una cuenta de Google controlada por el espía, sin necesidad tan siquiera de tocar el dispositivo. Esto es lo que permite muchas implementaciones incompletas del protocolo Google Fast Pair que permite parear una cuenta de Google con un nuevo dispositivo - no registrado previamente por nadie - con un solo mensaje.
Y esto es lo que han demostrado los investigadores. Con la herramienta de WhisperPair, lo que demuestran en el vídeo que han publicado es cómo, a distancia, se pueden escanear los dispositivos, y enviarles una petición de Pairing. Si el dispositivo responde a ese paquete, porque el "Headset" está abierto, lo único que tiene que hacer el atacante es terminar el proceso de Pairing haciendo una conexión.


Figura 5: Demostración de WhisperPair

Así que, estando hasta una distancia de 14 metros de la víctima, se puede hacer este escaneo, este "Hijaking" o secuestro del dispositivo, y luego el pareo para terminar de controlarlo. Y el resto... pues os lo podéis imaginar. Utilizando la red de Google "Find Hub", es posible saber en todo momento que se solicite donde está ese dispositivo, ya que el atacante es el dueño del dispositivo, y Google se lo va a decir.
Pero además, por supuesto, si está en la cercanía, se puede conectar al HeadSet y activar lo que se está haciendo, así que se puede escuchar lo que se está diciendo en una determinada sala. Esto lo hice yo con mis hijas con los AirPods en el artículo de Safety & Security, donde explicaba cómo se pueden configurar estos "cascos" en modo escucha.

Figura 7: CVE-2025-36911

En definitiva, la vulnerabilidad fue reportada en Agosto del 2025, recibió el CVE-2025-36911 y Google tiene disponible para que los fabricantes puedan validar sus implementaciones la herramienta Google Fast Pair Validator, que los fabricantes pueden utilizar para comprobar que no son vulnerables a este tipo de ataque. 
Este tipo de vulnerabilidades, que afectan a la privacidad de las personas, y que pueden permitir a un atacante controlar remotamente a su víctima, son muy peligrosas, porque pueden suponer un riesgo para la integridad física de la persona, así que hay que tomárselas muy en serio.

¡Saludos Malignos!

Autor: Chema Alonso (Contactar con Chema Alonso)  


martes, abril 10, 2018

RID Hijacking en Windows 10: Conseguir persistencia en Windows 10 durante un Pentesting con Metasploit #Metasploit #Pentesting

La técnica RID Hijacking permite a un pentester lograr persistencia en un sistema Windows 10 con el máximo privilegio. Sin lugar a la duda, es una técnica necesaria de conocer, cuando en un proyecto de Ethical Hacking se quiere lograr persistencia en un equipo y pasar de forma desapercibida. 

Figura 1: RID Hijacking en Windows 10: Cómo conseguir persistencia
en MS Windows 10 durante un Pentesting con Metasploit

Durante un pentesting puede ser complejo mantener el acceso, o lograr persistencia, en algunos entornos, sobre todo si la creación de un usuario o la adición de un usuario a un grupo puede desencadenar en una nueva alerta en el sistema que informe a un administrador o responsable de seguridad.

Figura 2: RID Hijacking en Windows

RID Hijacking es una técnica sigilosa y que permite a un usuario secuestrar el RID, Relative Identifier, de otro usuario, por ejemplo, el RID del usuario Administrador. Esto es bastante potente, ya que se puede lograr que un usuario tenga como RID, el famoso número 500, pero este usuario no pertenezca al Grupo Administradores. Como se puede ver, es una acción sigilosa.

¿Qué ocurre cuando el usuario inicia sesión?

Para los sistemas Microsoft Windows 10 es el usuario Administrador, el que inicia, ya que el RID es el suyo. El ataque permite:
• Asignar privilegios de la cuenta secuestrada a la cuenta del atacante, incluso si la cuenta secuestrada está deshabilitada. 
• Permite la autenticación con las credenciales de la cuenta del atacante, incluso de forma remota, y obtener acceso autorizado con la identidad del usuario que ha sido secuestrado. 
• Registrar cualquier operación que se ejecute en el registro de eventos como si fuera del usuario secuestrado, esta es una de las características más potentes.
La técnica es muy eficiente y potente. En Metasploit ya se dispone de un módulo que permite automatizar esta técnica, para que sea mucho más sencillo y rápido utilizarla en un Ethical Hacking.

Configuración del módulo de RID Hijacking

El módulo tiene una muy sencilla configuración por parte del pentester. Lógicamente, se necesitará una sesión remota en la máquina.

Figura 3: Módulo de RID Hijacking en Metasploit

El módulo dispone de varios atributos:
• GETSYSTEM. Este atributo fuerza al módulo a intentar impersonar a SYSTEM. La técnica requiere que seamos SYSTEM para poder manipular el hive HKLM del registro de Windows, dónde se almacena la información relativa a los RID de los usuarios.

• GUEST_ACCOUNT. Si se establece a true, se utilizará la cuenta de invitado como la cuenta del atacante. 
• RID. Se indica el RID que será asignado cuando se lleve a cabo el Hijacking. Por defecto, se muestra el RID con valor 500, perteneciente al Administrador “real” de la máquina. 
• USERNAME. Si es definido, este atributo indica el nombre de usuario al que se asignará el RID secuestrado. 
• PASSWORD. Si es definido, se establecerá esta contraseña a la cuenta de usuario indicada en USERNAME.
El ataque es funcional en diversos sistemas operativos Windows. Ha sido probado, según indica el creador del módulo, desde Windows XP, Windows Server 2003, Windows 8.1 y Windows 10. En este artículo veremos cómo funciona en sistemas Windows 10.

PoC: Jugando con RID Hijacking y la persistencia sigilosa

Partimos de la base de que tenemos una sesión remota en la máquina Windows 10. Para el ejemplo, digamos que tenemos una sesión remota, pero sin privilegio. Cuando utilicemos el módulo post/windows/manage/rid_hijack se observará que, al no tener privilegios de SYSTEM, el módulo fallará.

Figura 4: El módulo falla por falta de privilegios

La configuración del módulo es sencilla. El atributo USERNAME es fundamental, y si se quiere cambiar la contraseña al usuario en cuestión también debe ser utilizado el atributo PASSWORD.

Para este ejemplo, no se tiene privilegio de SYSTEM, pero como el usuario que creó el proceso comprometido pertenece al Grupo Administradores se puede intentar un bypass de UAC. En este caso, se utiliza el módulo bypassuac_fodhelper. Esto nos recuerda al módulo que hicimos en ElevenPaths para UAC-A-Mola Framework. El bypass nos funciona, como se puede ver en la siguiente imagen, y obtener una nueva sesión, esta sí, ya con privilegios de SYSTEM.

Figura 5: Bypass UAC para obtención privilegios de SYSTEM

Volvemos ahora al módulo de rid_hijack para configurarlo. Hay que fijarse en el atributo RID, PASSWORD, USERNAME o SESSION. Configuramos el atributo USERNAME con el valor de la cuenta destino, en este caso es una cuenta denominada hacked. Como se puede ver la configuración del módulo es muy sencilla y no necesita más. El módulo trabajará en el hive HKLM\SAM, para realizar el secuestro. Por esta razón, es totalmente necesario que sea haya logrado privilegio de SYSTEM.

Figura 6: Opciones del módulo de rid_hijack

Ejecutamos el comando run y obtener el secuestro del RID del usuario Administrador. En este momento, cuando iniciemos sesión con el usuario hacked, ya sea en local o en remoto, para Windows 10 será como si hubiera iniciado sesión el usuario Administrador.

Figura 7: Usuario Hacked creado con RID Hijacking del Administrador

Para ejemplificar lo comentado anteriormente, iniciamos sesión en la máquina Windows 10, abrimos una CMD.exe e intentamos crear un fichero en \Windows\System32. Como se puede ver en la imagen, podemos hacerlo, por lo que tenemos privilegios suficientes.

Figura 8: El usuario hacked tiene privilegios

Si mirásemos los grupos de los usuarios, veríamos cómo el usuario hacked solo pertenece al Grupo Users y no al de Administradores. Además, no nos ha hecho falta saltar UAC, directamente la CMD.exe ha podido crear el fichero en una ruta protegida.

Figura 9: PoC de RID Hijacking con Metasploit

Sin duda, una técnica muy interesante que está dando que hablar por la facilidad de su aprovechamiento y por las implicaciones que tiene. Una técnica nueva que aprender y llevar en la mochila del pentester.

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths

lunes, octubre 02, 2017

En Telegram la antigüedad (de la sesión) es un grado

Soy usuaria de Telegram, aunque como muchos utilizo también WhatsApp para estar en contacto con la mayor parte de la sociedad que piensa que WhtatsApp es la única alternativa. En uno de estos usos, me di cuenta de una curiosidad que afecta a la seguridad de tu sistema, y que desde hace tiempo utilizo para garantizar que tengo el control de mi cuenta.

Figura 1: En Telegram la antigüedad (de la sesión) es un grado

Además de que puedes poner un passcode en la app, lo que permite que le deje el terminal móvil a mi "duende" adolescente sin miedo a que revise mis conversaciones, también te permite tener abiertas muchas sesiones en PC y Web, por lo que para mí es una herramienta muy útil en casa y en el trabajo, y puedo estar en comunicación constante con mis compañeros de trabajo y amigos en cualquier equipo en el que esté trabajando. 

Figura 2: Sesiones activas en Telegram

Esto que está bien, también exige un poco de disciplina para mantener la seguridad, y por eso reviso todos los días las sesiones que tengo abiertas con Telegram. Y cuando veo una que ya no voy a utilizar, la cierro y la elimino remotamente desde otra sesión.

Figura 3: Cierre de todas las sesiones abiertas en Telegram

Pero el otro día me di cuenta que por seguridad Telegram tiene una opción muy útil, que permite proteger un poco más la cuenta. Y es que si la sesión es muy reciente, no te deja matar las sesiones más antiguas.

Figura 4: Eres demasiado joven para ello

Así, los que revisamos las sesiones abiertas con Telegram de forma habitual, tenemos la ventaja de que no nos pueden robar la cuenta y echarnos rápidamente, y tenemos una ventana de tiempo para matar a la sesión más reciente y cambiar las credenciales. Y como me pareció curioso, os lo comparto en este rápido artículo.

Besos,

Ingeniera de Sistemas, Cloud y Virtualización en Produban.

domingo, septiembre 17, 2017

Nuevo Video-Book "Ataques en redes de datos IPv4 & IPv6" de @0xWord

Ya os anuncié meses atrás que habíamos lanzado en 0xWord una nueva línea de trabajo con los Vídeo-Books. En una primera instancia lanzamos el VBook dedicado a Windows Server 2016, y hoy os quiero anunciar que ya está el segundo VBook, dedicado a "Ataques en redes de datos IPv4 & IPv6" disponible.

Figura 1: Nuevo Video-Book "Ataques en redes de datos IPv4 & IPv6" de @0xWord

Los VBooks llevan las explicaciones que se dan en los diferentes capítulos del libro, así como las demostraciones técnicas paso a paso, a sesiones en formato vídeo donde el ponente se detiene en todos los detalles del libro, y en todas las acciones que hay que realizar para probar las PoCs que se describen.

Figura 2: VBook "Ataques en redes de datos IPv4 & IPv6"

En el caso del libro de Ataques en redes de datos IPv4 & IPv6, uno de los más vendidos a lo largo de la historia de 0xWord, hicimos una nueva edición recientemente, y aprovechamos para construir el VBook correspondiente gracias al esfuerzo de Juan Luis Romero, experto en técnicas de Ethical Hacking. Ésta es la agenda del mismo, donde se ven ataques de Man in the middle en redes IPv4, técnicas de Session hijacking, ataques en IPv6 con Evil FOCA, etcetera.


Con este formato, para los que disfrutan más con las explicaciones multimedia, que con la lectura de un libro, se puede seguir la misma formación pero de distinta manera.

Saludos Malignos!

miércoles, junio 14, 2017

Mitigación de la suplantación de identidad en OAuth 2.0 (Parte II de II)

En esta segunda parte del artículo se detallará la solución propuesta con vistas a mitigar los vectores de ataque sobre el protocolo OAuth2 descritos en la primera parte de este artículo. Dicha solución se divide en dos partes claramente identificadas y complementarias: autenticación basada en riesgos gracias a mecanismos de identificación de cliente, y generación de tokens autocontenidos por el servidor de autorización.

Figura 12: Mitigación de la suplantación de identidad en OAuth 2.0 (Parte 2 de 2)

Para la primera parte de la solución, al utilizar mecanismos de identificación de cliente para llevar a cabo la autenticación basada en riesgos, lo cual puede considerarse como una violación de la privacidad del usuario, tomaremos como base la legislación vigente de España, más concretamente la Ley 34/2002, de 11 de julio, de servicios de la sociedad de la información y de comercio electrónico [ref: BOE-A-2002-13758, pp. 1-32, 2014]. Se toma como base de este estudio la legislación española ya que es una de las más restrictivas a nivel mundial y se centra en proteger la privacidad del usuario.

Figura 13: Ley de Servicios de la Sociedad de la Información

Para la segunda parte relacionada con la generación de tokens autocontenidos, la solución se apoyará en la representación JSON Web Token (JWT) - utilizados en sistemas como la implementación OAuth2 de Office 365 -para definir un conjunto de información que dificulte la suplantación de la identidad del usuario para el que fue emitido el token.

Figura 14: Estándar JWT

Además, esta definición permitirá una fácil gestión de alta disponibilidad en el servidor de autorización al viajar toda la información relevante dentro del propio token, independientemente de si es un token de acceso, un token de refresco o un código de autorización.

Autenticación basada en riesgos

Este trabajo define la autenticación basada en riesgos como la capacidad del servidor de OAuth2 de identificar al cliente, además de por sus credenciales de usuario, por un segundo factor en función del riesgo que el propio servidor detecte durante el proceso de autenticación. Obviamente, para poder disponer de la información necesaria para calcular el factor de riesgo, el servidor de OAuth2 debe ser capaz de poder identificar al cliente. Para ello, se pueden utilizar dos mecanismos de identificación:
  • Identificación basada en comportamiento.
  • Identificación basada en la propia identidad digital de los dispositivos del cliente.
La identificación basada en comportamiento consiste en analizar las acciones que el usuario va realizando a lo largo del tiempo para poder extraer de ellas las costumbres que identifican al usuario. Por ejemplo, si un usuario realiza siempre una consumición de más o menos la misma cuantía, sobre el mismo horario y en el mismo local, dicha transacción tendrá un nivel de riesgo menor y se podrá evitar el uso del segundo factor de autenticación, que si de repente, la cuantía de la transacción cambia considerablemente o se realiza desde otro país, en cuyo caso, el riesgo será mayor y se requerirá el segundo factor de autenticación.

Este tipo de mecanismo de identificación basado en comportamiento estaría más focalizado para entornos bancarios, ya que dichos entornos disponen de la información necesaria para implementarlos. Sin embargo, este mecanismo no sería aplicable en este caso de estudio, ya que sería muy difícil disponer de la información suficiente en base a la solicitud de acceso a los recursos protegidos para poder identificar al usuario en base a dicho comportamiento.

Por otro lado, la identificación basada en la propia identidad digital de los dispositivos del cliente permite analizar, indirectamente, las costumbres del usuario en cuanto al uso de dispositivos. Por ejemplo, si el usuario siempre se autentica desde un dispositivo móvil Android con una dirección IP perteneciente a un rango de direcciones IP asignadas a un ISP en concreto, dicha autenticación tendrá un menor nivel de riesgo y podrá evitarse el uso del segundo factor de autenticación, que si de repente, el usuario se autentica desde un dispositivo iOS o desde un rango de direcciones IP asignadas a otro ISP.

Figura 15: Técnicas de Web-based Device Fingerprinting


Este tipo de mecanismo de identificación lleva siendo utilizado para realizar el seguimiento de los usuarios por Internet sin el uso de cookies desde hace ya tiempo. Para ello, se identifica al usuario gracias al compendio de información resultante, entre otras fuentes, de la información de su resolución de pantalla y de la ventana del navegador del usuario, de su huso horario, del listado ordenado de sus fuentes (Flash) o de su cabecera HTTP User-Agent, la cual puede contener información como la versión del navegador y/o la del sistema operativo. Es por esto, que se considera este método de identificación cliente el idóneo para llevar a cabo la autenticación basada en riesgos propuesta en este trabajo.

Siguiendo con el mecanismo de identificación cliente elegido, un estudio reciente de la Universidad de Lehigh en conjunción con la Universidad de Washington ha demostrado que gracias a las APIs que el propio navegador ofrece vía Javascript, se podría realizar un mejor seguimiento del usuario añadiendo a la información ya descrita en el párrafo anterior, información de su tarjeta gráfica, de su procesador, del listado de fuentes (Javascript) o información sobre la configuración del audio del dispositivo.

Figura 16: Cross-Browser Fingerprinting via OS and HW Level Features

Esta nueva aproximación, permite, según los investigadores, identificar de manera satisfactoria al 99,24% de los usuarios a través de todos los navegadores que tengan en el mismo dispositivo en oposición al estado del arte del 90,84% sobre un único navegador. Este último dato proporciona a este caso de estudio una identificación de cliente más fiable para calcular mejor el riesgo asociado en el proceso de autenticación. La siguiente figura 4 muestra una visión muy a alto nivel del flujo de identificación de cliente vía Javascript propuesto.

Figura 17: Flujo de identificación cliente vía Javascript

Además, si tenemos en cuenta la legislación vigente en España referida al seguimiento del usuario mediante la denominada Ley de Cookies, podemos observar que al no realizar almacenamiento y posterior recuperación de datos del dispositivo de cliente, no se está en la obligación de notificar al usuario de dicho seguimiento. Obviamente hay que puntualizar, que dicho seguimiento se lleva a cabo durante el propio proceso de autenticación del usuario y que los datos obtenidos, al estar vinculados con la propia identidad del usuario, deberían ser protegidos en su almacenamiento con el mismo nivel de seguridad que tengan los datos ya existentes del usuario como se describe en la Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal.

Por tanto, teniendo en cuenta el mecanismo de identificación de cliente elegido, la legislación vigente citada, y con vistas a mejorar la usabilidad del proceso de autenticación del usuario, la siguiente Figura 18 describe el conjunto de reglas de ejemplo que se podrían aplicar en el proceso de autenticación basado en riesgos de un servidor de OAuth2, donde el segundo factor de autenticación sólo será solicitado en función del riesgo detectado.

Figura 18: Tabla ejemplo de reglas para calcular el factor de riesgo

Este proceso de autenticación basado en riesgos mitigaría la problemática descrita en la consideración de seguridad del punto 10.2 de la RFC 6749 del protocolo OAuth2 referida a mantener en secreto los credenciales del usuario para evitar la suplantación de su identidad por un tercer usuario malicioso. Esto es así ya que si consideramos el segundo factor de autenticación con la suficiente aleatoriedad, como por ejemplo, un OTP (One-Time Password), la desaparición o aparición de dicho segundo factor basado en el riesgo detectado en el proceso de autenticación dificultaría a un tercero, la capacidad de suplantar a un usuario aunque las credenciales de dicho usuario legítimo (primer factor de autenticación) se hayan visto comprometidas.

Si existiese un usuario atacante escuchando en la red, éste sólo podría capturar el primer factor de autenticación del usuario legítimo y al intentar autenticarse con dichas credenciales, será identificado como una autenticación de riesgo y el propio servidor de OAuth2 solicitará el segundo factor. Nótese que como premisa de este enfoque de autenticación basada en riesgos, se entiende que el usuario atacante no dispone del control de la máquina del usuario legítimo.

Figura 19: Client Impersonation en OAuth 2.0

Para terminar, remarcar que independientemente de si durante el proceso de autenticación se ha solicitado el segundo factor de autenticación o no, el servidor de OAuth2 siempre debería presentar la página de solicitud explícita de consentimiento al usuario como se muestra en la Figura 20. De esta forma, aunque los servidores de OAuth2 no permitan al usuario controlar y filtrar que permisos de los solicitados por las aplicaciones conceden o no, se mitiga por completo el ataque de redirecciones HTTP 307 descrito en el estudio formal sobre el protocolo OAuth2 llevado a cabo por la Universidad de Trier de Alemania explicado en la primera parte de este artículo, ya que de realizarse la redirección con un código HTTP 307, el cuerpo del mensaje enviado en el POST HTTP contendrá sólo si el usuario da su consentimiento o no, y nunca sus credenciales.

Figura 20: Página de solicitud de consentimiento al usuario

Tokens autocontenidos

En este trabajo se considera token autocontenido a aquel que contiene toda la información necesaria para identificar unívocamente tanto al cliente para el que fue emitido el token, como a las aplicaciones que están autorizadas a utilizar dicho token en su nombre. Esta información contenida en el propio token permite que aunque se viese comprometido durante su transmisión o almacenamiento y no estuviera expirado, dicho token no fuese válido si un tercero distinto del cliente o de las aplicaciones autorizadas, quisiera ganar acceso a un recurso protegido utilizándolo. Teniendo en cuenta la consideración de que toda la información del usuario, sesión y demás está contenida en el propio token, se permite liberar de carga a los servidores de OAuth2 mejorando así su gestión de alta disponibilidad.

Con vistas a generar tokens capaces de incluir la información suficiente para que sean identificativos unívocamente, se propone la utilización de la notación JSON Web Token (JWT), la cual permite una representación de datos de una manera interoperable fácilmente entendible en la comunicación entre dos partes. Este tipo de notación, al ser menos verbosa que la notación XML, permite lograr una mejor interoperabilidad y rendimiento a la hora de integrar aplicaciones de organizaciones diferentes mediante, por ejemplo, servicios web, ya sean de comercio electrónico u otra índole.

Figura 21: JSON Web Token

Una descripción acertada, pero incompleta bajo el punto de vista de este estudio, sobre qué debe contener un token representado en notación JSON Web Token para ser identificativos por sí mismos, se puede encontrar en la RFC 7662 que define la introspección de los tokens de OAuth2. En dicha RFC, se define la existencia de un servicio en los propios servidores de OAuth2 que permite a los recursos protegidos consultar si un determinado token está activo o no, y extraer metadatos a partir del token como información del identificador de cliente, quién emitió el token u otros.

Siguiendo una definición aproximadamente igual a la anterior RFC citada, existe un trabajo aún en borrador que define el uso de los JSON Web Token autocontenidos como parámetros "state", los cuales, además de contener metadatos dentro del token, permiten a los clientes enviarlos en las peticiones a los servidores de OAuth2 como tokens anti-CSRF.

Figura 22: OAuth 2.0 Token Introspection

Este estudio considera la descripción de los tokens autocontenidos descritos en las RFCs anteriormente citadas, como una descripción incompleta, ya que desde el punto de vista de un recurso protegido, en base a la información que contienen los metadatos asociados al token y la que el recurso protegido sería capaz de extraer de la identificación del cliente, no existe una coincidencia unívoca.

Figura 23: Par´metros state en JWT de OAuth 2.0

Esto es así, ya que en el peor de los casos, un recurso protegido tendrá a su disposición como identificación del cliente la dirección IP de origen de la petición y la cabecera HTTP User-Agent, y por otro lado, a partir del token podrá obtener metadatos como el identificador de cliente de la aplicación que solicitó el token, el usuario que autorizó su emisión u otras. Debido a esto, si un token se viese comprometido durante su transmisión o almacenamiento, como por ejemplo en la fuga de información a través de la cabecera HTTP Referer descrita en la sección de vectores de ataque del presente documento, un tercer usuario malicioso podría suplantar fácilmente a la aplicación que solicitó el token con dicho token comprometido.

Analizando en profundidad el contenido de los campos incluidos dentro de los JSON Web Token, se puede comprobar que dichos campos son idénticos a los propuestos en la definición del protocolo OpenID Connect. Si se observa la Figura 24 se puede percibir como los campos representados en los JSON Web Token intentan simular la meta información contenida dentro de los certificados X.509.

Figura 24: Campos comunes entre el protocolo OpenID Connect y
la RFP 7662 de introspección de tokesn OAuth 2.0

Este intento de simulación plantea un error de identificación grave en los procesos de autenticación, ya que en un proceso de autenticación basado en JSON Web Token, el propio token tiene identidad por sí mismo como si fuera una cookie muy elaborada, mientras que si realizamos una autenticación basada en certificados X.509, además de disponer de la clave pública del certificado y su meta información, se requiere de la firma de un reto aleatorio con la clave privada del certificado, causa por la cual, un certificado X.509 público por sí mismo sin dicho reto aleatorio firmado por la clave privada no representa una identidad. Por este motivo, este estudio propone añadir a la especificación de la RFC 7662 que define la introspección de los tokens de OAuth2 los campos descritos en la siguiente tabla:

Figura 25: Nuevos campos propuestos

Los tres primeros campos permitirían al recurso protegido, a partir del token proporcionado y la identificación del cliente más básica de la que podría disponer, ser capaz de comprobar que el token que le han presentado proviene de quien dice ser, pudiendo rechazarlo incluso aunque no estuviese expirado. Por otro lado, el cuarto campo, permitiría tener una mejor trazabilidad del uso de los distintos recursos protegidos por parte del usuario y de las aplicaciones gracias a la gestión de un identificador de sesión único asociado a cada proceso de solicitud de token. Esto último daría al recurso protegido la capacidad de gestionar su estado, de ser necesario, en base a dicho identificador con la certeza de que la comprobación de la integridad de dicho identificador de sesión será delegada en el propio servidor de OAuth2.

Al incluir información que identifica unívocamente al usuario dentro del propio token (y como token nos referimos tanto al token de acceso, al token de refresco como al código de autorización), dicha información debería ir cifrada mediante la representación JSON Web Encryption (JWE) que se describe en la RFC 7516.

Figura 26: JSON Web Encryption (JWE)

Este cifrado del contenido del JSON Web Token permitirá a la aplicación cliente tratar dicho token como un token opaco o bearer cuando en realidad, su propia identidad de cliente ha permitido la generación de un token con un funcionamiento similar al descrito para los "token proof" en la RFC 6819 de consideraciones de seguridad de OAuth2. Dichos "token proof" obligan al cliente a realizar una acción que pruebe su identidad cada vez que quiera utilizarlo, por eso, la solución propuesta en este estudio implica un menor desarrollo en las aplicaciones cliente ya que el propio cliente, al iniciar un proceso de autenticación con el servidor de OAuth2 o durante el propio uso de los recursos protegidos, se está identificando a sí mismo con su identidad de cliente de manera transparente.

Para terminar, remarcar que el uso de esta propuesta de tokens autocontenidos mitigaría los riesgos tanto de los vectores de ataque basados en implementación descritos en el presente documento, como los ataques de fuga de información mediante la cabecera HTTP referer, redirecciones no controladas, gestión “inocente” de la integridad de la sesión por parte del recurso protegido y confusión del IdP descritos en el estudio formal sobre el protocolo OAuth2 llevado a cabo por la Universidad de Trier de Alemania. Esto es así ya que aunque se viese comprometido cualquiera de los tokens descritos en la RFC 6749 de OAuth2, dichos tokens sólo tendrían validez para los usuarios que autorizaron su emisión o para las aplicaciones autorizadas por el usuario para su uso.

Conclusiones

En este trabajo se ha descrito como un servidor de OAuth2 sería capaz de mitigar los riesgos detectados a día de hoy, tanto a nivel formal contra la propia definición del protocolo, como contra las vulnerabilidades más frecuentes detectadas en las implementaciones más importantes de servidores de OAuth2. Para ello, se ha propuesto un modelo de autenticación basada en riesgos utilizando mecanismos de identificación de cliente.

Además, también se ha propuesto una generación de tokens autocontenidos de los que se podría recuperar la identidad del cliente para verificar que el token fue presentado por el mismo usuario para el que fue emitido. Toda esta propuesta se ha llevado a cabo teniendo en cuenta el marco de la legalidad vigente en España y la capacidad de gestionar la alta disponibilidad por parte de las implementaciones de servidores de OAuth2 que desarrollen esta propuesta.

Autor: Elias Grande (@3grander) autor del Proyecto ODIN
Graduado en por el Master de Seguridad de la UEM

lunes, junio 12, 2017

Mitigación de la suplantación de identidad en OAuth 2.0 (Parte I de II)

OAuth2 es uno de los protocolos de autorización/single sign-on (SSO) más extendidos en Internet sobre el que además se basa el estándar de autenticación OpenID Connect. Es su gran difusión y aceptación lo que provocaría que el descubrimiento de un nuevo vector de ataque contra dicho protocolo tuviera un gran impacto. Hasta la fecha, los análisis realizados sobre OAuth2 basan sus vectores de ataque en las consideraciones de seguridad ya descritas en la propia especificación del protocolo, como por ejemplo, los parámetros que deberían ser saneados por el servidor de autorización como la URL de redirección o la suplantación del usuario.

Figura 1: Mitigación de la suplantación de identidad en OAuth 2.0

Con vistas a mitigar los vectores de ataque conocidos sobre OAuth2, en este trabajo se desarrollará una posible solución basada en mecanismos de identificación de cliente y tokens autocontenidos. Por un lado, los mecanismos de identificación permitirían a un servidor de OAuth2 ser capaz de proteger las credenciales del usuario mediante una autenticación basada en riesgos, y por otro lado, los tokens autocontenidos permitirían que, aunque se hubiesen visto comprometidos en su transmisión o almacenamiento, sólo serían válidos para los clientes para los que fueron emitidos gracias a la información que contienen sobre el cliente identificado.

1.- Introducción

OAuth2  es un protocolo que permite independizar, en entornos distribuidos, la capa de autorización y la separación de roles de clientes y usuarios, de los propios recursos HTTP protegidos. Para gestionar dicha autorización, en vez de utilizar los credenciales del usuario propietario del recurso al que se quiere acceder, un cliente o aplicación de tercero utilizará un token de acceso, es decir, una cadena de caracteres que denota un ámbito de uso, un tiempo de vida y otros atributos de acceso a los recursos protegidos. Estos tokens de acceso son emitidos a dichas aplicaciones de terceros previa autorización del propietario del recurso protegido para que puedan acceder a dicho recurso en su nombre. Esto es lo que se denominaría como autorización delegada.

Figura 2: RFC para discutir OAuth  2.0

Esta autorización delegada obtenida por la aplicación de terceros, al ser concedida bajo previa autorización del usuario propietario del recurso, permite a dicho usuario definir un ámbito de acceso tan reducido como el propio servidor de autorización le permita. Por este motivo, si la aplicación de terceros intenta acceder a otro recurso protegido del usuario fuera del ámbito del token de acceso inicial que se le proporcionó, dicha aplicación necesitará volver a solicitar permiso al usuario final. Esto desmitifica por completo la errónea creencia de que OAuth2 es un protocolo de SSO para autenticación, ya que es necesario reiteradas autenticaciones del usuario final para autorizar el acceso a aplicaciones de terceros a nuevos recursos protegidos fuera del ámbito del token de acceso inicial del que disponían.

Por otro lado, sobre el propio protocolo OAuth2 y fundamentado en las dos premisas que define su RFC 6749:
"los servidores de autorización deberían ignorar cualquier parámetro de las peticiones que no estén reconocidos en la RFC", y "los clientes deberían ignorar cualquier parámetro de las respuestas que no estén reconocidos en la RFC"
se ha construido el protocolo OpenID Connect. Este protocolo si es un protocolo SSO para autenticación y está muy extendido en IdPs (Identity Providers) de Internet como Google, GitHub,  Facebook o Microsoft Office 365 - como se pudo ver en los ataques Sappo "Spear Apps to  Steal OAuth-tokens" -  entre otros. Es importante tener en cuenta el protocolo OpenID Connect a la hora de realizar este estudio, ya que al estar construido sobre el protocolo OAuth2, cualquier nuevo vector de ataque podría repercutir directamente en OpenID Connect. En la Figura 3 se muestra de manera gráfica los módulos que componen el protocolo OpenID Connect incluyendo entre sus pilares, los componentes de la especificación de OAuth2.

Figura 3: Protocolo OpenID Connect

2.- Motivación

El protocolo OAuth2, tanto en su propia RFC 6749 como en la RFC 6819 que define el modelo de riesgos de OAuth2, describe las consideraciones de seguridad a tener en cuenta a la hora de utilizar o implementar un servidor de OAuth2. Entre dichas consideraciones de seguridad podemos encontrar, la recomendación de registrar las URIs de redirección asociadas a cada cliente para evitar redirecciones no controladas gestionadas por ellos mismos o por terceros, la recomendación de que el cliente debería utilizar el parámetro "state" en sus peticiones al servidor de autorización como un token anti-CSRF [A. Barth, C. Jackson, J. C. Mitchell, "Robust defenses for cross-site request forgery", CCS, pp. 75–88, 2008.], y la recomendación de mantener de manera confidencial, tanto durante la comunicación como durante el almacenamiento, los credenciales del usuario así como los tokens emitidos por el servidor de autorización, es decir, los tokens de acceso, los tokens de refresco y los códigos de autorización.

Figura 4: Modelo de riesgos en OAuth 2.0

A lo largo de esta sección se describirán algunos de los vectores de ataque basados en las implementaciones que cada IdP de Internet ha llevado a cabo para cubrir la especificación del protocolo OAuth2. También se describirán los vectores de ataque basados en la propia especificación del protocolo, los cuales son agnósticos de la implementación posterior que se realice.

3.- Vectores de ataque basados en la implementación

Aunque el protocolo defina a priori las consideraciones de seguridad a tener en cuenta, no siempre los servidores que implementan la especificación del protocolo OAuth2 cumplen estas recomendaciones. Un ejemplo lo podemos encontrar en los fallos de seguridad reportados por Egor Homakov y documentados en su blog a los programas de Bug Bounty de Facebook y Github, los cuales son programas que recompensan económicamente a los investigadores que reporten de manera responsable los fallos de seguridad en vez de realizar un uso malicioso de los mismos.

Figura 5: Fallos en OAuth2 utilizados para hackear Facebook

El caso reportado a Facebook se aprovechaba de que la versión de Google Chrome XSS Auditor fugaba la información de "document.referer", es decir, se mostraba la información referida a la URL desde la que se propició la carga de la página actual. A lo anterior se sumaba que Facebook introducía la cabecera HTTP "X-XSS-Protection: '1;mode=block'" para bloquear los ataques de  XSS.

Teniendo en cuenta ambas premisas, si el cliente introducía un XSS en el parámetro "state" de su petición, cuando llegaba la respuesta con el token de acceso al navegador, éste la bloqueaba al tener el "mode=block" y dicha respuesta se redirigía a la página "about:blank" de Google Chrome, mostrando, como se ha comentado, la información de la URL que en este caso contenía el token de acceso. En la Figura 6 se muestra un ejemplo de fuga del token de acceso a través de la cabecera HTTP referer la cual indica la URL desde la que se propició la carga de la página actual.

Figura 6: Fuga de información en la cabecera HTTP

Por otro lado, en el caso reportado a Github, la URL de redirección enviada por el usuario al servidor de autorización no se filtraba de manera adecuada, lo que posibilitaba el vector de ataque de path transversal. Este hecho, sumado a un par más de vulnerabilidades descritas en el caso reportado, permitía a un usuario atacante ganar acceso a recursos de otros usuarios con los mismos permisos que el usuario atacante tenía sobre sus propios recursos protegidos.

Figura 7: Punto 10.4 RFC 6749

Estos fallos de seguridad encontrados en IdPs tan importantes como pueden ser Facebook y Github, podrían haber sido evitados siguiendo las recomendaciones de seguridad descritas en el punto 10.14 de la propia RFC 6749 del protocolo OAuth2, en la cual se define que tanto el servidor de autorización como el cliente deben sanear cualquier valor recibido siempre que sea posible, en particular, el valor de los parámetros "state" y "redirect_uri".

4.- Vectores de ataque basados en la especificación

Aunque los detalles de implementación que provocan las vulnerabilidades son vectores de ataque completamente válidos y reales de las implementaciones del protocolo OAuth2 que actualmente existen en los grandes IdPs de Internet, no se debe pasar por alto los vectores de ataque basados en la especificación del propio protocolo, ya que éstos podrían ser agnósticos de la implementación posterior realizada y conllevar un mayor impacto.

Figura 8: Estudio de la Universidad Trier de Alemania sobre OAuth 2.0

El estudio formal sobre el protocolo OAuth2 llevado a cabo por la Universidad de Trier de Alemania, cuya última versión data de 2016, pone de manifiesto cuatro vectores de ataque no descritos hasta la fecha, los cuales se basan principalmente, en la RFC 6749 del protocolo OAuth2. Dichos vectores de ataque serían los siguientes:
• Redirecciones HTTP 307 
• Fuga de información 
• Gestión "inocente" de la integridad de la sesión por parte del recurso protegido 
• Confusión de IdP
El primer vector de ataque basado en redirecciones HTTP 307 se fundamenta en que ni la RFC 6749 del protocolo OAuth2, ni la RFC 6819 que define el modelo de riesgos de OAuth2 especifican el método exacto de redirección HTTP. El problema de la redirección HTTP 307 radica, como bien se indica en el punto 6.4.7 de la RFC 7231, en que dicha redirección no permite cambiar el método de la petición de POST a GET. Esto quiere decir que si la redirección se produce inmediatamente después de introducir los credenciales del usuario, éstos viajarán en el cuerpo del POST de la redirección hacia donde el navegador sea redirigido.

Figura 9: Redirecciones HTTP Temporales

Por otro lado, la fuga de información, como por ejemplo, el valor del parámetro anti-CSRF "state" o el de los tokens codificados en la URL se basa, del mismo modo que el fallo de seguridad reportado a Facebook detallado en la sección de vectores de ataque basados en la implementación, en una mala configuración de las políticas de la cabecera HTTP referer. Esta mala configuración propicia que si el IdP tuviera enlaces a recursos externos, si el usuario siguiera dichos enlaces, los recursos externos tendrían a su alcance en la cabecera HTTP el valor de los parámetros ya citados, permitiéndoles, por ejemplo, saltare la protección anti-CSRF o robar la sesión o los tokens emitidos por el servidor de autorización.

En cuanto a lo que se denomina gestión "inocente" de la integridad de la sesión por parte del recurso protegido, se refiere a que dicho recurso lleva a cabo un seguimiento del usuario entre una petición y otra, es decir, es un recurso con estado (stateful), pero sin embargo, no realiza comprobaciones de la integridad de la sesión con la que está identificando a dicho usuario. Del mismo modo que pasaba con las redirecciones HTTP 307, ninguna RFC de OAuth2  ya citada, define más allá de la obligación del recurso protegido de validar el token de acceso y comprobar que no está expirado.

Por este motivo, el ataque descrito en el estudio se basa en la suplantación de la sesión de seguimiento emitida por el recurso protegido. Para ello, un atacante comienza una sesión legítima con un IdP con el fin de obtener su token de acceso, haciendo además creer al recurso protegido, que él es su IdP legítimo. Cuando un tercer usuario intente acceder al recurso protegido, éste le redireccionará al IdP del atacante que le devolverá su propia sesión de seguimiento y su token obtenido de manera legítima con el IdP. Esta suplantación provocará que el recurso protegido crea que es propiedad del usuario atacante y no del nuevo usuario.

Por último, el ataque de confusión de IdP es el más complejo y requiere de múltiples asunciones para que se pudiera llevar a cabo. Dicho ataque consistiría en lo que podríamos denominar un servidor OAuth2-in-the-middle, permitiendo al atacante la obtención de la información de los credenciales del usuario, tokens y demás información sensible. En la Figura 10 se muestra el diagrama de flujo del ataque de confusión de IdP extraído del estudio formal sobre OAuth2 llevado a cabo por la Universidad de Trier de Alemania.

Figura 10: Diagrama de flujo del ataque de confusión de IdP

En 2016, Wanpeng Li y Chris J. Mitchell de la Universidad de Londres, realizaron una presentación  en la que demostraban que ciertas de las asunciones del modelo formal descrito para llevar a cabo este ataque no aplican en la práctica y se reafirmaban en que el modelo de seguridad de OAuth2 se construye sobre la confianza del IdP, por lo que si el IdP es malicioso, el sistema al completo de OAuth2 está corrupto. Esta última premisa de que el modelo de seguridad se construye sobre la confianza en el IdP, aplicaría tanto a este ataque de confusión de IdP como al de gestión "inocente" de la integridad de la sesión por parte del recurso protegido descrito en el párrafo anterior.

Figura 11: Does the IdP Mix-Up attack really work?

Los tipos de vectores de ataque descritos en esta sección, basados en la especificación y basados en la implementación, cuya finalidad es romper la autorización, la autenticación o la integridad de sesión, aplican a los flujos de authorization code e implicit descritos en la RFC 6749 del protocolo OAuth2. Como ya se ha mencionado con anterioridad, estos flujos están incluidos en el protocolo OpenID Connect al estar éste construido sobre OAuth2, por lo que dichos vectores de ataque descritos son igualmente válidos sobre el protocolo OpenID Connect.

[Continúa en la Parte II]

Autor: Elias Grande (@3grander) autor del Proyecto ODIN
Graduado en por el Master de Seguridad de la UEM

Entrada destacada

Hacking IA: Jailbreak, Prompt Injection, Hallucinations & Unalignment. Nuestro nuevo libro en 0xWord

Pocas veces me ha hecho tanta ilusión que saliera un nuevo libro en 0xWord como con este libro de " Hacking IA: Jailbreak, Prompt Inje...

Entradas populares