¿Cómo guarda y restaura una aplicación de Google iOS las cuentas activas al eliminar la aplicación?

En un dispositivo iOS 8, instalé Google Hangouts y, al iniciarlo por primera vez, rellenó previamente una cuenta que estaba previamente asociada con una aplicación de Google diferente y eliminada hace mucho tiempo.

Como acababa de restablecer el identificador de publicidad, supuse que debía ser la identificación del proveedor (había otra aplicación de Google instalada en el dispositivo). Entonces, eliminé ambas (todas) las aplicaciones de Google en el dispositivo, lo que debería restablecer la ID del proveedor.

Luego reinstalé Google Hangouts y lo inicié. TODAVÍA tenía activa la cuenta anterior. Este no es solo un comportamiento misterioso, sino que también es una vulnerabilidad de seguridad y privacidad bastante grave. Cuando se elimina una aplicación, y especialmente cuando se eliminan todas las aplicaciones de un proveedor, no deberían quedar cuentas ni datos activos en el dispositivo.

¿Alguna idea sobre cómo Google Hangouts sabe sobre la cuenta anterior?

Respuestas (3)

Apple aconseja a los desarrolladores que almacenen las credenciales de inicio de sesión de la aplicación en el llavero cifrado de iOS. Cuando elimina una aplicación de su teléfono, no elimina los registros relacionados del llavero.

Los llaveros son contenedores de almacenamiento seguros, lo que significa que cuando el llavero está bloqueado, nadie puede acceder a su contenido protegido. En OS X, los usuarios pueden desbloquear un llavero, proporcionando así acceso a aplicaciones confiables al contenido, ingresando una única contraseña maestra. En iOS, cada aplicación siempre tiene acceso a sus propios elementos de llavero; nunca se le pide al usuario que desbloquee el llavero. Mientras que en OS X cualquier aplicación puede acceder a cualquier elemento del llavero siempre que el usuario dé permiso, en iOS una aplicación solo puede acceder a sus propios elementos del llavero.

https://developer.apple.com/library/ios/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html

Este parece ser el mecanismo más probable, pero si este es el mecanismo que utiliza Google (o cualquier aplicación), parece increíblemente inseguro y una grave violación de la privacidad. Obtuve acceso al inicio de sesión de Google de otra persona simplemente instalando una aplicación de Google cuando no existían otras aplicaciones de Google en el dispositivo. Parece que hay una manera en que las aplicaciones recién instaladas deberían limpiarse: stackoverflow.com/questions/4747404/… pero Hangouts no hizo esto. Tampoco parece haber una forma de que un usuario elimine elementos que no sean del llavero de Safari.
Es un gran problema de seguridad/privacidad de Apple que los elementos del llavero no se borran cuando se elimina una aplicación (o, en el peor de los casos, cuando se elimina la última de las aplicaciones de un proveedor). También es un problema de Apple que no hay una manera fácil para que los usuarios eliminen elementos de llavero individuales (que no sean de Safari). Y es un problema de seguridad/privacidad de Google que permiten que un inicio de sesión persista durante la eliminación de la aplicación (incluida la eliminación de todas las aplicaciones de Google).
No estoy de acuerdo en que este sea un gran problema de seguridad/privacidad. Si alguien le dio su dispositivo y estaba preocupado por sus datos, debería haberlo borrado primero. Nunca le daría un dispositivo a alguien que aún tenga datos. No existe un mecanismo para que una aplicación elimine los elementos de su llavero, por lo que tampoco puede culpar a Google aquí. Sin embargo, estaría de acuerdo en que sería bueno si Apple nos diera una forma de editar nuestro llavero, similar a la forma en que puede ingresar a la configuración de Safari en un dispositivo iOS y editar las credenciales guardadas.
Sí, si quisiera deshacerme de un dispositivo, lo borraría, aunque estoy seguro de que muchas personas se olvidan o no saben cómo hacerlo. Pero creo que este es un comportamiento muy contrario a la intuición. Es común compartir un iPad entre familiares y/o amigos, pero eso no debería implicar inicios de sesión activos persistentes en aplicaciones eliminadas.
Otro caso de uso es eliminar la aplicación (o incluso todas las aplicaciones en el grupo de aplicaciones), pero luego querer volver a instalar una aplicación con una nueva identidad no vinculada a la anterior. Si los datos antiguos se restauran desde la copia de seguridad, esto se vuelve imposible.

