android:exported

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.