API de Facebook: Secreto de la aplicación - posible mal uso

17

Recientemente descubrí que con una simple y rápida búsqueda en el código compilado de una de nuestras aplicaciones, puede obtener tanto Id. de aplicación (Clave API) como Secreto de aplicación para la API de Facebook

Supongo que deberíamos mantener Secreto de aplicación (obviamente de la palabra secreto ), para que nadie pueda acceder a él, pero ¿cuál es la principal amenaza relacionada con la fuga? de estos articulos?

Si el malvado obtiene estas entradas, ¿cuál es el peor uso indebido posible que podría realizar ?

    
pregunta Marek Sebera 10.09.2012 - 18:00
fuente

2 respuestas

16

Estás en lo correcto. La aplicación secreta debe ser secreta y no debe obtenerse fácilmente mediante la ingeniería inversa de su código de cliente.
Facebook usa OAuth, por lo que todo lo que digo aquí también se aplica a todas las aplicaciones que usan OAuth para autorizar y autenticar. El secreto de la aplicación autentica a tu cliente en facebook. Al igual que un nombre de usuario / contraseña autentica a un usuario en un servicio web, los clientes móviles / de escritorio utilizan la clave secreta de la aplicación como credencial para que el servidor valide que es la aplicación de cliente legítimo "real".

  

Si el hombre malvado obtiene estas entradas, ¿cuál es el peor uso posible que podría realizar?

Podría crear un cliente falso que se parece a su cliente / aplicación y lanzarlo. Los usuarios confiados lo descargarán y lo usarán para conectarse a Facebook. La aplicación falsa aún no obtiene las credenciales de los usuarios (lo cual es bueno) porque la autenticación de las credenciales de los usuarios se realiza en una página de Facebook. Sin embargo, el usuario termina autorizando esta aplicación falsa en facebook. Facebook lo hace feliz porque cree que cualquiera que presente ese secreto eres tú. Como resultado, la aplicación falsa obtiene el 'token de acceso' para el usuario y puede comenzar a publicar comentarios y hacer otras cosas que su aplicación real no pretende hacer.
Así que en resumen, es su valor de reputación lo que está en juego aquí. Otros clientes pueden suplantar como su cliente a Facebook.

Este es un estudio de caso completo de uno de dichos clientes de Twitter que almacenó la clave del consumidor (su equivalente al secreto de la aplicación) en texto sin formato.

Estoy citando una línea de ese blog:

  

Es muy importante entender que una clave secreta de consumidor comprometida no pone en peligro la seguridad de los usuarios de la aplicación. La clave no se puede usar para obtener acceso a las cuentas de otros usuarios, ya que para acceder a una cuenta individual se requiere un token de acceso que las instancias individuales de la aplicación cliente obtienen automáticamente en nombre del usuario durante el proceso de autorización.

Ahora, ¿cómo proteges el secreto del cliente?
Si se trata de un cliente independiente (como una aplicación móvil), no tiene más remedio que integrarlo de alguna forma. Desafortunadamente para un experto en ingeniería inversa, es solo una cuestión de tiempo antes de que pueda ser descodificado. Después de todo, su en algún lugar allí (de alguna forma) en el cliente . Si el cliente puede volver a calcularlo / ensamblarlo, también lo puede hacer un inversor.

Editar: si la arquitectura de su aplicación lo permite, su servidor puede realizar los pasos de OAuth en nombre del cliente / aplicación móvil. De esta manera, la clave reside en el servidor, realiza todos los pasos de OAuth y pasa el símbolo de acceso a su cliente para usarla para acceder a los datos de Facebook del usuario. En este punto, está haciendo algo muy similar al navegador - servidor web - interacción de facebook descrito aquí . Simplemente reemplace el 'Navegador del usuario' con su 'Aplicación cliente / móvil' y 'Su aplicación' con 'Su servidor' en esa imagen.

Si se trata de algún tipo de aplicación web, esto se puede lograr fácilmente manteniendo la clave solo en el lado del servidor y utilizando flujo del lado del servidor para evitar que se filtre el secreto de la aplicación.

    
respondido por el CodeExpress 10.09.2012 - 21:47
fuente
3

En el caso de Facebook, no conozco otros sitios habilitados para OAuth, existe la posibilidad de usar el token de acceso de aplicación anónimo. Es un token creado al concatenar appId con appSecret , por ejemplo 504216299598238|59d273f6dddb0a2f72e727132f4a74a4 .

Uno podría obtener este token de acceso desde el origen de la aplicación móvil y realizar solicitudes autenticadas a Graph API. Luego, Facebook proporciona información sobre los usuarios que autorizaron esta aplicación antes incluso sin el token de acceso del usuario .

El atacante puede obtener acceso a los datos confidenciales del usuario (correo electrónico, por ejemplo) de esta manera. Aquí hay una prueba de concepto:

Este usuario no ha autorizado la aplicación:

https://graph.facebook.com/100004668630549?fields=email&access_token=504216299598238|59d273f6dddb0a2f72e727132f4a74a4

Y este hizo:

https://graph.facebook.com/100004619894646?fields=email&access_token=504216299598238|59d273f6dddb0a2f72e727132f4a74a4

El campo de correo electrónico no está visible. Resultado: un atacante puede obtener información confidencial sobre el usuario atacado sin la interacción de ese usuario .

    
respondido por el Maciej Łebkowski 06.11.2012 - 15:31
fuente

Lea otras preguntas en las etiquetas