Los Deep Links a grandes rasgos son utilizados por las aplicaciones móviles para permitir a los usuarios explorar otras áreas de la aplicación y/o navegar por lugares específicos, los mismos aplican tanto para aplicaciones iOS como para aplicaciones Android.
Entonces:
- Tienen la función de dirigir al usuario a una página de la propia app o linkear distintas aplicaciones como ser dirigir a un usuario dentro de su aplicación a la página de la app dentro de la aplicación de Facebook o en Instagram.
- Pueden tener schemas custom como por ejemplo: sniferlabs://.
- Se declaran en el archivo AndroidManifest.xml
Una vez que el deeplink es presionado este busca realizar las siguientes acciones de manera secuencial:
- Abre la app preferida del usuario que puede manejar el URI, si se designa uno.
- Abre la única app disponible que puede manejar el URI.
- Permite al usuario seleccionar una app desde un diálogo.
Como se registran los Deeplinks
Para registrar un deeplink necesitamos ciertos elementos y valores dentro de nuestro manifest.xml:
- <ACTION>: la cual va a ser un action.view para que se pueda acceder al filtro de intents desde la busqueda de google.
- <CATEGORY>: DEFAULT esto es para comunicarle a la aplicacion que puede responder a intents implícitos. Sin ella, solo se puede iniciar la actividad si el intent especifica el nombre del componente de la app.
- <CATEGORY>: BROWSABLE la cual es necesaria para permitir que se pueda acceder al filtro de intents desde un navegador web. Sin ella, cuando se hace clic en un vínculo dentro de un navegador, no se redirecciona a tu aplicación.
El portal de desarrolladores de google nos indica que los deep links se registran del siguiente modo:
|
|
Referencia: https://developer.android.com/training/app-links/deep-linking?hl=es
Vamos a generar un deeplink para ejemplificar:
|
|
La formula para llamarlo seria la siguiente:
SCHEME://HOST/PATH
Llevándolo a la práctica el deeplink realizado por nosotros se llamaría de la siguiente manera:
sn://sniferl4bs.com/accounts
Hacking deep links
Primero necesitamos entender qué tipo de ataques o información podemos conseguir a través de los deep links. Un atacante puede crear una aplicación que dispara una intención y explotar este esquema de URL personalizado (vínculo profundo) para realizar ataques como:
- Exposición de información sensible
- Session hijacking
- Account takeovers
- Open redirect
- LFI
- XSS
Esto podría ocurrir porque los desarrolladores usan deep links para pasar información catalogada como sensible a través de una URL web a una aplicación.
Ya entendemos que es un deeplink, para que se utiliza, como son registrados, como llamarlos, que tipo de ataques podemos realizar ahora bien para leer el androidmanifest debemos desempaquetar nuestro apk usando la herramienta APKTOOL.
La herramienta es bastante sencilla de utilizar y a grandes rasgos podemos utilizar los siguientes comandos:
- apktool d test.apk (para desempaquetar)
- apktool b test.apk (para empaquetar)
Nosotros lo que vamos a querer hacer es desempaquetar el apk para poder leer el androidManifest.xml por lo tanto usaremos el comando número 1 el cual nos va a generar una carpeta con toda la estructura interna de ese apk.
Lo demás va a quedar a la imaginación e inventiva de cada uno :), les dejo algunos casos reales y nos vemos el próximo post para explotar un deep link vulnerable!
- Periscope android app deeplink leads to CSRF in follow action
- Account takeover intercepting magic link for Arrive app
- [Grab Android/iOS] Insecure deeplink leads to sensitive information disclosure
Happy hacking (:
@gabdotsh
Jorge Mac Tier