La dernière version 15 de Safari contient un bug qui permet à un site de suivre l'historique de navigation d'un utilisateur et, dans certains cas, à récupérer quelques informations sur son identité.
Dans un billet, le développeur de la solution FingerprintJS de détection de fraudes en ligne explique les détails de ce défaut logiciel qui touche l'API IndexedDB et concerne toutes les versions de Safari 15 sur Mac, iPhone et iPad, ainsi que les autres navigateurs sur iOS et iPadOS puisqu'Apple les oblige à utiliser le même moteur qu'elle.
IndexedDB est utilisé par les navigateurs pour créer de petites bases de données sur l'appareil de l'utilisateur et y stocker des informations sur les sites en train d'être visités. Chaque site génère sa propre base et ne s'occupe normalement que d'elle.
Mais avec ce bug, chaque fois qu'un site interagit avec sa base de données, une copie — vide — de celle-ci est créée pour les autres onglets ou fenêtre actifs et dans lesquels d'autres sites sont consultés. Dès lors, ceux-ci ont la possibilité de prendre connaissance de l'activité web qui se déroule dans l'onglet ou la fenêtre voisine, jusqu'à ce que vous quittiez Safari.
Ces bases de données dupliquées ont beau être vides, il est courant qu'elles portent le nom du site qui les a créées ou même qu'elles soient baptisées avec un identifiant spécifique à l'utilisateur.
FingerprintJS prend comme exemple Google Calendar, Keep et YouTube qui utilisent un numéro de matricule interne correspondant au compte Google de l'internaute. Il est alors possible pour un site malveillant de retrouver quelques infos publiques liées à ce compte Google et de le croiser avec les noms des sites visités obtenus par la lecture des intitulés des autres bases IndexedBD.
D'après les essais de FingerprintJS, parmi les 1000 sites les plus visités référencés par Alexa, une trentaine interagissent avec IndexedBD dès l'arrivée sur leur page d'accueil. Et il est fort probable que le chiffre soit beaucoup plus important. Ce qui laisse entendre qu'un site capable de jouer avec ce bug peut récupérer un historique de navigation de l'utilisateur assez intéressant.
Ce problème ne peut être contourné par l'utilisation de la navigation privée, celle-ci ne fait que limiter sa zone d'opération. Dans ce cas de figure les sessions de navigation sont restreintes au niveau de chaque onglet ouvert ou fenêtre, mais tout ce qui est consulté à l'intérieur d'eux est touché par le même dysfonctionnement.
On peut désactiver JavaScript mais ce n'est pas réaliste pour une utilisation normale. Ou bien changer temporairement de navigateur sur Mac. Il faut dans tous les cas attendre un correctif d'Apple, mais ce bug a été soumis au WebKit Bug Tracker depuis déjà la fin novembre. Une page de démo a été mise en place pour le montrer en action : https://safarileaks.com