android:exported
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
Catégorie OWASP : MASVS-PLATFORM : interaction avec la plate-forme
Présentation
L'attribut android:exported
indique si un composant (activité, service, broadcast receiver, etc.) peut être lancé par des composants d'autres applications :
- Si la valeur est
true
, n'importe quelle application peut accéder à l'activité et la lancer avec le nom exact de la classe.
- Si la valeur est
false
, seuls les composants de la même application, les applications ayant le même ID utilisateur ou les composants système privilégiés peuvent lancer l'activité.
La logique sur laquelle repose la valeur par défaut de cet attribut a changé au fil du temps et était différente selon les types de composants et les versions d'Android. Par exemple, sur un niveau d'API 16 (Android 4.1.1) ou version inférieure, la valeur pour les éléments <provider>
est définie sur true
par défaut. Si vous ne définissez pas cet attribut explicitement, vous risquez d'avoir des valeurs par défaut différentes entre certains appareils.
Impact
Si la valeur par défaut est différente, vous risquez d'exposer accidentellement des composants d'application interne. Voici quelques exemples de conséquences possibles :
Attaques par déni de service :
d'autres applications accèdent de manière inappropriée aux composants internes pour modifier les fonctionnalités internes de votre application.
Fuite de données sensibles :
exécution du code dans le contexte de l'application vulnérable.
Stratégies d'atténuation
Définissez toujours explicitement l'attribut android:exported
. Cela ne laisse pas de place à l'interprétation et vous indiquez ainsi clairement votre intention concernant la visibilité d'un composant.
Recommandations personnalisées
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2023/12/26 (UTC).
[null,null,["Dernière mise à jour le 2023/12/26 (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)"]]