Une vulnérabilité CSRF annoncée pour Google Calendar

0
31

Google Calendar est vulnérable à une série de failles de type CSRF. Dans deux cas distincts, les moyens de protection existants (les jetons CSRF) n’ont pas été validés par l’application.

La vulnérabilité de Google Calendar a été dévoilée aujourd’hui même sur le blog de Neal Pool.

http://www.google.com/calendar/event?
dates=20101103T003000%2F20101103T013000
&text=asfsaf
&pprop=HowCreated%3ADRAG
&src=kmVhbF9wb29sLUBicm93bi5lZGU
&ctz=America%2FNew_York
&eid=1288669371381
&sf=true
&action=CREATE
&output=js
&lef=LHZkMjYxNDNmODNlOTBlbnZqMTQ0amh1Ym9AZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ
&lef=MW4udXNhI2hvbGlkYXlAZ3JvdXVudi5jYWxlbmRhci5nb29nbGUuY29t
&lef=bsVhbF9wb21sZUBicm92bi5lZHU
&droi=20101024T000000%2F20101212T000000
&secid=-_1FyItA6aDLfYZl6GhuK62s74o


La première chose a été de retirer le paramètre SECID (qui est supposé être un jeton CSRF):  résultat surprenant, la sortie de la réponse a légèrement changée, il reste a créé un nouvel événement sur le calendrier. Ensuite plusieurs essais ont été réalisés avec la suppression de plusieurs paramètres jusqu’à ce que l’URL qui suit soit obtenue :


http://www.google.com/calendar/event?
dates=20101103T003000%2F20101103T013000
&text=asfsaf
&sf=true
&action=CREATE


Un attaquant aurait pu prévoir que URL vers une cible avec un certain nombre de moyens : il suffit de visiter le calendrier de l’utilisateur et d’ajouter une entrée correspondant à l’objectif.

La deuxième instance en cause est la modification des paramètres de confidentialité d’un calendrier existant. Pour ce faire, il est nécessaire à l’attaquant de déterminer l’identifiant unique de l’utilisateur. Une méthode à été dévoilée pour trouver cet identifiant, en supposant que la cible est un utilisateur de Gmail :

  1. Identifier la cible. Disons que la cible est example@gmail.com
  2. Créer un compte Gmail, où la première lettre du compte est différent de la cible, du participant. Donc, ici, on pourrait inscrire fxample@gmail.com
  3. Inscrivez-vous à Google Agenda, jetez un oeil à la version imprimable de votre agenda. Il aura l’adresse e-mail dans le coin supérieur gauche. L’URL de la page ressemble à ceci (sans les paramètres inutiles) : https://www.google.com/calendar/printable?src=[QUELQUES STR]&psdec=true&pft=png
  4. Essayez les différentes permutations des lettres / chiffres pour les premiers caractères du paramètre src. Vous pouvez voir comment vos modifications affectent la chaîne décodée en regardant dans le coin supérieur gauche de la page : il affiche une nouvelle adresse e-mail en fonction de vos changements (parfois il peut vous dire que SRC n’est pas valide, auquel cas vous devez continuer à essayer). Il n’y a qu’un nombre très limité de possibilités donc le brute-force est facilement possible.
  5. Finalement, vous avez récupéré la bonne valeur de src correspondant à la cible : l’e-mail sur le dessus correspondra à l’objectif, l’adresse e-mail de la victime potentielle.

De là, le reste est simple. Les paramètres de confidentialité sont contrôlés par l’envoi d’une requête POST à l’adresse https://www.google.com/calendar/editcaldetails. Un jeton CSRF a été inclus si la demande a été faite via l’interface web, mais en omettant le jeton, cela n’a pas empêché la demande de fonctionner. La requête POST ne comportait que ce qui suit :


dtid=[VALID-SRC]
&ap=X19wdWJsaWNfcHJpbmNpcGFsX19dcHVibGljxmNhbGVuZGFyLmdvb2dsZS5jb20
&ap=20


[VALIDE-SRC] est le src valide qui a été trouvé à l’étape 5 et le reste est une constante provenant du formulaire correspondant dans l’interface web.

Plus d'informations

Les vulnérabilités mentionnées ici ont toutes été confirmées et patchées par l’équipe de sécurité de Google.