Beaucoup de personnes veulent en savoir plus sur vous : ce que vous faites, ce que vous aimez, ce que vous pensez, et elles le prouvent chaque jour en essayant par tous les moyens de récupérer le plus d'informations sur vos habitudes du quotidien.

Pour récupérer toutes ces données, beaucoup d'entreprises proposent des produits ou services gratuitement pour ensuite discrètement collecter des informations sur les utilisateurs. C'est le cas de Facebook par exemple, maître en la matière. C'est aussi le cas de nombreuses petites applications comme celles censées améliorer la gestion de vos e-mails qui, en réalité, scannent tous vos courriels à la recherche de vos achats1.

D'autres techniques voient le jour et ciblent les navigateurs, proies privilégiées, car ce sont des intermédiaires obligatoires pour se connecter sur le Web et afficher les pages Internet. Ils se doivent donc d'avoir une sécurité exemplaire pour éviter que des personnes malintentionnées puissent accéder à tout ce que vous regardez et à tout ce que vous saisissez.

Affichage d'une page Internet

Lorsqu'un internaute souhaite consulter une page Internet, il saisit l'adresse du site dans son navigateur, qui va ensuite récupérer le contenu de la page en envoyant une requête2 sur le serveur du propriétaire du site. Puis, lorsque le navigateur reçoit la réponse, il peut afficher la page à l'utilisateur.

Une requête est générée par le client et envoyée au serveur. Une autre requête est générée par le serveur et envoyée au client en réponse.
Fonctionnement simplifié du navigateur pour afficher une page Web.

Les pages Internet ne sont pas composées uniquement de textes, mais contiennent aussi des images, des vidéos, des polices de caractères, ou des animations. Ces ressources ne sont généralement pas inclues dans la réponse initiale retournée au navigateur. Des requêtes supplémentaires doivent donc être envoyées au serveur pour les récupérer.

Ce mécanisme peut être notamment visible quand vous consultez des pages avec des images. La page commence à s'afficher puis les images se chargent ensuite progressivement en fonction de leur taille et de la rapidité de la connexion.

Deux copies d'écran d'une page Internet, une avant que l'image soit chargée et une autre une fois l'image chargée
Exemple de chargement initial d'une page suivi du chargement des images.

Utilisation d'une mémoire-cache pour améliorer la performance

Les navigateurs utilisent de nombreux mécanismes pour améliorer l'expérience de l'utilisateur et afficher les pages le plus rapidement possible. L'un d'eux consiste à garder en mémoire le résultat des requêtes pour ne pas devoir les récupérer une seconde fois, et ainsi pouvoir les afficher plus rapidement à l'utilisateur. On appelle ce mécanisme : la mémoire-cache ou simplement le cache.

C'est le cas par exemple de cette page que vous êtes en train de lire et qui contient des images d'illustration comme la bannière en dessous du titre de l'article. Lorsque votre navigateur a chargé la page initialement, les images ont été récupérées, et vous avez potentiellement dû attendre 1 seconde avant qu'elles ne s'affichent sur votre écran. Si vous rafraîchissez la page ou retournez ultérieurement sur cette même page, le navigateur va d'abord vérifier qu'il possède une copie de cette image en mémoire. Si c'est le cas, il l'affichera directement, vous faisant gagner une précieuse seconde. Dans le cas contraire, vous devrez patienter le temps que le navigateur récupère l'image.

Ce mécanisme fonctionne aussi lorsque deux sites utilisent la même image ou la même police de caractères. Le cache va réutiliser les ressources téléchargées lors de la visite du premier site pour afficher plus rapidement le second.

Analyser le cache pour espionner l'utilisateur

Le concept du cache n'est pas nouveau et a fait ses preuves depuis très longtemps. Certaines personnes ont cependant profité de ce mécanisme censé améliorer l'expérience de l'utilisateur pour espionner l'historique de navigation des internautes.

Le principe de cette attaque n'est pas compliqué. Il consiste à essayer de télécharger une ressource, comme une image, qui est connue pour être uniquement présente sur une page bien précise, puis d'analyser le temps de chargement de cette image. Si le temps de chargement est significatif, cela veut dire que l'image n'est pas dans la cache, et donc que l'utilisateur n'a pas visité la page en question. Au contraire, si le temps de chargement est minime, cela veut dire que l'image est dans le cache, car elle n'a pas pu être téléchargée auprès du serveur aussi rapidement, et que l'utilisateur a visité la page en question.

Pour illustrer cette attaque, imaginez qu'une personne voudrait savoir si vous avez consulté cet article que vous lisez actuellement. Tout ce qu'il aurait à faire, c'est d'attendre que vous vous rendiez sur son site, et d'essayer discrètement de charger l'image principale de cet l'article. Si l'image se charge dans un temps relativement court, disons moins de 50ms3, il y a de fortes chances que l'image ait déjà été téléchargée par le navigateur et qu'elle provienne de son cache. L'attaquant peut donc en conclure que vous avez déjà consulté cette page, et lu l'article.

Sécurité ou rapidité

Il faut donc faire un choix : utiliser un cache et ainsi améliorer la performance et l'expérience de l'utilisateur, ou ne pas l'utiliser et privilégier la sécurité de l'internaute.

Les navigateurs ont choisi que la sécurité de l'internaute était plus importante que la vitesse de chargement de la page et ont pris la décision de modifier le fonctionnement du cache. Désormais, ils ne permettront plus aux sites de récupérer les ressources depuis un cache commun, et chaque site aura son propre cache.

Cela veut dire que si vous visitez plusieurs fois la même page, les ressources comme les images seront toujours mémorisées et récupérées du cache. Mais si vous visitez un autre site qui utilise cette même image, le navigateur récupèrera le contenu de cette image auprès du serveur, même si une copie de cette image a déjà été téléchargée ailleurs.

Se protéger face à ce type d'attaques

Pour ne pas permettre à un attaquant de connaître votre historique de navigation, tout ce qui vous avez à faire, c'est de mettre à jour votre navigateur Internet.

Chrome a modifié4 le comportement du cache pour ne plus permettre ce type d'attaques dans la version 85 de son navigateur sorti en octobre 2020, et Firefox fera la même chose5 dans la version 85 de son navigateur courant janvier 2021. Apple, lui, a détecté cette vulnérabilité et l'a corrigé6 depuis 2013.

Les navigateurs se mettent constamment à jour pour corriger des problèmes de sécurité comme celui-ci. Nous vous conseillons donc d'activer les mises à jour automatiques de votre navigateur et d'installer les nouvelles versions dès leur sortie.

Note : un terme a été donné au mécanisme consistant à ne pas avoir un cache commun à tous : « cache partitioning », que l'on pourrait traduire par « séparation de la mémoire-cache ». Google a écrit un article technique sur le sujet (en anglais).

Notes et références

  1. Un exemple d'une application gratuite qui scanne vos emails est évoqué dans l'article « Amazon retire le détail des commandes de ses e-mails pour protéger ses clients ».
  2. Le mécanisme des requêtes est évoqué dans l'article « Protégez vos utilisateurs en sécurisant votre site Internet avec HTTPS ».
  3. Une seconde comporte 1000 millisecondes. 50 ms correspond donc à un vingtième de seconde.
  4. Google modifie l'accès au cache dans la version 85 de son navigateur Chrome (source).
  5. Mozilla active le partionnement du cache dans la version 85 de son navigateur Firefox (source).
  6. Apple met en place le partionnement du cache en 2013 dans son navigateur Safari (source).