android:exported

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

Descripción general

El atributo android:exported establece si los componentes de otras aplicaciones pueden iniciar un componente (actividad, servicio, receptor de emisión, etcétera):

  • Si es true, cualquier app puede acceder a la actividad e iniciarla por su nombre exacto de clase.
  • Si es false, solo los componentes de la misma aplicación, las aplicaciones con el mismo ID de usuario o los componentes del sistema con privilegios pueden iniciar la actividad.

La lógica detrás del valor predeterminado de este atributo cambió con el tiempo y era diferente según los tipos de componentes y las versiones de Android. Por ejemplo, en el nivel de API 16 (Android 4.1.1) o versiones anteriores, el valor de <provider> para los elementos se establece en true de forma predeterminada. No configurar de forma explícita este atributo conlleva el riesgo de que haya valores predeterminados diferentes entre algunos dispositivos.

Impacto

La situación con valores predeterminados diferentes implica que podrías exponer accidentalmente componentes internos de la aplicación. Algunos ejemplos de las consecuencias podrían ser los siguientes:

Ataques de denegación del servicio. Otras apps que acceden de forma inapropiada a componentes internos para modificar su funcionalidad interna. Filtración de datos sensibles. Ejecución de código en el contexto de la aplicación vulnerable.

Mitigaciones

Siempre configura de forma explícita el atributo android:exported. Esto no dejará lugar para la interpretación y claramente indicará tu intención con respecto a la visibilidad de un componente.