
Asistente de evaluación de Android deeplink, Intent y WebView bridge para hacking ético
Asistente de evaluación de Deeplinks, Intents y puentes WebView para Android
apk-interceptor es un APK de prueba portátil para Android, destinado a evaluaciones de seguridad de aplicaciones autorizadas. Ayuda a los ingenieros de seguridad a verificar cómo una aplicación Android maneja puntos de entrada externos como esquemas URI personalizados, deeplinks, Activities exportadas y puentes JavaScript de WebView.
La herramienta está intencionadamente limitada:
android.permission.INTERNETcontent://Durante las evaluaciones de seguridad de aplicaciones Android, muchos hallazgos del análisis estático aún necesitan una pequeña prueba de concepto en el dispositivo antes de poder confirmarse: registrar un esquema URI personalizado, enviar un Intent explícito, servir un payload local content:// o comprobar si JavaScript puede alcanzar un puente WebView.
Crear una nueva aplicación de prueba desechable para cada caso es repetitivo y propenso a errores. Pequeñas diferencias en las entradas del manifiesto, autoridades, concesiones de URI, nombres de paquete o construcción de Intents pueden ralentizar la verificación y dificultar la reproducibilidad de los resultados.
apk-interceptor fue creado para hacer repetible ese paso de confirmación. En lugar de escribir un nuevo APK PoC para cada evaluación, compilas esta herramienta con el esquema autorizado o el ID de aplicación que necesitas, ejecutas la prueba en el dispositivo y mantienes el flujo de trabajo limitado por diseño: sin permiso INTERNET, sin transmisión de datos externa, sin ejecución de shell y sin dependencia de root.
apk-interceptor es útil para estas tareas de evaluación:
| Escenario | Módulo | Qué Ayuda a Verificar |
|---|---|---|
| Secuestro de esquema URI personalizado | Interceptor | Si otra aplicación puede registrar el mismo esquema personalizado y recibir enlaces |
| Manejo de parámetros de Deeplink | Sender | Si la aplicación evaluada acepta parámetros de consulta/ruta no seguros |
| Exposición de Activity exportada | Sender | Si una Activity exportada puede ser lanzada directamente por otra aplicación |
Exposición de puente WebView vía content:// | Payload + Sender | Si un payload HTML local puede alcanzar un puente JavaScript de WebView |
| Verificación de sintaxis de payload local | Payload | Si tu payload HTML/JS se ejecuta en el WebView de autoevaluación |
Recorridos detallados de vulnerabilidades:
content://La aplicación mantiene un registro de evaluación en memoria para los Intents enviados, deeplinks recibidos, devoluciones de llamada del puente, resultados de JavaScript y errores. Los registros desaparecen cuando el proceso de la aplicación es eliminado. Como los registros no se persisten, captura evidencia con capturas de pantalla o grabación de pantalla mientras trabajas.
apk-interceptor es una herramienta de confirmación, no un framework de descubrimiento o explotación. Asume que ya sabes qué probar (esquema, clase Activity, nombre del puente) a partir del análisis estático, y te ofrece una forma segura y en el dispositivo de verificar la alcanzabilidad y capturar evidencia. Está diseñada para instalarse en un dispositivo de evaluación e incluso compartirse con un cliente, por lo que no incluye permiso INTERNET, ejecución de shell, exfiltración de datos ni requisito de root.
Dónde se sitúa junto a las herramientas habituales de Android:
| Herramienta | Rol | En qué se diferencia apk-interceptor |
|---|---|---|
| jadx / MobSF / QARK / Semgrep | Encontrar puntos de entrada vulnerables (estático) | apk-interceptor no escanea ni decompila; confirma un hallazgo que ya tienes |
deep-C / NSdeepLink / adb am start | Enumerar y enviar deeplinks | apk-interceptor también puede enviar, pero su diferenciador es recibir un esquema secuestrado y mostrar la URI exacta y los parámetros |
| drozer | Framework de ataque general en el dispositivo (agente + a menudo root) | apk-interceptor es un único APK ligero con barreras de seguridad deliberadas, un alcance más reducido y una distribución más segura para el cliente |
| Metasploit / Frida | Armar o enganchar (ej. RCE de addJavascriptInterface) | apk-interceptor solo verifica la alcanzabilidad del puente con un payload inofensivo; nunca exfiltra ni ejecuta comandos de shell |
Las dos áreas donde apk-interceptor tiene la ventaja más clara sobre las alternativas:
adb/análisis estático no puede mostrar.content://: un proveedor no exportado de un solo archivo cuyo payload se entrega solo a través de un permiso de lectura de Intent temporal, más un WebView de autoevaluación local para validar primero la sintaxis del payload.apk-interceptor trata enviar e interceptar de manera diferente, y esto es lo más importante que debes entender antes de usarlo:
| Acción | Módulo | ¿Se necesita un esquema personalizado en tiempo de compilación? |
|---|---|---|
| Enviar un Intent o deeplink a otra aplicación | Sender | No, escribe cualquier URI, paquete o Activity en tiempo de ejecución |
| Interceptar (recibir) un deeplink para un esquema personalizado | Interceptor | Sí, el esquema se fija en el APK durante la compilación |
Para enviar un deeplink manipulado a la aplicación evaluada, no necesitas recompilar: usa el modo Implicit Deeplink de la pestaña Sender y escribe cualquier URI.
Para interceptar un deeplink, es decir, hacer que Android enrute un esquema personalizado a apk-interceptor para que puedas observar un posible secuestro de esquema, debes compilar el APK con ese esquema mediante --scheme. El esquema se fija en tiempo de compilación a propósito (una barrera de diseño); apk-interceptor nunca registra esquemas arbitrarios en tiempo de ejecución. Si cambias el esquema que estás evaluando, recompila y reinstala.
adb para instalación en el dispositivo y pruebas opcionales desde línea de comandosCompila el APK con el esquema URI personalizado que estás autorizado a evaluar:
./build-interceptor.sh --scheme <esquema_personalizado_autorizado>
adb install ./out/apk-interceptor-<esquema_personalizado_autorizado>-debug.apk
Indicadores de compilación opcionales:
./build-interceptor.sh \
--scheme <esquema_personalizado_autorizado> \
--app-id <id.de.aplicacion.personalizada> \
--output ./out