Cette question vise à comprendre les risques de sécurité liés à la mise en œuvre d'oauth sur une plateforme mobile telle qu'Android. L'hypothèse est que nous avons une application Android dont le code contient la clé/le secret du consommateur.
Dans l'hypothèse où le secret d'un consommateur a été compromis et qu'un pirate informatique a mis la main dessus, quelles en sont les conséquences ?
Hypothèses compromises sur le secret du consommateur
Ai-je raison d'affirmer qu'un secret de consommateur compromis n'a aucun effet sur la sécurité de l'utilisateur, ni sur les données stockées chez le fournisseur compatible avec OAuth avec lequel l'utilisateur a interagi ? Les données elles-mêmes ne sont pas compromises et ne peuvent pas être récupérées par le pirate.
Le pirate devrait mettre la main sur un jeton d'accès d'utilisateur valide, ce qui est beaucoup plus difficile à obtenir.
Que pourrait faire un pirate informatique avec un secret de consommation compromis ?
Ai-je raison d'affirmer ce qui suit :
- Le pirate peut créer/publier un qui imite mon application.
- Le pirate peut attirer des utilisateurs qui iront par le flux OAuth, en récupérant un jeton d'accès via la danse OAuth du pirate (en utilisant la clé/le secret du consommateur compromis).
- L'utilisateur peut penser qu'il a affaire à mon application, car il verra nom familier (clé de consommateur) lors de la procédure d'autorisation.
- Lorsqu'un consommateur émet une demande via le pirate, celui-ci peut facilement intercepter le jeton d'accès et combiné au secret du consommateur, il peut signer des requêtes en mon nom pour accéder à mes ressources.
Impact sur l'utilisateur final
Dans l'hypothèse où
- un pirate informatique a mis en place une application / en utilisant mon secret de consommation
- un de mes utilisateurs s'est fait piéger en autorisant l'accès à cette application / ce site
Les situations suivantes peuvent se produire :
- l'utilisateur final peut s'apercevoir qu'il se passe quelque chose de louche et informer le fournisseur de services (ex : Google) de l'existence de l'application malveillante
- le fournisseur de services peut alors révoquer la clé/le secret du consommateur
Impact du consommateur OAuth (mon application) :
Mon application (contenant le secret du consommateur) devrait être mise à jour, car sinon tous mes clients ne pourraient plus autoriser mon application à effectuer des demandes en leur nom (puisque mon secret du consommateur ne serait plus valide).
Délégation de tout le trafic OAuth
Bien qu'il soit possible de déléguer une grande partie des interactions OAuth via un serveur web intermédiaire (faire la danse OAuth et envoyer le jeton d'accès à l'utilisateur), il faudrait également déléguer toutes les interactions de service, car la clé/secret du consommateur est nécessaire pour signer chaque requête. Est-ce la seule façon de garder la clé/le secret du consommateur en dehors de l'application mobile, et de la stocker dans un endroit plus sûr sur le serveur web intermédiaire ?
Alternatives
Existe-t-il des alternatives à cette procuration ? Est-il possible de stocker le secret du consommateur sur le serveur web intermédiaire et de disposer d'un mécanisme permettant à l'application Android (publiée sur le marché et correctement signée) d'adresser une demande sécurisée au serveur web intermédiaire pour récupérer le secret du consommateur et le stocker en interne dans l'application ? Est-il possible de mettre en place un mécanisme permettant au serveur web intermédiaire de "savoir" qu'il s'agit d'une application Android officielle qui demande à récupérer le secret du consommateur, et que le serveur web intermédiaire ne transmettra le secret du consommateur qu'à cette application Android en particulier ?