volver al inicio Más artículos

Fingerprinting de WebGL: lo que tu GPU le cuenta a cada web

Leyendo tu GPU a través de WebGL...

Cualquier página web puede preguntarle a tu navegador cómo se llama tu tarjeta gráfica. Sin solicitud de permiso, sin banner de cookies, con unas pocas líneas de JavaScript. En un portátil con Windows cualquiera, la respuesta se parece a ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00002503) Direct3D11 vs_5_0 ps_5_0, D3D11), y el widget de esta página te enseña lo que dice la tuya.

Eso es el fingerprinting de WebGL, y es la razón por la que los verificadores de huellas muestran mensajes como “WebGL fingerprinting is present” o, más inquietante, “WebGL renderer info is spoofed”. Lo primero se cumple en prácticamente cualquier navegador del planeta. Lo segundo significa que han pillado a tu navegador contradiciéndose a sí mismo, normalmente por culpa de una extensión que instalaste tú.

La versión corta: WebGL expone tu GPU dos veces: una como nombre (la cadena del renderizador desenmascarado) y otra como píxeles (cómo dibuja tu GPU una escena de prueba). "WebGL fingerprinting is present" solo significa que WebGL está activado, que es lo normal. "Spoofed" significa que esas dos versiones se contradicen entre sí o con el resto de tu navegador, y ocultar el nombre mal hace más ruido que no ocultarlo en absoluto.

Qué lee de tu navegador una prueba de fingerprint de WebGL

WebGL es la API del navegador para dibujar gráficos 3D con tu GPU. Es lo que mueve Google Maps, los juegos de navegador y los configuradores de productos en 3D, y para hacer ese trabajo tiene que hablar con hardware real. Un script de fingerprinting la aprovecha de dos maneras.

Pregunta. La extensión WEBGL_debug_renderer_info añade dos constantes, UNMASKED_VENDOR_WEBGL y UNMASKED_RENDERER_WEBGL. El nombre promete más de lo que da: la extensión no desenmascara nada, simplemente devuelve el nombre de la GPU que da el driver en lugar de un marcador genérico como “WebKit WebGL”. A su alrededor hay decenas de valores de capacidad (el tamaño máximo de textura, las extensiones compatibles, la precisión de los shaders) que cambian entre familias de GPU y versiones de driver. Todo junto es barato de leer y se mantiene estable durante meses.

Observa. El script dibuja una escena pequeña fuera de pantalla, lee los píxeles con readPixels y calcula su hash. Cada GPU y cada driver redondea los colores, suaviza los bordes y resuelve las operaciones de los shaders de forma ligeramente distinta, así que el hash también cambia. Es la misma idea que el fingerprinting de canvas, una capa más cerca del hardware.

La gente se imagina ese nombre como algo vago tipo “gráficos Intel”. La cadena real parece una ficha técnica:

Todo lo que delata una sola cadena
ANGLE (NVIDIA, NVIDIA GeForce RTX 3060 (0x00002503) Direct3D11 vs_5_0 ps_5_0, D3D11)
  • ANGLE: la capa que convierte WebGL en llamadas a Direct3D, Metal u OpenGL. Chrome dibuja a través de ella en todos los sistemas operativos de escritorio, Firefox solo en Windows; este formato exacto es el de Chrome.
  • Fabricante de la GPU
  • El chip gráfico exacto, que de paso da una pista de lo cara que es la máquina
  • ID de dispositivo PCI: distingue variantes del chip que se venden con el mismo nombre
  • Direct3D: solo existe en Windows
Lo que devuelve Chrome para UNMASKED_RENDERER_WEBGL, sin pedir permiso. La API gráfica suele delatar el sistema operativo por sí sola.

Direct3D solo existe en Windows y Metal solo en hardware de Apple, así que en la mayoría de máquinas la cadena de la GPU zanja por sí sola la cuestión del sistema operativo, diga lo que diga tu User-Agent. Es la misma verificación cruzada que repasamos en Un navegador, cinco declaraciones de sistema operativo.

¿Hasta qué punto es única una huella de WebGL?

Por sí sola, menos de lo que podrías temer. Millones de personas tienen una RTX 3060, y todos los MacBook con M2 reportan la misma cadena. WebGL te mete en un grupo de hardware, y una huella se construye apilando grupos. Una RTX 3060 es de lo más común. Una RTX 3060 con una pantalla 1440p, en la zona horaria de Ámsterdam y con neerlandés e inglés como idiomas ya es un grupo bastante pequeño.

Lo que la hace valiosa para los rastreadores es la persistencia: puedes cambiar de navegador y borrar todas las cookies, y tu GPU seguirá siendo la misma. Los investigadores han ido todavía más lejos. El estudio DrawnApart, de 2022, cronometraba cargas de trabajo diminutas en las unidades de ejecución de una GPU y conseguía distinguir máquinas con hardware idéntico y cadenas de renderizador idénticas.

“WebGL fingerprinting is present” no es una advertencia

Cuando un verificador te suelta “WebGL fingerprinting is present”, significa una sola cosa: WebGL está activado y se puede leer. Es el estado normal de cualquier navegador convencional en cualquier ordenador o móvil. No indica que algo vaya mal, y WebGL no es algo de lo que tengas que protegerte: el coste para tu privacidad es la huella, y de la huella trata el resto de esta página.

La tentación es desactivar WebGL. No lo hagas. Desactivarlo cambia una GPU que compartes con millones de personas por un rasgo que casi nadie tiene, y rompe todas las webs que dibujan con la GPU. Además, un navegador que rechaza una API estándar es justo el tipo de rareza que te hace ganar CAPTCHAs de regalo.

Por qué un verificador dice “WebGL renderer info is spoofed”

