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.
Recomendaciones para ti
- Nota: El texto del vínculo se muestra cuando JavaScript está desactivado
- # Administración de claves {:#key-management}
- Cómo ejecutar código DEX incorporado directamente desde un APK
- Tapjacking