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 :
- Identifier la cible. Disons que la cible est example@gmail.com
- 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
- 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
- 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.
- 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.