- La verificación de dispositivo “Verify you're human” de Cloudflare Turnstile entra en un bucle infinito desde hace aproximadamente una semana en navegadores basados en WebKitGTK
- La causa directa aparente de que se bloquee el acceso a varios sitios web es que Cloudflare intenta obtener la huella digital del dispositivo mediante WebGL
- El aviso de Turnstile indica que utiliza la recopilación de huellas del navegador para confirmar si se trata de una persona, y que las herramientas de bloqueo o aleatorización pueden hacer que parezca un bot
- WebKit lleva años bloqueando este tipo de funciones, y no parece tratarse de una opción de privacidad que el usuario pueda desactivar fácilmente
- Mientras que se presume que Safari tiene una excepción, todos los navegadores WebKitGTK quedan bloqueados, y los usuarios de Firefox con protecciones de privacidad también podrían verse afectados
Verificación de Turnstile que se repite en WebKitGTK
- La verificación de dispositivo “Verify you're human” de Cloudflare Turnstile entra en un bucle infinito desde hace aproximadamente una semana en navegadores basados en WebKitGTK, bloqueando el acceso a varios sitios web
- La causa aparente del bloqueo de acceso es que Cloudflare intenta obtener la huella digital del dispositivo mediante WebGL
- El texto informativo de Turnstile señala que utiliza la recopilación de huellas del navegador para determinar si se trata de una persona
- Las herramientas de privacidad que bloquean o aleatorizan la huella digital pueden hacer que el navegador parezca un bot que intenta ocultar su identidad
- WebKit lleva años bloqueando este tipo de funciones, y no parece ser una función de privacidad que pueda desactivarse fácilmente
- Mientras se presume que Cloudflare ha dejado una excepción para Safari, todos los navegadores WebKitGTK han quedado en estado de bloqueo
Comportamiento de protección relacionado en Firefox
- La protección contra huellas digitales de WebGL en Mozilla Firefox tiene el problema Bugzilla#1916271: Gecko reveals sanitized GPU Characteristics; webkit and blink return hardcoded strings for all users
privacy.resistfingerprintingno se activa aunque se seleccione “Strict” o “Enhanced Privacy Protection” en la configuración- Los usuarios de Firefox orientados a la privacidad que hayan activado manualmente
privacy.resistfingerprintingpodrían no poder superar en el futuro la verificación de dispositivo de Cloudflare
2 comentarios
Comentarios en Lobste.rs
Parece que en el artículo mezclaron varias cosas sobre Firefox. Habiendo estado en el equipo que hizo directamente este trabajo, puedo decir que las protecciones contra huellas digitales de Firefox funcionan de varias maneras.
Primero, Firefox limita la información en las cadenas de vendor/renderer de WebGL, incluyendo las llamadas cadenas “unmasked”. Fatih subió un código de ejemplo para comprobarlo directamente en el comentario 14. La afirmación de que rompieron algo es completamente incorrecta.
Segundo, Firefox también aleatoriza la salida de canvas. Si llamas a
toDataURL()sobre el mismo canvas, el valor devuelto cambia sutilmente entre sesiones. Por ejemplo, puedes probarlo entre modo privado/modo normal o en distintas container tabs.Tercero, esta función y otras protecciones recientes contra huellas digitales se diseñaron con base en análisis empírico para funcionar de forma efectiva sin romper la web. La mayoría se aplica por defecto, y si quieres más, puedes cambiar “Enhanced Tracking Protection” a strict en la configuración.
Cuarto, el modo
resistFingerprintingno está en la configuración y solo se puede acceder medianteabout:config, porque se sabe que puede romper la web. Lo mantienen para Tor Browser, que es un fork de Firefox, pero personalmente creo que la protección de Enhanced Tracking Protection es mucho mejor.No estoy defendiendo el fingerprinting, pero por parte de mi trabajo actual me interesan las herramientas de bloqueo de bots.
Entiendo que lo que Cloudflare busca con Turnstile es crear un widget de defensa contra bots en el que las personas no tengan que resolver un CAPTCHA. Probablemente lo haga observando el comportamiento en varios sitios mediante fingerprinting y dejando pasar a la mayoría de los usuarios; me pregunto si esa comprensión es correcta.
¿Es posible construir un widget que no requiera resolver CAPTCHAs sin usar fingerprinting? ¿Es posible en primer lugar? También he escuchado que no es tan difícil evadir Turnstile :tm:. ¿Al final todos los widgets de bloqueo de bots dependen de seguridad por oscuridad?
No importa mucho si la persona anda por varios sitios; lo clave es detectar si está entrando repetidamente al mismo sitio.
Para crear un widget sin CAPTCHA y sin fingerprinting, la attestación de hardware también funciona. Pero a todo el mundo le desagrada. Apple ofrece attestación de hardware, y como Cloudflare la usa en Safari, Safari puede pasar aunque tenga aleatorización de canvas. A diferencia de lo que dice esta entrada de blog, no es que Cloudflare haya hecho una excepción con Safari.
También se puede exigir proof of work, pero solo sirve si te parece bien excluir a muchos usuarios web que solo tienen teléfonos Android de gama baja, y si el valor de cada acción del bot es lo bastante bajo como para que al operador no le convenga realizar ese proof of work. A veces esas condiciones se cumplen, pero no aplican para sitios como tiendas en línea o bancos.
Fuera de eso, no hay una buena solución. No conozco bien Turnstile, pero el producto de la empresa donde estuve sí era claramente difícil de evadir a gran escala. Eso sí, cuando no era a gran escala, deliberadamente no lo hacíamos demasiado difícil, y no me sorprendería que Cloudflare haya tomado la misma decisión.
El objetivo de todos los widgets de bloqueo de bots no es hacer imposibles los bots, sino volver económicamente inviable atacar un sitio web con bots. Por eso el juego aquí es distinto al de otras áreas de ciberseguridad, y la oscuridad funciona bastante bien. La meta es que, con el tiempo, el adversario tenga que seguir incurriendo en costos adicionales.
canvas/webgles, en la práctica, un problema ya resuelto para los web scrapers. Incluso aparece como pregunta en entrevistas para puestos relacionados con web scraping.La solución común es extraer los comandos de dibujo. Eso se puede hacer usando un navegador modificado que haga dump de los comandos, o desofuscando el script.
Luego subes el script extraído de canvas/webgl a un sitio propio para generar, a partir de tus visitantes, huellas reutilizables por el bot.
Este método es bastante robusto. Estos scripts de fingerprinting casi nunca cambian, porque si cambian se invalida la base de datos de pares canvas → GPU/vendor/browser/OS.
En resumen, este es otro caso en el que solo se incomoda más a los usuarios normales, mientras que los web scrapers serios ya conocen varias estrategias de evasión.
Opiniones de Hacker News
Se sabe que Cloudflare usa fingerprinting del navegador para detectar scrapers. Por ejemplo, compara la huella JA3 con el user agent para bloquear cosas como cURL y permitir OkHttp (cliente de Android), pero es fácil hacerse pasar por otro usando paquetes como CycleTLS [1]
No quiero defenderlo porque bloquea gran parte de internet en nombre de la “protección contra bots”, pero si no van a usar prueba de trabajo (PoW), el fingerprinting puede ser un método realista, y el resultado es que la privacidad de todos los involucrados queda completamente destruida
Cromite, un fork de Chromium para Android centrado en la privacidad, tiene problemas constantes con Cloudflare Turnstile [2], porque Cloudflare recolecta huellas de varias maneras para dejar pasar el challenge
Para resolverlo, hay que entrar al programa Cloudflare Browser Developer, pero exigían firmar un NDA, y parece razonable que el mantenedor del proyecto se haya negado
Si quieren ver qué tan a fondo escarba Cloudflare en el fingerprinting del navegador, basta con mirar en el issue [2] qué flags hay que desactivar para pasar el challenge. Como mínimo, Cloudflare podría ser lo bastante flexible como para reemplazarlo con prueba de trabajo en lugar de simplemente bloquear a personas al enviar formularios o entrar a sitios web
[1]: https://github.com/Danny-Dasilva/CycleTLS
[2]: https://github.com/uazo/cromite/issues/2365
Otra forma de llegar al resultado deseado podría ser asignar reputación a IP residenciales y a rangos comerciales. Eso probablemente haría que los proveedores fueran mucho más cuidadosos con el abuso de IP, pero entonces podría venirse abajo al mismo tiempo el negocio de DDoS tanto del lado atacante como del lado defensor
Irónicamente, hay bastantes empresas que invierten en cómo bloquear bots ajenos mientras construyen los suyos
Si aplicas una carga de 5W durante 2 segundos, son 0.002Wh, y como también tienen que pasar los smartphones, no puedes ponerles una prueba de trabajo de decenas de segundos. Incluso si haces 8 mil millones de verificaciones al día durante un año, serían 8GWh
Hay una razón por la que
privacy.resistfingerprintingno se activa aunque elijas “Strict” y “Enhanced Privacy Protection”. Lo usé activado durante bastante tiempo, pero los sitios se rompían de formas raras, así que tenía que apagarlo seguido y agregar excepcionesEn ciertos sitios se descomponía el manejo de zonas horarias, y casi pierdo citas varias veces. Para hacerle saber al usuario que Firefox no está roto, prácticamente haría falta un banner permanente tipo: “si el sitio se ve roto, aparecen glitches raros, la hora de tu computadora está mal, la tipografía se ve extraña o a veces no sale video, haz clic aquí para desactivar la protección contra fingerprinting”
Curiosamente, Turnstile se rompe con
resistfingerprinting, pero funciona confingerprintingProtection. Parece que esta última sí tuvo en cuenta este tipo de basuraCon la configuración Strict uno ya espera hasta cierto punto que algunos sitios se rompan, pero no espera que las vías de rastreo sigan completamente abiertas. Se siente engañoso
Mantengo un navegador minoritario[0], y desde hace unas semanas varios usuarios están teniendo este problema[1]. Por ahora no lo veo como un bug del navegador, aunque claro que podría haber alguno relacionado, y estaría bien que más gente lo viera, así que necesito ayuda e ideas para mejorar o mitigar la situación
[0]: https://konform-browser.codeberg.page/
[1]: No sé si son la mayoría o todos. Estamos dependiendo de reportes de usuarios y de pruebas propias sin telemetría
“Si descubrieron que te estabas disfrazando, es que no te disfrazaste con la suficiente intensidad.”
Esta estúpida guerra contra los bots va a llevar al colapso de internet y terminará convirtiéndolo en otro jardín amurallado donde solo se permita entrar a agentes hostiles para el usuario pero “aprobados”. No hay que tragarse las tonterías sobre “scrapers de IA”. Es solo un medio para fabricar consentimiento
¿Google y Cloudflare hicieron algún trato para dificultar el uso de navegadores que no sean Chrome? La presión para usar Chrome sigue creciendo, y lo que se puede hacer en Chrome para filtrar anuncios sigue reduciéndose
Si escondes algo, automáticamente te clasifican como “un agente que tiene razones para esconder algo”
Para ser claros, ese es justo el problema central. Dado que una parte tan grande de internet pasa por Cloudflare, debería haber suficientes señales alternativas para demostrar que no eres un actor malicioso, más allá de una sola señal en particular
Dicho eso, como casi no hay usuarios con esa misma configuración dentro de la base instalada, tal vez falte muchísimo para que aparezca una solución real
Dicen “parece que está intentando ocultar su identidad”, pero para empezar nunca tuvieron derecho a exigir eso
No conocía
privacy.resistfingerprinting, pero de ahora en adelante pienso dejar que falle todo Cloudflare TurnstileLa configuración
privacy.resistfingerprintinges para Tor BrowserTambién viene activada por defecto en Konform Browser y Mullvad Browser, que incorporan muchos de los parches de privacidad y seguridad de Tor Browser
Me gusta ese dicho del ámbito criminal: si X% de la población está violando cierta ley, entonces esa ley debería abolirse. Las drogas recreativas son un ejemplo clarísimo
Si el renderizado aleatorio de canvas era algo que se perseguía como comportamiento de bot y ahora lo hace todo el mundo que usa Firefox, entonces quizás Cloudflare también debería simplemente “legalizarlo”