This page looks best with JavaScript enabled

Pentesting Mobile 101: Introducción a Deep Links

 ·   ·   4 min read  ·  Autor - Gabdotsh

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:

  1. Abre la app preferida del usuario que puede manejar el URI, si se designa uno.
  2. Abre la única app disponible que puede manejar el URI.
  3. Permite al usuario seleccionar una app desde un diálogo.

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
    <activity  
         android:name="com.example.android.GizmosActivity"  
         android:label="@string/title\_gizmos" >  
         <intent-filter android:label="@string/filter\_view\_http\_gizmos">  
             <action android:name="android.intent.action.VIEW" />  
             <category android:name="android.intent.category.DEFAULT" />  
             <category android:name="android.intent.category.BROWSABLE" />  
             <!—Acepta uris que comiencen con "http://www.example.com/gizmos” -->  
             <data android:scheme="http"  
                   android:host="www.example.com"  
                   android:pathPrefix="/gizmos" />  
             <!-- note that the leading "/" is required for pathPrefix-->  
         </intent-filter>  
         <intent-filter android:label="@string/filter\_view\_example\_gizmos">  
             <action android:name="android.intent.action.VIEW" />  
             <category android:name="android.intent.category.DEFAULT" />  
             <category android:name="android.intent.category.BROWSABLE" />  
  <!—Acepta URIs que comiencen con "example://gizmos” -->  
             <data android:scheme="example"  
                   android:host="gizmos" />  
         </intent-filter>  
     </activity> 

Referencia: https://developer.android.com/training/app-links/deep-linking?hl=es

Vamos a generar un deeplink para ejemplificar:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
     <activity  
         android:name="com.SN.SniferL4bsActivity"  
         <intent-filter>  
             <action android:name="android.intent.action.VIEW" />  
             <category android:name="android.intent.category.DEFAULT" />  
             <category android:name="android.intent.category.BROWSABLE" />  
             <data android:scheme=“sn"  
                   android:host=“sniferl4bs.com"  
                   android:pathPrefix="/accounts" />  
         </intent-filter>  
     </activity> 

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

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! 

Happy hacking (:

@gabdotsh
Jorge Mac Tier

Share on
Support the author with

Avatar
WRITTEN BY
Gabdotsh
Un minion amarillo que anda por ahí.