Chrome 148 te delata con matemáticas: una función de tangente hiperbólica expone tu sistema operativo

Código en pantalla de laptop con gráficos de navegador
Una línea de JavaScript basta para saber si estás en Windows, macOS o Linux. Bienvenido al fingerprinting matemático.

Tu navegador Chrome te está traicionando — y no es por cookies, ni por tu IP, ni por tu User-Agent. Es por cómo calcula una función matemática que probablemente jamás has usado en tu vida.

Desde Chrome 148, cada vez que abres el navegador, una simple operación de tangente hiperbólica (Math.tanh) puede delatar si estás en Windows, macOS o Linux con una precisión casi perfecta. Y lo peor: no hay forma de bloquearlo.

El problema: una función que debería ser idéntica en todos lados

La función Math.tanh (tangente hiperbólica) es una función matemática estándar. Debería devolver exactamente el mismo resultado sin importar dónde se ejecute. Es matemática pura, no debería tener ambigüedad.

Pero en la práctica no es así.

El estándar IEEE 754 no exige que tanh tenga correct rounding (redondeo perfecto). Hacerlo es caro computacionalmente, así que cada sistema operativo implementa su propia versión: Linux usa glibc, macOS usa libsystem_m, Windows usa UCRT. Cada una tiene sus propios coeficientes, tablas de búsqueda y constantes de optimización.

El resultado: en aproximadamente 1 de cada 4 entradas, las tres implementaciones producen un resultado que difiere por una unidad en el último bit (1 ULP).

La demo que lo cambia todo

Prueba esto en la consola de Chrome 148 o superior:

Math.tanh(0.6640367702678491)

Dependiendo de tu sistema operativo, verás:

Tres sistemas, tres resultados diferentes. En el último decimal, pero diferente.

Para un sistema anti-bot esto es oro puro. No necesita más que una tabla de consulta: si Chrome devuelve el patrón de macOS, pero tu User-Agent dice Windows, mentiste. Eres un bot.

¿Por qué Chrome cambió esto?

Hasta Chrome 147, el motor V8 de Chrome usaba su propia implementación de tanh (fdlibm, empaquetada directamente en V8). Esto significaba que todos los sistemas operativos devolvían exactamente los mismos bits. No había fuga de información.

Pero en Chrome 148, Google decidió delegar el cálculo de tanh a la función matemática del sistema operativo anfitrión mediante el commit 422029f6 en V8. ¿El motivo? Rendimiento. La función nativa del SO está más optimizada para el hardware específico.

El parche que aceleró Chrome también creó una puerta trasera de privacidad que ningún usuario puede cerrar.

Y no es solo Math.tanh: las funciones trigonométricas de CSS, el compresor de Web Audio, y otras APIs también enrutan a través de la libm del sistema. La superficie de ataque es mucho más amplia de lo que parece.

Lo que esto significa para tu privacidad

Hasta ahora, los sistemas de fingerprinting de navegadores usaban señales como:

Todas estas señales se pueden falsificar con extensiones, navegadores anti-detección, o simplemente cambiando el User-Agent. Pero la firma matemática de Math.tanh no se puede falsificar sin modificar el binario de Chrome.

Es la primera señal de fingerprinting que es funcionalmente imposible de ocultar para el usuario promedio.

Claro, puedes parchear JavaScript con Math.tanh = x => oldTanh(x) + Math.random()/10000000 para añadir ruido. Pero los sistemas anti-bot sofisticados ya están detectando esa inyección también, porque saben qué patrón debe devolver tu SO.

¿Quién está usando esto?

El artículo original fue publicado por Scrapfly, una empresa que vende navegadores headless para scraping. Ellos mismos admiten que ya están integrando esta señal en sus sistemas de detección de bots. Y si ellos lo están haciendo, Cloudflare, Akamai, Datadome y todos los proveedores anti-bot ya lo saben.

En Hacker News, el post recibió más de 340 puntos y 160 comentarios en horas, con discusiones acaloradas sobre si esto debería considerarse un bug de seguridad o una característica esperada.

¿Hay solución?

Técnicamente, sí. Google podría hacer una de estas dos cosas:

  1. Volver a empaquetar fdlibm en V8 para todas las funciones delegadas, sacrificando algo de rendimiento en favor de la consistencia multiplataforma.
  2. Portar la math library de Apple a todas las plataformas, dando el mismo resultado en todos lados. Pero Apple no va a licenciar libsystem_m a Google para Windows y Linux así nomás.

La realidad es que Google probablemente no va a hacer nada. Para Google, la consistencia de fingerprinting no es un problema — ellos son los que más se benefician de la publicidad personalizada que el fingerprinting permite.

La ironía

Chromes 148, 149 y 150 ya filtran esta información. Millones de usuarios están expuestos y ni siquiera lo saben. Mientras tanto, los proveedores de seguridad y los bots de scraping ya actualizaron sus sistemas para leer esta señal silenciosa.

Tú, como usuario, no tienes control sobre esto. No hay una bandera en chrome://flags para desactivar la delegación de tanh. No hay una extensión que lo parchee de forma confiable. Es parte del navegador ahora.

Entonces, ¿qué puedes hacer?

Porque al final del día, el fingerprinting no se va a resolver con extensiones ni con VPNs. Se resuelve cuando los navegadores decidan que la privacidad de sus usuarios importa más que unos milisegundos de velocidad.

Comparte esto con alguien que todavía cree que borrar el historial y las cookies lo hace invisible en Chrome.