Broadcast receiver dynamic registration
Enregistrement dynamique de récepteur de diffusion (Broadcast Receiver)
Description
Un ou plusieurs récepteurs de diffusion (broadcast receivers) de l'application sont enregistrés dynamiquement dans le code et ne sont pas protégés par une permission de signature dans le fichier AndroidManifest.xml. Tous les récepteurs enregistrés dynamiquement sont exportés. En utilisant une application malveillante, un attaquant peut diffuser des données arbitraires au récepteur exporté, ce qui peut entraîner l'invocation de différents composants de l'application ou l'exécution de code. Par exemple, de nombreux récepteurs de diffusion sont programmés pour recevoir des messages SMS ou des messages GCM. Pour fonctionner correctement, ces récepteurs doivent toujours être exportés afin de recevoir des données provenant d'autres applications, telles que l'application SMS ou le framework GCM. Pour sécuriser de tels récepteurs, vous devez toujours déclarer les permissions appropriées lors de l'appel à la méthode registerReceiver. Les récepteurs de diffusion représentent un composant potentiellement exploitable qui est souvent utilisé pour démarrer des services, il est donc fortement recommandé de vérifier toutes les données externes qui leur sont transmises. Pour activer la politique la plus restrictive et donc la plus sécurisée, vous devez minimiser le nombre d'intents exportés en utilisant les permissions de signature.
Recommandation
Assurez-vous de n'exporter que les récepteurs de diffusion qui doivent réellement pouvoir être démarrés par des applications tierces ; ou créez une permission avec android:protectionLevel="signature" dans le fichier AndroidManifest.xml et utilisez-la pour tous les récepteurs de diffusion qui ne doivent être démarrés que par vos applications, en définissant exported="false" pour tous les récepteurs de diffusion qui ne doivent en aucun cas être démarrés par des applications tierces.