android:exported
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
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
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2023-12-14 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2023-12-14 (UTC)"],[],[],null,["# android:exported\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-PLATFORM: Platform Interaction](https://mas.owasp.org/MASVS/09-MASVS-PLATFORM)\n\nOverview\n--------\n\nThe `android:exported` [attribute](/guide/topics/manifest/activity-element#exported) sets whether a component (activity, service, broadcast receiver, etc.) can be launched by components of other applications:\n\n- If `true`, any app can access the activity and launch it by its exact class name.\n- If `false`, only components of the same application, applications with the same user ID, or privileged system components can launch the activity.\n\nThe logic behind the default value of this attribute changed over time and was different depending on the component types and Android versions. For example, on API level 16 (Android 4.1.1) or lower the value for `\u003cprovider\u003e` elements is set to `true` by default. Not setting this attribute explicitly carries the risk of having different default values between some devices.\n\nImpact\n------\n\nThe situation with different default values means you could accidentally expose internal application components. A few examples of the consequences could be the following:\n\nDenial of service attacks.\nOther apps inappropriately accessing internal components to modify your app's internal functionality.\nLeaking of sensitive data.\nCode execution in the context of the vulnerable application.\n\nMitigations\n-----------\n\nAlways explicitly set the `android:exported` attribute. This will leave no room for interpretation and clearly signal your intention with regard to a component's visibility.\n\nRecommended for you\n-------------------\n\n- Note: link text is displayed when JavaScript is off\n- [# Key management {:#key-management}](/topic/security/data)\n- [Run embedded DEX code directly from APK](/topic/security/dex)\n- [Tapjacking](/topic/security/risks/tapjacking)"]]