Les invitations sont désormais des liens
Dans la console Elchi, une invitation passait par une adresse e-mail et faisait confiance à qui la détenait. C'est désormais un lien unique, valable sept jours.
Pour inviter quelqu'un à travailler sur une application dans la console Elchi, il suffisait jusqu'ici d'une adresse. Vous saisissiez l'adresse e-mail d'un collègue ; si un compte existait avec cette adresse, il rejoignait l'application aussitôt, sinon l'invitation attendait que quelqu'un s'inscrive avec cette adresse. Depuis cette version, une invitation est un lien.
Ce qui n'allait pas avec l'adresse
Jusqu'à cette version, EAuth ne vérifiait jamais qu'une adresse appartenait bien à la personne qui la saisissait. N'importe qui pouvait créer un compte avec colleague@yourcompany.ch avant votre collègue. Si vous invitiez ensuite cette adresse, la place revenait au titulaire du compte, avec le rôle que vous aviez choisi, admin compris.
Nous l'avons découvert en relisant notre propre code, pas à la suite d'un incident. Personne hors d'Elchi Studios n'avait de compte au moment où cette version est sortie, donc personne hors de l'entreprise n'a pu être touché. Il fallait tout de même corriger cela avant que quiconque en dépende.
Cette version ferme aussi la faille évidente par un second moyen : EAuth ne donne plus à aucune application, notre console comprise, un compte dont l'adresse n'a pas été confirmée par un lien envoyé à cette adresse. Même ainsi, l'adresse ne serait pas la bonne clé. Une adresse confirmée prouve que quelqu'un lit une boîte mail. Elle ne prouve pas que c'est la personne que vous vouliez : les boîtes mail sont partagées, redirigées, héritées. Une invitation doit aller à la personne que vous avez choisie, pas à quiconque s'avère contrôler une chaîne de caractères.
Comment cela fonctionne maintenant
Quand vous invitez quelqu'un, la console vous donne un lien. Vous le lui envoyez vous-même, par le canal auquel vous faites déjà confiance.
- Le lien n'est affiché qu'une fois. Nous n'en gardons qu'un condensé, comme pour tous les autres identifiants, donc personne ne peut le relire plus tard, nous compris.
- Il fonctionne une seule fois, pendant sept jours.
- L'adresse que vous saisissez n'est qu'un mémo : elle note à qui le lien est destiné. Inviter à nouveau la même adresse remplace le lien, donc un lien parti au mauvais endroit cesse de fonctionner.
- Ouvrir le lien affiche l'invitation et demande confirmation. Rejoindre se fait d'un clic. Les scanners de mails et les aperçus de liens des messageries ouvrent les liens tout seuls, et ils ne doivent pas consommer une invitation destinée à une personne.
- Une personne qui n'est pas connectée se connecte ou crée d'abord un compte, puis rejoint juste après. Un nouveau compte confirme son adresse en cours de route, avec le lien qu'EAuth envoie par mail, puis revient à la console. Si cela prend plus d'une heure, il faut rouvrir le lien d'invitation ; il reste valable pour le reste de ses sept jours.
- Un lien meurt avec l'autorité de celui qui l'a créé. Si l'admin qui a invité quelqu'un est retiré de l'application ou perd le rôle d'admin, ses liens en attente cessent de fonctionner.
- Rejoindre ne change jamais un rôle que quelqu'un a déjà. Un vieux lien ne peut ni promouvoir ni rétrograder un membre en douce.
La règle sur l'autorité est née d'une seconde revue, une fois la première version terminée. Sans elle, un admin sur le point d'être retiré pouvait inviter un de ses comptes de réserve et revenir par ce lien.
Ce que cela coûte
Vous devez envoyer le lien vous-même. Nous ne l'envoyons pas par mail, et c'est voulu : vous savez sur quel canal votre collègue attend un lien, et une invitation de notre part par mail serait un message de plus à imiter pour qui veut hameçonner votre équipe. L'envoyer vous-même, c'est quelques secondes de copier-coller, et la console place un bouton à côté du lien pour cela.
Les invitations créées à l'ancienne, s'il y en avait, ont expiré avec cette version, puisque personne ne détient de lien pour elles.
Un modèle, trois usages
Le même type de lien sert désormais à trois choses : une invitation, la confirmation d'une adresse et la réinitialisation d'un mot de passe. Chacun fait 256 bits aléatoires, n'est stocké que sous forme de condensé et fonctionne une fois, pour une durée limitée : sept jours pour une invitation, un jour pour une confirmation, une heure pour une réinitialisation. Ouvrir un lien de réinitialisation ou une invitation ne le consomme jamais à lui seul ; seul le clic de la personne le fait. La confirmation d'adresse est l'exception, parce que celui qui peut ouvrir le mail envoyé à cette adresse est exactement celui que la confirmation concerne.
Sources
- Forgot Password Cheat Sheet, OWASP, consulté le
Écrit par Samuel Krauss, Founder. Classé sous eauth, console, security.
Traduit de l’anglais. Lire l’original anglais