La mise en cache des messages privés de Twitter et Firefox

Twitter communique à ses utilisateurs et utilisatrices que leurs messages privés personnels pourraient être stockés dans le cache web de Firefox.

Ce problème touche toutes les personnes qui utilisent Twitter sur Firefox à partir d’un compte d’ordinateur partagé. Ces utilisateurs et utilisatrices devraient vider leur cache.

Ce billet explique la manière dont ce problème est survenu, les implications pour les personnes susceptibles d’être touchées et la manière dont les problèmes de cette nature pourraient être évités à l’avenir. Pour y parvenir, nous devons nous pencher un peu sur la manière dont fonctionne la gestion du cache web.

Sur le blog de Mozilla, Eric Rescorla, le directeur technique de Firefox, nous fait part de ses réflexions sur ce que vous devez savoir à propos de Twitter sur Firefox, avec cet important rappel :

Le Web est compliqué et il est difficile de tout savoir à son sujet. Mais c’est aussi un bon rappel de l’importance de disposer de standards pour le Web plutôt que de compter uniquement sur ce qu’un navigateur particulier fait par hasard.

Les bases de la confidentialité de la mise en cache web

La mise en cache est essentielle aux performances sur le Web. Les navigateurs mettent en cache le contenu afin de pouvoir le réutiliser sans communiquer avec les serveurs, ce qui peut être lent. Cependant, la manière dont le contenu du web est mis en cache peut être assez déroutante.

L’Internet Engineering Task Force a publié la spécification RFC 7234 qui définit le fonctionnement de la mise en cache web. Un mécanisme clé est l’en-tête Cache-Control qui permet aux serveurs web de déclarer comment ils veulent que les caches traitent le contenu.

Les sites peuvent utiliser Cache-Control pour faire savoir aux navigateurs ce qui peut être stocké en toute sécurité dans les caches. Certains contenus doivent être récupérés à chaque fois, d’autres contenus ne sont valables que pour une brève durée. Cache-Control indique au navigateur ce qui peut être mis en cache et pendant combien de temps. Ou, comme c’est le cas ici, Cache-Control peut indiquer au navigateur que le contenu est sensible et qu’il ne doit pas être stocké.

Par ailleurs, en l’absence d’instructions Cache-Control en provenance des sites, les navigateurs font souvent des suppositions sur ce qui peut être mis en cache. Les sites ne fournissent souvent aucune information de mise en cache pour le contenu. Mais la mise en cache du contenu accélère le Web. Les navigateurs mettent donc en cache la plupart des contenus, sauf si on leur dit de ne pas le faire. Cette pratique est appelée « mise en cache heuristique » et diffère d’un navigateur à l’autre.

La mise en cache heuristique implique que la navigation devine quel contenu mettre en cache et pendant combien de temps. La mise en cache heuristique de Firefox stocke pendant 7 jours la plupart des contenus dépourvus d’informations de mise en cache explicites.

Il existe un tas de contrôles fournis par Cache-Control, mais le plus pertinent en l’espèce est une directive appelée « no-store ». Lorsqu’un site dit « no-store », cela indique au navigateur de ne jamais enregistrer une copie du contenu dans son cache. L’utilisation de « no-store » est le seul moyen de garantir que les informations ne sont jamais mises en cache.

L’affaire Twitter

Dans cette affaire, Twitter ne prévoyait pas de directive « no-store » pour les messages privés. Le contenu des messages privés est sensible et n’aurait donc pas dû être stocké dans le cache du navigateur. Sans Cache-Control ou Expires, cependant, les navigateurs utilisaient une logique de mise en cache heuristique.

Les tests de Twitter ont montré que la requête n’était pas mise en cache dans d’autres navigateurs. En effet, certains autres navigateurs désactivent la mise en cache heuristique si un en-tête HTTP sans rapport, Content-Disposition, est présent. Content-Disposition est une fonctionnalité qui permet aux sites d’identifier le contenu à télécharger et de suggérer un nom pour le fichier dans lequel ce contenu sera enregistré.

En comparaison, Firefox traite légitimement Content-Disposition comme sans rapport et ne désactive donc pas la mise en cache heuristique lorsqu’elle est présente.

Les messages HTTP utilisés par Twitter pour les messages privés ne comprenaient aucune directive Cache-Control. Pour les utilisateurs et utilisatrices de Firefox, cela signifiait que même lorsque la personne se servant de Twitter se déconnectait, les messages privés étaient stockés dans le cache du navigateur sur leur ordinateur.

Qui est affecté ?

Dans la mesure du possible, Firefox maintient séparés les caches.

Les personnes qui ont plusieurs comptes utilisateur sur le même ordinateur auront leurs propres caches qui sont complètement inaccessibles aux autres. Les personnes qui partagent un compte mais utilisent des profils différents de Firefox auront des caches différents.

Firefox fournit également des commandes qui permettent de contrôler ce qui est stocké. L’utilisation de la navigation privée implique que les données mises en cache ne sont pas conservées dans un stockage permanent et que tout cache est supprimé lorsque la fenêtre est fermée. Firefox propose également d’autres commandes, comme Effacer l’historique récent, Oublier ce site et l’effacement automatique de l’historique. Ces options sont toutes documentées ici.

Ce problème affecte uniquement les personnes qui partagent un compte sur le même ordinateur et qui n’utilisent aucune de ces techniques de confidentialité pour vider leur cache. Même si elles se sont déconnectées de Twitter, leurs messages privés restent dans leur cache.

Il est peu probable que d’autres utilisateurs ou utilisatrices qui utilisent plus tard le même profil de Firefox accèdent par inadvertance aux messages privés en cache. Cependant, un utilisateur ou une utilisatrice qui partage un même compte sur un ordinateur peut être en mesure de trouver et d’accéder aux fichiers de cache qui contiennent ces messages.

Ce qu’utilisateurs et utilisatrices peuvent faire

Les personnes qui ne partagent pas de compte sur leur ordinateur avec quelqu’un d’autre peuvent être assurées que leurs messages privés sont en sécurité. Aucune action n’est requise.

Les personnes qui utilisent des comptes sur des ordinateurs partagés peuvent vider leur cache de Firefox. Effacer uniquement le cache du navigateur à l’aide d’Effacer l’historique récent supprimera tous les messages privés de Twitter.

Ce que développeurs et développeuses de sites web peuvent faire

Nous recommandons que les sites identifient soigneusement les informations privées à l’aide de Cache-Control: no-store.

Une idée fausse répandue ici est que Cache-Control: private résoudrait ce problème. La directive « private » est utilisée pour les caches partagés, tels que ceux fournis par les réseaux de diffusion de contenu (CDN). Marquer le contenu comme « private » n’empêchera pas la mise en cache par le navigateur.

De manière plus générale, les développeurs et développeuses qui développent des sites doivent comprendre la différence entre les standards et les comportements observés. Ce que les navigateurs font aujourd’hui peut être observé et mesuré, mais, à moins que le comportement ne soit basé sur un standard documenté, rien ne garantit qu’il restera ainsi pour toujours.



Traduction et relecture : Mozinet, Hellosct1 et anonymes

Comme la version originale, cette traduction est disponible sous la licence CC By-SA 3.0.

La capture ajoutée à la traduction est disponible sous licence CC0.