Catégorie OWASP : MASVS-PLATFORM : interaction avec la plate-forme
Présentation
Les risques de sécurité associés aux liens profonds découlent de leur capacité de base à permettre une navigation et une interaction fluides au sein des applications mobiles. Les failles liées aux liens profonds découlent de faiblesses dans l'implémentation ou la gestion des liens profonds. Des acteurs malveillants peuvent exploiter ces failles pour accéder à des fonctions ou à des données privilégiées, ce qui peut entraîner des violations de la confidentialité, des actions non autorisées et des violations de données. Les pirates informatiques peuvent exploiter ces failles grâce à diverses techniques, telles que le piratage de liens profonds et les attaques de validation des données.
Impact
L'absence de mécanisme de validation des liens profonds approprié, ou leur utilisation non sécurisée, peuvent aider les utilisateurs malveillants à effectuer des attaques telles que le contournement de la validation d'hôte, les scripts interapplications et l'exécution de code à distance dans le contexte des autorisations de l'application vulnérable. Selon la nature de l'application, cela peut entraîner un accès non autorisé à des données ou fonctions sensibles.
Stratégies d'atténuation
Empêcher le piratage de liens profonds
Par conception, Android permet à plusieurs applications d'enregistrer des filtres d'intent pour le même URI de lien profond. Pour empêcher les applications malveillantes d'intercepter les liens profonds destinés à votre application, implémentez l'attribut android:autoVerify
dans intent-filter
dans le fichier AndroidManifest
de l'application. Cela permet aux utilisateurs de sélectionner l'application de leur choix pour gérer les liens profonds, ce qui garantit le fonctionnement prévu et empêche les applications malveillantes de les interpréter automatiquement.
Android 12 a introduit une gestion plus stricte des intents Web pour améliorer la sécurité. Les applications doivent désormais être validées pour gérer les liens provenant de domaines spécifiques, soit via Android App Links, soit via la sélection de l'utilisateur dans les paramètres système. Cela empêche les applications de pirater des liens qu'elles ne devraient pas gérer.
Pour activer la validation de la gestion des liens pour votre application, ajoutez des filtres d'intent correspondant au format suivant (cet exemple est tiré de la documentation Valider les liens vers les applications Android):
<!-- Make sure you explicitly set android:autoVerify to "true". -->
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- If a user clicks on a shared link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="..." />
</intent-filter>
Implémenter une validation des données robuste
Les liens profonds peuvent inclure des paramètres supplémentaires qui sont diffusés à l'intent cible, par exemple pour effectuer d'autres actions. La gestion sécurisée des liens profonds est basée sur une validation stricte des données. Toutes les données entrantes provenant de liens profonds doivent être minutieusement validées et nettoyées par les développeurs pour éviter l'injection de code ou de valeurs malveillants dans l'application légitime. Pour ce faire, vérifiez la valeur de chaque paramètre de lien profond par rapport à une liste d'autorisation prédéfinie de valeurs attendues.
Les applications doivent vérifier d'autres états internes pertinents, tels que l'état d'authentification ou l'autorisation, avant de divulguer des informations sensibles. Par exemple, une récompense pour avoir terminé un niveau d'un jeu. Dans ce cas, il est utile de valider la condition préalable permettant d'avoir terminé le niveau, puis de rediriger l'utilisateur vers l'écran principal si ce n'est pas le cas.
Ressources
- Vérifier les Android App Links
- Gérer les liens vers des applications Android
- Résolution d'intent Web
- Piratage de compte interceptant le lien magique pour l'application Arrive
- Exploitation des liens profonds et des WebViews (partie I)
- Exploitation des liens profonds et des WebViews, partie II
- Suggestion récente d'un problème de lien profond dans Jetpack Navigation