De belles chaussettes neuves pour aller avec ma nouvelle tenue. Voilà ce qu’il me faut pour la compléter ! Je cherche une boutique en ligne belge spécialisée dans les chaussettes et jouissant d’une excellente réputation. Un collègue me l’a recommandée, je n’y étais jamais allé. Malgré l’assortiment alléchant, je décide de ne rien acheter. Les plus belles sont en rupture de stock dans ma taille. Quand je ferme mon onglet, je suis loin de me douter qu’une dizaine d’entreprises ont appris que j’existe, et quels sont mes points faibles. Plusieurs ne sont même pas européennes.
Et vous savez quoi ? Ces grandes entreprises américaines me connaissent visiblement depuis un moment déjà. Google et Meta m’accompagnaient déjà sur une bonne partie de ma semaine écoulée ; la même poignée d’entreprises était tapie sur la plupart des sites que j’ai visités. Les chaussettes ne sont pas toute l’histoire. Il y avait le parfum que j’ai regardé hier, le coiffeur que j’ai réservé pour mardi prochain, la table pour deux dans ce petit resto sympa au coin de la rue. Chacune de ces visites, prise isolément, est anodine. Mises bout à bout à travers des milliers de sites qui appellent tous les mêmes quelques entreprises, elles forment un portrait assez complet de ma vie, assemblé par des sociétés avec lesquelles je n’ai aucune relation et que je ne peux pas appeler pour leur demander ce qu’elles ont à mon sujet.
La part de Meta est plus intime, car le pixel présent sur la boutique relie cette visite à mon compte social, celui qui porte mon vrai nom et mes amis. Sur leur plateforme, ils enregistrent ce qu’ils veulent : où j’ai arrêté de faire défiler et me suis attardé, le message que j’ai commencé à taper dans une zone de texte avant de l’effacer sans le publier, chaque photo sur laquelle je me suis arrêté assez longtemps pour l’aimer. Je préfère ne pas imaginer ce qu’ils savent et déduisent déjà de moi, et ce que les chaussettes leur apprennent par-dessus le marché.
Je ne peux pas en vouloir au commerçant. Il voulait simplement les statistiques, et Google et Meta les offrent gratuitement. Il n’a pas conscience de ce qu’il divulgue sur ses clients. Ce n’est pas un informaticien, il veut juste vendre de belles chaussettes à beaucoup de gens. Et gagner honnêtement sa vie.
Alors : puis-je faire quelque chose pour mieux comprendre ce qui se passe sur un site ? Y a-t-il quelque chose que je puisse dire au propriétaire de la boutique de chaussettes ?
Eh bien, il existe un nouvel outil de BeLibre, et le code se trouve sur Codeberg. Cet article explique ce qu’il fait, ce que vous pouvez en faire, et le plus important : comment lire ce qu’il vous dit.
# Ce qu’il fait, en un souffle
Vous naviguez normalement sur un site web. L’outil enregistre la session, puis vous la rejoue et rapporte précisément quelles tierces parties ont reçu des données sur la visite, et de quel type de données il s’agissait. Vous voyez quelque chose qui mérite d’être conservé ? Alt-Ctrl-S permet de glisser une capture d’écran dans votre enregistrement.
Le rapport se présente en trois couches. En haut, un résumé qui note ses constats en rouge, jaune ou vert et vous indique quoi faire pour chacun. En dessous, un détail par fournisseur. En dessous encore, une vue requête par requête, pour qui veut voir les pièces justificatives.
Deux choses en font plus qu’un compteur de traceurs. D’abord, chaque fournisseur qu’il détecte est étiqueté avec sa juridiction et son exposition au droit extraterritorial, de sorte qu’un fournisseur d’analytics américain est signalé au regard du CLOUD Act, de la FISA 702 et de l’arrêt Schrems II. Le résultat se lit comme un audit de souveraineté numérique, et pas comme une simple liste de cookies. Ensuite, il attrape les cas qui se cachent : des traceurs déguisés derrière des noms d’hôte qui ressemblent à de la première partie, des cookies dont la durée de vie se mesure en mandats présidentiels, et des identifiants qui suivent discrètement un visiteur de site en site.
Il regarde aussi au-delà du navigateur, du côté des coulisses. À côté de la capture de la page, il inspecte tout un ensemble de données techniques (DNS) : où se trouvent les serveurs de noms faisant autorité, quel fournisseur gère le courrier entrant, si la zone est signée avec DNSSEC, si DMARC bloque réellement le courrier usurpé ou se contente de l’observer, et quels fournisseurs le site a discrètement avoué utiliser via ses enregistrements DNS. Une boutique peut héberger ses pages en Belgique et faire malgré tout transiter ses analytics, son courrier et son DNS par des fournisseurs situés sur un autre continent. Le rapport montre les deux moitiés.
Il existe aussi un mode groupé pour scanner toute une liste de sites en une seule fois, nous y reviendrons.
L’outil est publié sous GPLv3. Si vous voulez savoir précisément comment la saucisse est fabriquée, le code source est là et vous êtes libre d’en lire chaque ligne.
# L’installer
Nous ne reproduirons pas ici les étapes d’installation, car le README le fait déjà bien et personne ne lit de la prose d’installation pour le plaisir. Il vous faut Python et un Firefox récent. Le reste, c’est trois commandes et un café.
# L’utiliser : quatre choses à essayer
C’est là que ça devient intéressant. Voici quatre manières de le braquer sur le monde.
# 1. Votre boutique en ligne préférée
Reprenons la scène des chaussettes du début, mais cette fois avec le rapport sous les yeux. Nous l’avons lancé sur une vraie boutique de chaussettes belge, navigué pendant environ quatre-vingts secondes, et rien acheté.
La première commande vous aide à créer l’enregistrement. Au moment où vous fermez la fenêtre, l’enregistrement est sauvegardé à l’emplacement indiqué :
python -m leak_inspector capture https://example.com --out captures/example.zip
La commande suivante génère un rapport. La sortie peut être text, html, markdown_summary ou markdown_detailed, voire json si vous comptez l’analyser dans un autre outil. Elle sera enregistrée dans le fichier report.html :
python -m leak_inspector analyze captures/example.zip --format html > report.html
Voici un exemple du résumé abrégé de notre expérience des chaussettes :
VERDICT
10 external vendors contacted. 11 personal-data fields observed leaving
via 4 trackers: Google Ads / DoubleClick, Google Analytics 4,
Google Tag Manager, Meta (Facebook) Pixel.
Nothing requiring action was found.
KEY FINDINGS — WEBSITE
🔴 1 persistent cross-site tracking cookie set. Vendor: Google Ads / DoubleClick.
🔴 2 vendors under extra-territorial jurisdiction. 2× 🇺🇸 US (Google, Meta).
🟡 4 unclassified third-party hosts.
KEY FINDINGS — BACK-OFFICE
🟡 Authoritative DNS hosted under extra-territorial jurisdiction. 🇺🇸 US (Cloudflare).
🟡 Inbound mail handled by an extra-territorial provider. 🇺🇸 US (Google).
🔴 4 third-party SaaS relationships self-disclosed via DNS. US: Google, Meta.
C’est le rapport d’une boutique soignée et gérée avec compétence, pas infestée de centaines de traceurs ni d’un enregistreur d’écran. Les pages sont hébergées aux Pays-Bas, donc bien à l’intérieur de l’UE. Au regard des standards de la navigation commerciale, elle se comporte bien.
Et pourtant. Ses analytics, son pixel publicitaire, son courrier entrant et son DNS relèvent tous de la juridiction américaine. La boutique n’a presque certainement pas décidé cela sciemment. Quelqu’un a ajouté Google Tag Manager il y a des années et il a amené des amis, le courrier est allé chez Google parce que c’est ce que tout le monde fait, et le DNS a atterri chez Cloudflare sans réfléchir. Rien de tout cela n’est malveillant. Tout cela est exactement le genre de choix par défaut discret qu’un audit de souveraineté existe pour rendre visible. C’est la vraie leçon de la boutique de chaussettes : les fuites ne sont pas spectaculaires, elles sont ordinaires, et l’ordinaire est plus difficile à remarquer.
# 2. Votre école ou votre employeur
Lancez-le maintenant sur un site que vous êtes plus ou moins obligé d’utiliser. Un portail scolaire, l’intranet du personnel, la plateforme sur laquelle votre enfant se connecte chaque jour.
Le constat ressemble souvent à celui de la boutique en ligne. La différence, c’est le rapport de force. Vous pouvez cesser de faire vos achats sur une boutique. Vous ne pouvez pas vraiment empêcher votre enfant d’utiliser la plateforme de devoirs choisie par l’école. C’est ce qui en fait le cas inconfortable, et le cas utile.
Il vaut la peine de remarquer, gentiment, qu’un pied de page affichant « nous prenons votre vie privée au sérieux » et une page de connexion qui charge quatorze traceurs américains avant que vous n’ayez tapé quoi que ce soit ne s’excluent pas mutuellement. Les deux coexistent en permanence. L’outil rend simplement la seconde moitié visible.
# 3. Toutes les écoles de votre commune
Un rapport est une anecdote. Trente rapports, c’est une preuve.
C’est à cela que sert le mode groupé. Donnez-lui une liste de tous les sites web des écoles de votre commune, lancez-le, et revenez vers un classement : qui fuit le moins, qui fuit le plus, et quels traceurs reviennent sur l’ensemble. D’un coup, vous ne vous plaignez plus d’un seul site, vous tenez une comparaison que vous pouvez présenter à un conseil d’établissement, à un conseil communal, ou à un journaliste qui cherchait justement ce genre de chiffres concrets.
C’est le plaidoyer de BeLibre en miniature. Les arguments de souveraineté ont tendance à se noyer dans l’abstraction. Un tableau qui dit « neuf des douze écoles de notre commune envoient des données d’élèves au même fournisseur américain » ne se noie dans rien.
# 4. Cookies refusés, puis cookies acceptés
Le dernier est moins un cas d’usage qu’une astuce qui transforme l’outil en expérience.
Visitez un site et refusez tous les cookies. Enregistrez. Visitez à nouveau le même site, acceptez tout, et enregistrez une deuxième fois. Comparez maintenant les deux rapports.
Ce que vous testez en réalité, c’est si la bannière de consentement fait quoi que ce soit. Parfois l’enregistrement « refus » est rassurant et vide, et la bannière fait son travail. Parfois les deux rapports sont quasi identiques, ce qui signifie que le pistage s’est déclenché avant même que vous n’ayez cliqué, et que la bannière n’était que décorative. Ce second résultat est plus fréquent qu’il ne devrait l’être, et c’est précisément le genre de constat qui intéresse une autorité de protection des données.
Pour comparer ces deux cas, jetez un œil à la commande diff dans le fichier README.md. Celle-ci est un peu plus technique, mais si vous vous êtes débrouillé à travers les premiers exercices, celui-ci se passera très bien aussi.
Quel que soit le cas que vous exécutez, l’outil peut produire le rapport en texte brut dans le terminal, en HTML avec des infobulles, en JSON pour l’alimenter ailleurs, ou en markdown pour le partager. Et il reflète toujours la session que vous avez réellement enregistrée, vos choix de consentement compris. Il rapporte ce qui s’est passé, pas ce qui aurait dû se passer.
# Lire les résultats sans se faire peur
Voici la partie honnête. L’outil vous remet des preuves. Une preuve n’est pas encore une conclusion, et le principal risque à l’usage est de la lire de travers dans un sens comme dans l’autre : paniquer devant un drapeau rouge qui s’avère être un fournisseur avec lequel vous avez déjà un contrat, ou hausser les épaules devant un autre qui compte vraiment.
Un peu de contexte comble cet écart. Pas besoin d’un diplôme de droit, mais quelques notions aident :
-
Les notes de couleur mesurent ce qui a été observé sur le réseau. Ce sont des règles empiriques raisonnables, pas le verdict d’un avocat.
-
Il y a une vraie différence entre une donnée personnelle (votre IP, une adresse e-mail hachée), un identifiant qui relie vos visites entre elles, et un simple bruit technique. Ils n’ont pas du tout le même poids sous le RGPD, et le rapport les distingue.
-
« Fournisseur aux États-Unis » est une phrase aux conséquences juridiques. C’est un raccourci pour un corpus de lois (la FISA 702, le CLOUD Act, et le raisonnement derrière Schrems II) qui peut atteindre des données détenues par des entreprises américaines, peu importe où se trouve le serveur. C’est pourquoi un drapeau américain dans le rapport n’équivaut pas à un drapeau belge.
-
Le CNAME cloaking, c’est un traceur portant une fausse moustache de première partie. Un nom d’hôte comme
stats.votreecole.bea l’air local et digne de confiance, puis pointe en douce vers l’infrastructure d’un fournisseur ailleurs. L’outil le démasque ; les listes de blocage ordinaires et les revues de code rapides passent généralement à côté. -
Le session replay et l’analytics sont deux instruments différents. L’un compte les visites, l’autre les enregistre comme une caméra par-dessus votre épaule. Seul l’enregistrement traîne derrière lui une analyse d’impact formelle (article 35 du RGPD).
-
Un hôte non classé n’est pas synonyme de coupable. Cela signifie simplement qu’aucun module de détection ne l’a encore reconnu. Dans le rapport de la boutique de chaussettes, les quatre hôtes non classés étaient un SDK d’automatisation marketing qui mérite un examen, un point de terminaison de Google Analytics, le script Apple Pay, et le site jumeau de la boutique elle-même servant une image de produit. L’un d’eux mérite une enquête. Trois sont du bruit. Faire la part des choses, c’est tout le travail, et un hôte qui apparaît ici est une bonne raison d’ouvrir une issue pour que le suivant n’ait pas à deviner.
Enfin, les angles morts. Le principal est le marquage côté serveur (server-side tagging) : lorsqu’un site collecte des données dans le navigateur, les envoie à son propre serveur et les transmet ensuite à partir de là, ce dernier saut ne touche jamais le navigateur et l’outil ne peut pas le voir. Ce qui semble propre sur le réseau peut tout de même alimenter un fournisseur par la porte de derrière. Les contrôles DNS et courrier en attrapent indirectement une partie, mais une installation côté serveur déterminée reste invisible par conception.
Si un constat vous fait plisser les yeux, demandez. La communauté en ligne de BeLibre est l’endroit pour ça : de vraies personnes, avec sensiblement moins de traceurs que ce paragraphe.
# Essayez-le sur quelque chose qui vous tient à cœur
Donc, que vous achetiez les chaussettes ou que vous les vendiez : cet outil peut vous aider à mieux comprendre ce qui se passe juste sous votre nez et sous le capot de votre navigateur. Essayer le Leak Detector ne prend que quelques minutes.
- Le code, le README et le suivi des tickets : codeberg.org/BeLibre/Leak_Detector
- Questions, constats, ou de l’aide pour lire un rapport : le canal Matrix de BeLibre
- Rester au courant des activités de BeLibre ? Suivez-nous sur Mastodon
- Repéré un hôte non classé qui mérite d’être reconnu ? Les nouveaux modules de détection font grandir le catalogue. Les propositions sont les bienvenues.
Publié sous GPLv3 : ♥️ exécutez-le ♥️ étudiez-le ♥️ partagez-le ♥️ améliorez-le ♥️