Probablemente use iCloud como método, posiblemente el iCloud Key-Value Store .

En cuanto a ese almacenamiento va...

El espacio total disponible en el almacenamiento de clave-valor de iCloud de su aplicación es de 1 MB por usuario. El número máximo de claves que puede especificar es 1024 y el límite de tamaño para cada valor asociado con una clave es 1 MB. Por ejemplo, si almacena un solo valor grande de exactamente 1 MB para una sola clave, eso consume por completo su cuota para un usuario determinado de su aplicación. Si almacena 1 KB de datos para cada clave, puede usar 1000 pares clave-valor. La longitud máxima de una cadena de clave es de 64 bytes utilizando la codificación UTF8. El tamaño de los datos de sus cadenas de clave acumuladas no cuenta en su cuota total de 1 MB para el almacenamiento de clave-valor de iCloud; más bien, sus cadenas de clave (que consumen como máximo 64 KB) cuentan contra la asignación total de iCloud de un usuario.

(Fuente: Lectura conceptual del desarrollador de Apple para los límites de datos del almacenamiento de valores clave de iCloud, consulte el enlace anterior)

En resumen, los desarrolladores pueden acceder a los datos a través de los pares KV de iCloud a través de NSUbiquitousKeyValueStore, almacenar objetos en un NSDictionary(hasta 64 K por elemento, hasta 1024 claves y el tamaño total debe ser inferior a 1 MB) y recuperarlos más tarde.


Editar: el almacenamiento de valor clave de iCloud no es tan seguro como los llaveros. Google podría usar llaveros, pero también podría almacenar datos encriptados en la tienda Key-Value, considerando que iCloud tiene problemas de seguridad. ¿Tal vez usar el nombre del dispositivo como una forma de descifrar?

Las aplicaciones de Google no tenían permisos para iCloud, por lo que era más probable que fueran Llavero.
@pseudon KVS no necesita permiso.
Posible entonces. Esto también sería un comportamiento contrario a la intuición para un usuario, que nunca esperaría que una aplicación pudiera almacenar un inicio de sesión activo de forma persistente en su iCloud, especialmente para una aplicación eliminada. ¿Puede una aplicación usar iCloud KV Store si iCloud no está registrado o no está en uso en el dispositivo?
@pseudon no que yo sepa.

... en iOS, una aplicación solo puede acceder a sus propios elementos de llavero

Los proveedores pueden compartir datos entre sus aplicaciones, utilizando el llavero, siempre que utilicen un grupo de llaveros , definido en los derechos de su paquete de aplicaciones; "es propio" significa proveedor, no aplicación.

Como han señalado otros, es posible que las entradas del llavero no se limpien implícitamente.

Dado que este alcance más amplio de este tipo de 'seguimiento' se limita a un solo proveedor con aplicaciones instaladas, esto reduce significativamente el área de superficie de riesgo de seguridad (en comparación con el uso compartido de UUID o UIPasteboard, ambos eliminados/cerrados).

Es importante señalar que los productos de Apple actualmente están diseñados para "usuarios únicos"; Apple aún no ofrece la partición de usuarios (por ejemplo, cualquier huella digital registrada desbloquea todo el dispositivo, por lo que si tiene un amigo/hijo con una huella digital registrada, obtienen exactamente el mismo acceso que usted).

Agregando a las respuestas de DDPWNAGE y Alistair (ya que no tengo suficiente representante para comentar) pero especificando cómo todas las aplicaciones de Google pueden acceder exactamente a una entrada de llavero.