- La vérification d’appareil « Verify you're human » de Cloudflare Turnstile boucle à l’infini depuis environ une semaine sur les navigateurs basés sur WebKitGTK
- La cause directe du blocage d’accès à plusieurs sites semble être une tentative de Cloudflare d’obtenir une empreinte de l’appareil via WebGL
- Le message de Turnstile indique que la prise d’empreinte du navigateur est utilisée pour vérifier qu’il s’agit bien d’un humain, et que les outils de blocage ou de randomisation peuvent faire paraître l’utilisateur comme un bot
- WebKit bloque ce type de fonctionnalité depuis des années, et cela ne semble pas être une option de confidentialité facilement désactivable par l’utilisateur
- Alors que Safari semblerait bénéficier d’une exception, l’ensemble des navigateurs WebKitGTK se retrouve bloqué, et les utilisateurs de Firefox avec certains réglages de protection pourraient aussi être touchés
Vérification Turnstile en boucle sur WebKitGTK
- La vérification d’appareil « Verify you're human » de Cloudflare Turnstile boucle à l’infini depuis environ une semaine sur les navigateurs basés sur WebKitGTK, empêchant l’accès à plusieurs sites web
- La cause du blocage semble être une tentative de Cloudflare d’obtenir une empreinte de l’appareil via WebGL
- Le texte d’information de Turnstile indique que la prise d’empreinte du navigateur est utilisée pour déterminer s’il s’agit d’un humain
- Les outils de confidentialité qui bloquent ou randomisent la prise d’empreinte peuvent faire apparaître le navigateur comme un bot cherchant à dissimuler son identité
- WebKit bloque ce type de fonctionnalité depuis des années, et cela ne semble pas être une fonctionnalité de confidentialité facile à désactiver
- Alors que Cloudflare semblerait avoir prévu une exception pour Safari, l’ensemble des navigateurs WebKitGTK se retrouve bloqué
Comportement de protection associé dans Firefox
- La protection de Mozilla Firefox contre la prise d’empreinte via WebGL présente le problème Bugzilla#1916271: Gecko reveals sanitized GPU Characteristics; webkit and blink return hardcoded strings for all users
privacy.resistfingerprintingn’est pas activé, même si l’on choisit « Strict » ou « Enhanced Privacy Protection » dans les réglages- Les utilisateurs de Firefox orientés confidentialité qui activent manuellement
privacy.resistfingerprintingpourraient à l’avenir ne plus réussir la vérification d’appareil de Cloudflare
2 commentaires
Avis sur Lobste.rs
L’article semble mélanger plusieurs sujets à propos de Firefox. Ayant fait partie de l’équipe qui a travaillé directement là-dessus, je peux dire que les protections anti-empreinte de Firefox fonctionnent de plusieurs façons
D’abord, Firefox limite les informations des chaînes WebGL vendor/renderer, y compris les chaînes dites « unmasked ». Un exemple de code vérifiable directement a été posté par Fatih dans le commentaire 14. L’affirmation selon laquelle cela aurait cassé quelque chose est totalement fausse
Ensuite, Firefox randomise aussi la sortie canvas. Si on appelle
toDataURL()sur le même canvas, la valeur renvoyée diffère subtilement d’une session à l’autre. On peut par exemple le tester entre mode navigation privée/mode normal, ou dans différents container tabsTroisièmement, cette fonctionnalité ainsi que d’autres protections anti-empreinte récentes ont été conçues à partir d’analyses empiriques afin d’être efficaces sans casser le Web. La plupart sont activées par défaut, et si l’on veut aller plus loin, il suffit de passer « Enhanced Tracking Protection » en mode strict dans les paramètres
Quatrièmement, le mode
resistFingerprintingn’apparaît pas dans les paramètres et n’est accessible que viaabout:config, car il est connu pour pouvoir casser le Web. Il est conservé pour Tor Browser, qui est un fork de Firefox, mais personnellement je pense que les protections côté Enhanced Tracking Protection sont bien meilleuresJe ne défends pas le fingerprinting, mais comme cela fait actuellement partie de mon travail, je m’intéresse aux outils de blocage de bots
L’objectif de Cloudflare avec Turnstile semble être de créer un widget de défense anti-bot où l’humain n’a pas besoin de résoudre un CAPTCHA. J’imagine que cela fonctionne en laissant passer la plupart des utilisateurs tout en observant leur comportement sur plusieurs sites via le fingerprinting ; je me demande si cette compréhension est correcte
Est-il possible de réaliser un widget sans CAPTCHA et sans fingerprinting ? Est-ce possible tout court ? J’ai aussi entendu dire que contourner Turnstile n’était pas si difficile :tm:. Est-ce que tous les widgets de blocage de bots reposent au final sur une sécurité par obscurité ?
Le fait qu’il se promène sur plusieurs sites importe peu ; l’essentiel est de détecter qu’il revient plusieurs fois sur le même site
Pour créer un widget sans CAPTCHA et sans fingerprinting, l’attestation matérielle peut aussi fonctionner. Mais tout le monde déteste ça. Apple fournit une attestation matérielle, et comme Cloudflare l’utilise sur Safari, Safari peut passer même avec la randomisation canvas. Contrairement à ce que dit ce billet de blog, Cloudflare n’a pas mis en place d’exception spéciale pour Safari
On peut aussi exiger une preuve de travail, mais il faut alors accepter d’exclure beaucoup d’utilisateurs du Web qui n’ont qu’un téléphone Android d’entrée de gamme, et il faut que la valeur de chaque action de bot soit suffisamment faible pour que les opérateurs de bots n’aient pas intérêt à exécuter cette preuve de travail. Ces conditions sont parfois réunies, mais pas pour des sites comme les boutiques en ligne ou les banques
À part cela, il n’y a pas de bonne solution. Je ne connais pas bien Turnstile, mais le produit de l’entreprise où j’étais était clairement difficile à contourner à grande échelle. En revanche, quand ce n’était pas à grande échelle, nous n’essayions pas délibérément de rendre le contournement difficile, et je ne serais pas surpris que Cloudflare ait fait le même choix
Le but de tous les widgets de blocage de bots n’est pas de rendre les bots impossibles, mais de rendre économiquement impossible l’attaque d’un site Web par des bots. C’est pourquoi les règles du jeu diffèrent des autres domaines de la cybersécurité, et l’obscurité fonctionne plutôt bien. L’objectif est que l’adversaire doive continuer à supporter des coûts supplémentaires au fil du temps
canvas/webglest en pratique un problème déjà résolu pour les web scrapers. C’est même une question d’entretien d’embauche pour des postes liés au web scrapingUne solution courante consiste à extraire les commandes de rendu. On peut soit utiliser un navigateur modifié qui dumpe les commandes, soit les obtenir en désobfusquant le script
Ensuite, il suffit d’héberger sur son propre site le script canvas/webgl extrait, afin de générer à partir des visiteurs des empreintes réutilisables pour les bots
Cette méthode est assez robuste. Ces scripts de fingerprinting changent rarement, car les modifier invaliderait la base de données canvas → GPU/vendor/browser/OS
En résumé, c’est un nouvel exemple où l’on rend seulement l’expérience plus pénible pour les utilisateurs ordinaires, alors que les web scrapers sérieux connaissent déjà plusieurs stratégies de contournement
Discussions sur Hacker News
Cloudflare est connu pour utiliser l’empreinte du navigateur pour détecter les scrapers. Par exemple, il compare l’empreinte JA3 avec l’agent utilisateur pour bloquer des outils comme cURL tout en autorisant OkHttp (client Android), mais on peut facilement se faire passer pour autre chose avec des paquets comme CycleTLS [1]
Je n’ai pas envie de défendre ça, puisqu’au nom de la « protection contre les bots » ils bloquent une grande partie d’Internet, mais si l’on n’utilise pas de preuve de travail (PoW), la prise d’empreinte peut être une méthode réaliste — au prix d’une destruction totale de la vie privée de tout le monde
Cromite, un fork de Chromium orienté vie privée pour Android, a des problèmes récurrents avec Cloudflare Turnstile [2], parce que Cloudflare collecte l’empreinte de différentes manières pour laisser passer le challenge
Pour résoudre le problème, il faudrait rejoindre le programme Cloudflare Browser Developer, ce qui exigeait de signer un NDA, et le refus du responsable du projet paraît justifié
Pour voir jusqu’où Cloudflare fouille dans l’empreinte du navigateur, il suffit de regarder dans le ticket [2] quels drapeaux il faut désactiver pour passer le challenge. Au minimum, Cloudflare pourrait être assez souple pour remplacer cela par une preuve de travail au lieu de simplement bloquer les gens lorsqu’ils soumettent un formulaire ou accèdent à un site web
[1]: https://github.com/Danny-Dasilva/CycleTLS
[2]: https://github.com/uazo/cromite/issues/2365
Attribuer une réputation aux IP résidentielles et aux plages commerciales pourrait être une autre manière d’obtenir le résultat recherché. Cela pousserait les opérateurs à être beaucoup plus prudents face aux abus d’IP, mais dans ce cas, l’activité DDoS des attaquants comme celle des défenseurs pourrait s’effondrer en même temps
Ironiquement, pas mal d’entreprises investissent à la fois dans la création de leurs propres bots et dans des moyens de bloquer ceux des autres
Si on applique une charge de 5 W pendant 2 secondes, cela fait 0,002 Wh, et comme il faut aussi que les smartphones puissent passer, on ne peut pas imposer une preuve de travail de plusieurs dizaines de secondes. Même avec 8 milliards de vérifications par jour pendant un an, on arrive à 8 GWh
Il y a une raison pour laquelle
privacy.resistfingerprintingne s’active pas même quand on choisit « Strict » dans « Enhanced Privacy Protection ». Je l’ai utilisé longtemps, mais les sites se cassaient bizarrement, donc je devais sans cesse le désactiver et ajouter des contournementsSur certains sites, la gestion du fuseau horaire se dérègle, au point que j’ai failli rater plusieurs rendez-vous. Pour faire comprendre aux utilisateurs que Firefox n’est pas cassé, il faudrait quasiment une bannière permanente du style : « Si des sites se cassent, affichent des glitches bizarres, si l’heure de votre ordinateur semble fausse, si les polices sont étranges ou si des vidéos ne se lancent parfois pas, cliquez ici pour désactiver la protection contre l’empreinte »
Fait intéressant, Turnstile casse avec
resistfingerprintingmais fonctionne avecfingerprintingProtection. Ce dernier semble avoir été conçu en tenant compte de ce genre de situation pourrieEn mode Strict, on s’attend dans une certaine mesure à ce que des sites cassent, mais pas à ce que les voies de pistage restent grandes ouvertes. Ça paraît trompeur
Je maintiens un navigateur minoritaire[0], et plusieurs utilisateurs rencontrent ce problème depuis quelques semaines[1]. Pour l’instant, je ne pense pas que ce soit un bug du navigateur, mais il peut évidemment y avoir des bugs liés, et j’aimerais plus de regards dessus : toute idée ou aide pour améliorer ou atténuer la situation est bienvenue
[0]: https://konform-browser.codeberg.page/
[1]: Je ne sais pas si c’est la majorité ou tout le monde. Sans télémétrie, on dépend des retours utilisateurs et de nos propres tests
« Si on a remarqué que vous vous déguisiez, c’est que vous ne vous déguisiez pas assez bien. »
Cette stupide guerre contre les bots mène à l’effondrement d’Internet et finira par en faire un autre jardin clos où seuls des agents approuvés et hostiles aux utilisateurs seront autorisés. Il ne faut pas se laisser embobiner par le baratin sur les « scrapers IA » : ce n’est qu’un moyen de fabriquer le consentement
Est-ce que Google et Cloudflare ont conclu un accord pour rendre l’usage des navigateurs non Chrome plus difficile ? La pression pour utiliser Chrome ne cesse d’augmenter, et ce qu’on peut faire en matière de filtrage publicitaire dans Chrome ne cesse de diminuer
Dès que vous cachez quelque chose, vous êtes automatiquement classé dans la catégorie des « agents qui ont une raison de se cacher »
Pour être clair, c’est bien là le problème central. Puisqu’une si grande partie d’Internet passe par Cloudflare, il devrait y avoir suffisamment de signaux alternatifs permettant de montrer plus fortement qu’on n’est pas un acteur malveillant, plutôt que de dépendre d’un seul signal précis
Cela dit, comme il y a très peu d’utilisateurs avec cette configuration dans la base installée, il se peut qu’il faille très longtemps avant qu’une vraie solution émerge
Ils disent : « Vous semblez vouloir cacher votre identité », mais au départ ils n’avaient pas le droit d’exiger cela
Je ne connaissais pas
privacy.resistfingerprinting, mais désormais j’ai l’intention de laisser échouer tous les Cloudflare TurnstileLe réglage
privacy.resistfingerprintingest destiné à Tor BrowserIl est aussi activé par défaut dans Konform Browser et Mullvad Browser, qui reprennent beaucoup de correctifs de Tor Browser liés à la vie privée et à la sécurité
J’aime bien cet adage lié à la criminalité : si X % de la population enfreint une loi, c’est probablement qu’il faut l’abolir. Les drogues récréatives en sont un exemple évident
Si le rendu canvas aléatoire a été considéré comme un comportement de bot, mais que désormais tous les utilisateurs de Firefox le font, est-ce que Cloudflare ne devrait pas simplement le « légaliser » aussi ?