Este mensaje aparece sobre todo en el solucionador de problemas de Cloudflare Turnstile, bajo una comprobación llamada “Graphics Information Appears Fake”, y la gente suele toparse con él cuando un desafío se queda en bucle en vez de dejarte pasar. Nadie puede ver tu GPU directamente, así que un verificador no puede demostrar qué hardware tienes. Lo que sí puede hacer es cotejar entre sí lo que declara tu navegador, y los valores falsos rara vez sobreviven a eso. Estas son las pruebas. El widget de esta página ejecuta las cuatro primeras:

  • La API gráfica no encaja con el sistema operativo. Una cadena de renderizador que menciona Metal, enviada por un navegador cuyo User-Agent dice Windows.
  • El proveedor y el renderizador no coinciden. El campo del proveedor sigue diciendo NVIDIA porque la falsificación solo reescribió el renderizador.
  • Las funciones de WebGL están parcheadas. Para cambiar lo que devuelve getParameter, una extensión tiene que reemplazarla, y una función nativa reemplazada sin mucho cuidado deja de reportar [native code]. Los parches mejor escondidos exigen comprobaciones más sutiles. La misma trampa pilla a las herramientas de automatización en nuestra prueba de detección de bots.
  • Los píxeles cambian entre lecturas. En la práctica, una GPU real devuelve píxeles idénticos cuando dibuja la misma escena dos veces. Algunas extensiones anti-fingerprinting inyectan ruido aleatorio nuevo en cada lectura, así que dos dibujos dan dos hashes. Esa inestabilidad es más rara que cualquier GPU del mercado.
  • El nombre no encaja con los píxeles. Los proveedores antifraude pueden comparar lo que renderiza tu navegador con lo que producen dispositivos conocidos. Di que tienes una RTX 3060 mientras dibujas como unos gráficos integrados de Intel y el hash del renderizado te delata. Un solo navegador no puede hacer esta comprobación, así que el widget se la salta.

Cambia de configuración para ver qué señales dispara cada una:

Lo que ve un verificador de falsificaciones
Renderizador reportado ANGLE (Apple, ANGLE Metal Renderer: Apple M2, Unspecified Version)
  • marcada
    La API gráfica encaja con el SO
    Metal con un User-Agent de Windows
  • marcada
    El proveedor coincide con el renderizador
    el proveedor sigue diciendo NVIDIA
  • marcada
    Las funciones de WebGL son nativas
    getParameter ha sido reemplazada
  • superada
    Mismo dibujo, mismos píxeles
    dos dibujos, un solo hash
Cambiar el nombre dispara tres comprobaciones a la vez: el nombre nuevo pertenece a otro sistema operativo, nadie se acordó del campo del proveedor y el propio cambio es una función parcheada.

En las dos configuraciones falsificadas la GPU está perfectamente; cada alerta sale de la propia falsificación. Si te ha saltado el aviso de “spoofed” sin haber intentado falsificar nada, revisa tu lista de extensiones en busca de algún “defensor” de WebGL o de canvas. Es el culpable habitual, y el solucionador de problemas de Cloudflare señala uno con nombre y apellidos: WebGL Fingerprint Defender.

Cuando el aviso es una falsa alarma

No todas las alertas significan que alguien ha manipulado tu navegador. Algunas configuraciones de lo más corrientes también hacen saltar las alarmas de los verificadores:

  • Escritorio remoto y máquinas virtuales. Sin una GPU real disponible, el navegador recurre a un renderizador por software como llvmpipe o el Basic Render Driver de Microsoft, o se queda sin WebGL directamente. Los servidores que ejecutan bots tienen exactamente el mismo aspecto, así que los verificadores lo miran con recelo.
  • Portátiles con GPU híbrida. Un portátil con gráficos integrados y dedicados puede reportar una GPU u otra según el modo de energía o la que se le haya asignado al navegador.
  • Navegadores que te protegen a propósito. Safari le reporta un “Apple GPU” genérico a todas las webs. Firefox reduce el nombre del renderizador a una familia amplia. Brave da a todos sus usuarios el mismo nombre de GPU genérico y añade pequeñas variaciones por sitio a otras salidas de WebGL, algo que llama farbling. Los buenos verificadores tienen estos casos en lista blanca. Los perezosos los marcan igualmente.

La diferencia entre estos casos y una falsificación es la coherencia. Que Safari diga “Apple GPU” en un dispositivo Apple es una respuesta compartida y honesta. Un navegador en Windows que asegura tener una GPU de Apple es una contradicción.

Cómo cambiar o bloquear tu huella de WebGL

  1. Deja WebGL activado. Desactivarlo te hace más raro, no más seguro, y rompe webs de verdad.
  2. Quita las extensiones que falsifican WebGL. Las que cambian el nombre y las que inyectan ruido crean justo las contradicciones que buscan los verificadores. Si el widget de arriba marca funciones parcheadas o píxeles inestables, el sospechoso habitual es una extensión.
  3. Si necesitas otra identidad, cámbiala entera. Gestionar varias cuentas para verificación de anuncios, comercio electrónico o redes sociales implica que cada perfil necesita una GPU que encaje con su sistema operativo, un proveedor que encaje con su renderizador y unos píxeles que encajen con su GPU. Eso es difícil de falsificar desde JavaScript, y por eso los navegadores anti-detección lo hacen dentro del motor. Incogniton da a cada perfil una identidad de WebGL coherente a nivel de navegador, sin funciones parcheadas que un verificador pueda encontrar.

Después, ejecuta el análisis completo del navegador para ver cómo encaja tu GPU con todo lo demás que reporta tu navegador, desde la zona horaria hasta las fuentes.

Logotipo de Incogniton

Mejora tu privacidad

Flecha