Google Calendar est une application de l’environnement Google qui permet de gérer son calendrier. Cette application est aujourd’hui utilisée par un grand nombre de particuliers et d’entreprises. Une potentielle usurpation d’identité sur ce type d’environnement peut donc avoir un impact gigantesque. L’usurpation d’une personne à haute responsabilité peut par exemple faire de gros dégâts. Vol d’une grosse somme d’argent, impact sur l’image de l’entreprise, en effet, les risques sont nombreux.
Dans cet article, nous explorerons une manière d’usurper l’identité d’une personne ou d’un groupe Google en utilisant le système de réponse aux invitations de Google Calendar.
Fonctionnalité de réponse à une invitation
Avant de pouvoir aborder comment usurper un utilisateur, il faut comprendre comment fonctionne les invitations depuis Google Calendar.
Lors de la création d’une invitation, un email est envoyé depuis le compte de l’utilisateur ayant créé l’invitation.
Invitation envoyé avec Google calendar
Cette invitation est composée de plusieurs éléments, notamment, le lien d’invitation vers la plateforme de visioconférence Google meet, les personnes invitées dans l’événement mais également des boutons permettant d’accepter ou refuser l’invitation. Concentrons nous sur les boutons.
Boutons de réponse
Les boutons présents dans l’image ci-dessus contiennent plusieurs tokens dissimulés à l’utilisateur qui permettent de créer une réponse.
Cette réponse est par la suite envoyée par email à la personne ayant créé l’invitation et est affichée à l’ensemble des membres de l’invitation depuis Google Calendar.
Résultat de la réponse à une invitation
Vous avez désormais une compréhension du fonctionnement de l’invitation, il est maintenant temps de découvrir comment abuser de cette fonctionnalité.
Usurper la réponse d’un utilisateur
L’étape suivante est de détourner la fonctionnalité de réponse afin d’usurper l’identité d’un utilisateur invité dans l’événement. Dans un premier temps, la récupération du mail d’invitation contenant les tokens (secrets), présent dans les boutons de réponse, est nécessaire afin de pouvoir répondre à une invitation.
Pour cela trois solutions peuvent être suivies :
- Soit l’invitation est partagée par un utilisateur inconscient des risques (Par exemple avec un forward de mail à un collègue malicieux ou par la suite d’une attaque de social engineering)
- Soit vous êtes le créateur de la réunion et avez donc la possibilité d’obtenir une copie de l’invitation dans vos mail envoyés sur Gmail.
- Soit l’invitation est partagée en publique
Quelques invitations sont notamment accessibles depuis l’interface Google Groupes, qui permet de rechercher des infos dans les mails et conversations auxquelles vous avez accès. Il est possible par exemple de trouver des invitations en les recherchant avec certains mots clés comme “Invitation:” ou “Reply for” .
Recherche d’invitation sur Google groups
Les tokens recherchés sont ensuite obtenables en récupérant le lien vers lequel redirigent les trois boutons. Ces boutons redirigent l’utilisateur à l’aide d’un lien contenant différents paramètres dont “eid” étant l’identifiant de la réunion et “tok” étant le token d’identification.
Le lien est de la forme :
Les éléments qui nous intéressent sont eid et tok. Après avoir obtenu ces deux éléments, nous pouvons maintenant débuter la partie exploitation.
Cette partie se divise en trois groupes distincts en fonction de la cible :
- La cible est un utilisateur externe
- La cible est un groupe Google
- La cible est un utilisateur Google
Si l’invitation cible un utilisateur externe :
Dans le cas d’un utilisateur externe à l’environnement Google, il suffit de prendre le lien lié au bouton “More options” tel quel et de l’entrer dans un navigateur sans compte Google connecté. Voici ci-dessous un exemple sur notre utilisateur “camille.lorances@outlook.fr” qui est sur l’environnement outlook et qui n’est donc pas lié à un compte Google.
Interface de réponse
L’attaquant qui récupère et utilise le lien est redirigé vers une interface où il peut créer une réponse, ajouter des utilisateurs supplémentaires ou encore indiquer si la cible participe ou non à la réunion.
Suite à l’envoi de la réponse, le créateur de l’invitation recevra un mail de confirmation et la réponse sera visible depuis Google Calendar pour tous les membres de la réunion.
Résultat de la réponse
Si l’invitation cible un groupe Google :
Lorsqu’une invitation est transmise à destination d’un groupe, plusieurs cas de figure sont possibles :
- La personne qui crée l’invitation dispose des privilèges de visualisation des membres du groupe. L’invitation est donc envoyée à chaque utilisateur indépendamment.
- Soit la personne ne dispose pas des permissions de voir les personnes qui composent le groupe. L’invitation est envoyée directement au groupe.
Dans le 2nd cas, tous les utilisateurs recevront une invitation avec la possibilité de répondre en tant que le groupe Google.
L’utilisateur qui reçoit l’invitation avec le “Reply for group mail” pourra répondre en tant que le groupe Google.
Boutons de réponse en tant que le groupe
Concernant la procédure de réponse, cette dernière est similaire à celle permettant de répondre à la place d’un utilisateur externe. Il faut entrer le lien du bouton “More options” sur un navigateur sans compte Google connecté. L’interface est la même que lors du cas avec l’utilisateur externe.
Interface de réponse
Tous les membres de l’invitation verront la réponse au nom du groupe Google dans leur calendrier.
Si l’invitation cible un utilisateur Google :
Dans le cas où l’invitation cible un utilisateur Gmail, une protection a été mise en place par Google. Si un attaquant essaie de répondre sans être connecté à un compte lié, le service demande l’authentification de l’utilisateur.
Toutefois, cette sécurité peut être contournée en utilisant une Cross-Site Request Forgery (CSRF). Une vulnérabilité CSRF permet à un attaquant de faire réaliser une action à un utilisateur authentifié sur un formulaire non protégé.
Une attaque CSRF se produit, par exemple, lorsqu’un utilisateur est incité par un attaquant à soumettre une requête web qu’il n’avait pas l’intention de faire. Cela peut permettre à l’attaquant d’effectuer des actions avec les privilèges du compte de la personne ciblée.
Dans notre exemple avec l’invitation, il faut que la cible soit connecté à Google et que l’attaquant ait accès à l’invitation Google.
L’attaquant pourra ensuite créer une page web qui héberge le code de la CSRF çi-dessous :
Cette CSRF est utilisable en modifiant les champs eid et tok récupérables dans le mail d’invitation. La seule autre information à ajouter est le message que vous souhaitez envoyer.
L’attaquant doit ensuite inciter la cible à se rendre sur le site piégé. La cible exécutera la CSRF qui enverra une réponse à l’invitation.
Le créateur de l’invitation recevra un mail en provenance du compte Google de la personne qui a été ciblée. Les autres membres invités verront la réponse dans leur calendrier Google.
Conclusion
Nous avons bien sûr signalé à Google cette vulnérabilité d’usurpation d’identité et il s’agit donc d’un fonctionnement qui est assumé.
Effectivement, pour les utilisateurs externes à Google et les groupes, il n’existe actuellement pas de solution simple qui pourrait permettre de sécuriser l’invitation pour que seul l’utilisateur final puisse y accéder.
Pour le cas de la vulnérabilité CSRF, en présence des secrets contenus dans les tokens, Google à choisi d’accepter le risque en nous redirigeant vers cet article :
Réponse de Google pour la CSRF
Google joue la carte de la sensibilisation en ajoutant un texte en bas de chaque invitation envoyée. Ce paragraphe avertit sur les risques du partage des invitations reçues.
Texte de sensibilisation pour le partage des invitations
Pour conclure, une seule solution semble pertinente à la résolution de ce problème, celle de sensibiliser les utilisateurs aux risques encourus lors du partage d’une invitation.