Uso no seguro de vínculos directos

Categoría de OWASP: MASVS-PLATFORM: Interacción con la plataforma

Descripción general

Los riesgos de seguridad asociados con los vínculos directos provienen de su capacidad principal de permitir una navegación y una interacción fluidas dentro de las aplicaciones para dispositivos móviles. Las vulnerabilidades de los vínculos directos surgen de las debilidades en su implementación o manejo. Actores maliciosos pueden aprovechar estas fallas para obtener acceso a datos o funciones con privilegios, lo que podría generar violaciones de la seguridad de los datos, incumplimientos de la privacidad y acciones no autorizadas. Los atacantes pueden aprovechar estas vulnerabilidades a través de varias técnicas, como el secuestro de vínculos directos y los ataques de validación de datos.

Impacto

La falta de un mecanismo de validación de vínculos directos adecuado o el uso no seguro de vínculos directos pueden ayudar a los usuarios maliciosos a realizar ataques, como la omisión de la validación del host, la secuencia de comandos entre apps y la ejecución remota de código dentro del contexto de permisos de la aplicación vulnerable. Según la naturaleza de la aplicación, esto puede generar acceso no autorizado a datos o funciones sensibles.

De forma predeterminada, Android permite que varias apps registren filtros de intents para el mismo URI de vínculo directo. Para evitar que las apps maliciosas intercepten los vínculos directos destinados a tu app, implementa el atributo android:autoVerify en intent-filter dentro del AndroidManifest de la aplicación. Esto permite a los usuarios seleccionar su app preferida para controlar los vínculos directos, lo que garantiza el funcionamiento previsto y evita que las aplicaciones maliciosas los interpreten automáticamente.

Android 12 presentó un control más estricto de intents web para mejorar la seguridad. Ahora, las apps deben verificarse para controlar vínculos de dominios específicos, ya sea a través de Android App Links o de la selección del usuario en la configuración del sistema. Esto evita que las apps usurpen vínculos que no deberían controlar.

Para habilitar la verificación de control de vínculos para tu app, agrega filtros de intents que coincidan con el siguiente formato (este ejemplo se toma de la documentación de Cómo verificar Android App Links):

  <!-- Make sure you explicitly set android:autoVerify to "true". -->
  <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
  
      <!-- If a user clicks on a shared link that uses the "http" scheme, your
           app should be able to delegate that traffic to "https". -->
      <data android:scheme="http" />
      <data android:scheme="https" />
  
      <!-- Include one or more domains that should be verified. -->
      <data android:host="..." />
  </intent-filter>

Los vínculos directos pueden incluir parámetros adicionales que se entregan al intent de destino, por ejemplo, para realizar más acciones. La base del manejo seguro de vínculos profundos es una validación de datos estricta. Los desarrolladores deben validar y limpiar de forma minuciosa todos los datos entrantes de los vínculos directos para evitar que se inyecten valores o códigos maliciosos en la aplicación legítima. Para implementar esto, verifica el valor de cualquier parámetro de vínculo directo en una lista de entidades permitidas predefinida de valores esperados.

Las apps deben verificar otros estados internos relevantes, como el estado de autenticación o autorización, antes de exponer información sensible. Un ejemplo podría ser una recompensa por completar un nivel de un juego. En este caso, conviene validar la condición previa de completar el nivel y redireccionar a la pantalla principal si no es así.

Recursos