// CLUBIC — HARDWARE & GADGET
Comment un bug Bluetooth a révélé le fingerprinting audio d’AliExpress
Inséré dans une page web, un script peut demander au navigateur de produire un son à volume zéro, puis lire le résultat pour en tirer une empreinte de l’ordinateur. Sur AliExpress, cette technique a été repérée parce qu’elle perturbait un casque Bluetooth multipoint.
Nous rapportions en août qu’AliExpress faisait tourner sur sa page d’accueil des scripts de fingerprinting audio. L’idée était de pouvoir recouper les caractéristiques techniques d’un appareil pour l’identifier sans se baser sur les cookies. La méthode avait été repérée par un développeur dont le casque refusait de changer d’appareil. Le billet technique de ce développeur détaille un peu plus ce mécanisme.
Le casque est multipoint, autrement dit, il est connecté en même temps au PC et au téléphone. Il donne la priorité au PC, et le téléphone ne joue que si aucun son ne sort de l’ordinateur. Or la musique du téléphone s’arrêtait quelques secondes à chaque ouverture du site AliExpress, que ce soit dans Firefox ou Chrome. Puis elle reprenait la lecture sur le smartphone à la fermeture de l’onglet. Le développeur a d’abord cherché un média caché. Mais il n’a trouvé ni balise audio ni vidéo, ni commande de lecture, et la page ne déclarait aucune lecture en cours au système. Il a donc conçu un code de suivi autour de la fonction qui crée un contexte audio via l’API Web Audio. Deux contextes sont apparus, actifs et reliés à la sortie audio du système. Ils venaient de collina.js et fireyejs.js, deux scripts volontairement illisibles (obfusqués), rangés dans un répertoire AWSC qui semble relever des outils antifraude d’Alibaba.
Le script demande au navigateur de fabriquer un son de référence, identique sur tous les ordinateurs. Puis, il mesure ce qui en sort. Le volume est réglé sur zéro avant la sortie pour que personne ne puisse rien entendre. Mais ce son reste branché à la sortie audio de l’ordinateur, comme s’il allait être joué, et le navigateur fait donc tous les calculs. C’est donc ce qui explique le comportement du casque. Le PC semble avoir gardé sa sortie audio en service, même sans aucun son, et le téléphone ne pouvait plus reprendre la main. Mettre l’onglet en sourdine ne servait à rien puisque la page ne jouait aucun média, elle calculait un son en arrière-plan. L’audit d’août n’a relevé aucune demande d’accès au microphone.
Le principe repose sur de petites différences de calcul d’une machine à l’autre. À partir du même son, le navigateur, le système, les bibliothèques audio et le matériel donnent des valeurs légèrement différentes. Ces valeurs ne suffisent généralement pas à identifier un utilisateur. Tom Ritter, ingénieur chez Firefox, a d’ailleurs constaté que 99,24 % des utilisateurs mesurés par Mozilla se répartissaient en trois empreintes audio seulement. Presque tout le monde obtient donc le même résultat. L’empreinte audio vient alors s’ajouter en complément d’autres mesures des mêmes scripts et notamment le rendu canvas et WebGL, la taille de l’écran, le nombre de cœurs du processeur, WebRTC, et les mouvements de souris. Chacune révèle peu, mais leur combinaison forme une empreinte distinctive, laquelle permet de reconnaître un navigateur à son retour. Le code prévoit de chiffrer ces résultats puis de les envoyer à Alibaba. Aucune certitude sur ce qu’en fait Alibaba ensuite. Cela peut alimenter un score antifraude, détecter des robots, ou servir d’identifiant durable de visiteur.
À l’heure actuelle, en se rendant sur le site e-commerçant chinois, le JavaScript collina.js (en version 1.140.1) est toujours chargé. En revanche, sur une session Chrome 156 propre, avec 14 interfaces audio surveillées dès le chargement, aucun appel n’a été enregistré en près de six minutes, et fireyejs.js n’est pas apparu.
Il est possible de bloquer ces deux scripts avec deux règles ajoutées à l’extension uBlock Origin. Elles ne ciblent que ces scripts, et seulement quand AliExpress les demande. En revanche, cela peut provoquer des CAPTCHA, ou des soucis à la connexi