Vulnerabilidad en el Touch ID de Apple podría haber permitido a un atacante tomar control de las cuentas de iCloud

Touch ID de Apple para los dispositivos iOS y macOS que utilizan la API “gsa.apple.com”. Dicha función es utilizada para iniciar sesión en sitios web que utilizan el inicio de sesión con el Apple ID. La explotación exitosa de este fallo permitiría a un atacante obtener acceso no autorizado a la cuenta iCloud de la víctima o cualquier otro servicio que haga uso del Apple ID y la funcionalidad Touch ID para el inicio de sesión.

Detalles Técnicos.

Cuando el usuario desea iniciar sesión en un sitio que requiera el uso del ID de Apple, se muestra un mensaje, consultando al usuario si se desea iniciar sesión utilizando la funcionalidad de Touch ID. El proceso de inicio de sesión con el Touch ID omite el factor de doble autenticación, debido a que ya se realiza una comprobación de dos factores para la autenticación, una la información biométrica (Touch ID) y otra el dispositivo utilizado (iOS o macOS).

Fuente: thehackernews.com

En un proceso normal de autenticación (con ID y Contraseña) en los dominios de Apple (por ejemplo: icloud.com), el sitio web inserta un iframe (elemento HTML que permite insertar un documento HTML en otro principal) el cual apunta al servidor de validación de inicio de sesión de Apple («https://idmsa.apple.com«). Este iframe contiene además dos parámetros, el «client_id» que identifica al cliente y el «redirect_uri» que contiene la URL donde será redirigido el usuario una vez inicie sesión. A continuación se puede visualizar un elemento iframe de ejemplo:

Fuente: computest.nl

Sin embargo, cuando el usuario opta por realizar el proceso de autenticación con el Touch ID, este iframe se comunica con el demonio akd (Demonio utilizado en el proceso de autenticación de iCloud y otros servicios que utilicen el ID de Apple), el cual se encarga del proceso de autenticación biométrica y de obtener un token de acceso «grant_code». Todo esto, mediante una comunicación con la API alojada en gsa.apple.com, la cual recibe los detalles de la solicitud y seguidamente envía el token utilizado por icloud.com para continuar con el proceso de autenticación.

El fallo concretamente reside en la API gsa.apple.com, y se da debido a que esta no válida si el parámetro «redirect_uri» coincide con el ID del cliente determinado por el parámetro «client_id», en lugar de eso verifica una lista blanca sobre los dominios permitidos, es decir todos los dominios que terminen con «apple.com»«icloud.com» y «icloud.com.cn» pueden ser accedidos en el proceso de autenticación. Lo cual podría parecer suficientemente seguro, sin embargo es importante tener en cuenta que «apple.com» posee varios subdominios, si algunos de estos subdominios son vulnerables a ataques de Cross-site Scripting (XSS), un atacante podría tomar provecho de esto, ejecutar código Javascript malicioso con el fin de solicitar a la víctima la autenticación de la cuenta de iCloud con el Apple ID, y así lograr obtener el token de sesión de la cuenta de iCloud.

En un escenario diferente, un atacante podría crear un AP (Punto de acceso) malicioso en lugares donde los usuarios esperan recibir un portal cautivo (por ejemplo: aeropuerto, hotel, shopping, entre otros), el cual se visualiza cuando el dispositivo se conecta a una red Wi-Fi pública (a través de “captive.apple.com”). Un atacante podría solicitar a la víctima la autenticación de la cuenta de iCloud con el Touch ID por medio del portal cautivo malicioso, logrando así obtener el token de sesión y comprometer la cuenta de iCloud de la víctima.

Una prueba de concepto (PoC) de esta vulnerabilidad, la puede encontrar en el siguiente enlace.

Recomendaciones.

Esta vulnerabilidad fue abordada por Apple en una actualización de seguridad del lado del servidor, sin embargo aun así es importante tener en cuenta estos consejos de seguridad:

  • Verificar que los sitios utilizados para la autenticación con el Touch ID sean oficiales y de confianza.
  • No conectarse a redes Wi-Fi públicas.

Referencias:

Compartir: