Saltar al contenido principal
es/blog/obscura/research/uncontrollable/browser-features-quirks/

obscura/research/uncontrollable/browser-features-quirks

7 min de lectura

Categoría: Motor del Navegador / Plataforma Web


1. Descripción

Cada motor de navegador (Blink/Chrome, Gecko/Firefox, WebKit/Safari) implementa un subconjunto diferente de APIs web y características CSS. Además, cada uno tiene rarezas de renderizado únicas, configuraciones por defecto y patrones de comportamiento. Estas son inherentes al navegador — ningún proxy puede cambiarlas porque están compiladas en el binario del navegador.


2. Vectores

2.1 Soporte de Características de API Web

El navegador expone ~100+ pruebas de características que los scripts de fingerprinting enumeran:

Características de alto valor para identificación:

API Chrome Firefox Safari Notas
WebGL 2 Todos modernos
WebGPU (flag) Solo Chrome
WebUSB Solo Chrome
Web Bluetooth Solo Chrome
Web NFC Android Solo Chrome
Web Serial Solo Chrome
Web Share Varía según plataforma
Battery API Solo Firefox
Speech Synthesis Varía según voz
GamePad API Parcial Safari limitado
MathML Solo Firefox/Safari
Web Workers Todos, pero Shared Workers varía
Service Workers Todos modernos
CSS Container Queries Safari tardío en adoptar
CSS Subgrid Safari tardío en adoptar

Entropía: ~10-15 bits (pero altamente correlacionado — se reduce a familia de navegador + versión)

2.2 Soporte de Características CSS

Cientos de propiedades y valores CSS varían según el navegador:

/* Prueba mediante @supports */
@supports (backdrop-filter: blur(1px)) { /* Chrome + Safari */ }
@supports (-webkit-backdrop-filter: blur(1px)) { /* Safari legacy */ }
@supports (accent-color: red) { /* Chrome 93+, Firefox 92+, Safari 15.4+ */ }
@supports (container-type: inline-size) { /* Chrome 105+, Firefox 110+, Safari 16+ */ }

Entropía: ~8-12 bits (identifica motor de navegador + versión principal)

2.3 Rarezas de Implementación del Navegador

Cada navegador tiene un comportamiento de renderizado único:

Rareza Ejemplo Navegador
Ancho de scrollbar 12px vs 15px vs 0px (superpuesto) Dependiente del SO*
Estilo de elementos de formulario Padding de botones, border radius Específico del motor
Renderizado Unicode Versión de soporte de emojis Dependiente de SO+navegador
Comportamiento de <details> Animación de abrir/cerrar Específico del motor
Análisis de Date() Formatos de fecha no estándar Específico del motor
Orden de JSON.stringify() Orden de enumeración de propiedades Específico del motor (fijo en ES6)
Resolución de performance.now() 5μs vs 100μs vs 1ms Chrome vs Firefox vs Safari

*El ancho de scrollbar revela el SO: Windows=12-17px, macOS=variable (fino/superpuesto), Linux=varía

2.4 Métricas de Renderizado de Fuentes

Incluso con las mismas fuentes instaladas, diferentes combinaciones de SO/navegador renderizan el texto de manera diferente:

const span = document.createElement('span')
span.textContent = 'mmmmmmmmmmlli'
document.body.appendChild(span)
const width = span.getBoundingClientRect().width
// La anchura varía según el motor de renderizado de fuentes del SO (FreeType, CoreText, DirectWrite)

Entropía: ~4-6 bits

2.5 Configuración por Defecto del Navegador

Los navegadores vienen con diferentes valores por defecto:

Configuración Chrome Firefox Safari
Fuente por defecto Times New Roman Times New Roman Times
Tamaño de fuente por defecto 16px 16px 16px
Tamaño mínimo de fuente 0px 0px 12px (varía)
Idioma por defecto Locale del SO Locale del SO Locale del SO
Carga automática de imágenes On On On
JavaScript On On On
Cookies Permitidas Permitidas Permitidas (bloqueadas en privado)

2.6 Específico de Chrome: Reducción de User-Agent

Chrome reduce progresivamente la información del User-Agent. La nueva API navigator.userAgentData proporciona datos estructurados:

  • Lista de marcas (ej., "Google Chrome";v="120")
  • Plataforma (ej., "Windows", "macOS")
  • Flag de móvil
  • Arquitectura, bitness, modelo, platformVersion (pueden omitirse)

Notable: Safari no implementa userAgentData, y Firefox solo recientemente comenzó. Esto es en sí mismo una señal.


3. Fortalezas del Atacante

Fortaleza Explicación
No puede cambiarse Las características del navegador están compiladas en el navegador
Sin permiso requerido Las pruebas de características se ejecutan silenciosamente
Enumeración rápida 100+ características probadas en <10ms
Estable entre versiones Las características rara vez cambian dentro de una versión del navegador
Vector binario (sí/no) Puede combinarse fácilmente en un hash único

4. Debilidades del Atacante

Debilidad Explicación Explotable?
Baja entropía individual Identificación básica del navegador; no usuario individual No
Bloqueable por DNS Los scripts de detección de características deben cargarse del servidor
Correlacionado Todos los usuarios de Chrome 120 se ven iguales No
Cambia con actualizaciones Las actualizaciones del navegador cambian los conjuntos de características Ocasional
El modo privado afecta Privado/incógnito modifica algunas características Parcial

5. Detección de Manipulación

Técnica Cómo Funciona
Inconsistencia de características Declarar características de Chrome pero devolver conjunto de características de Firefox
Características esperadas faltantes Chrome sin WebUSB es sospechoso
Anomalías de temporización ¿La enumeración de características tarda demasiado?
Vector de características demasiado limpio Los navegadores reales tienen algunas características raras faltantes

6. Mitigaciones para Obscura

6.1 Lo Que Obscura Puede Hacer

Mitigación Efectividad Detectabilidad Implementación
Bloqueo DNS de dominios de fingerprinting Alta (previene enumeración) Baja Gestión de listas de bloqueo
Inyectar JS de anulación de características Baja (demasiadas características) Alta Anular APIs individuales
Aceptar — las características del navegador son de baja entropía Pasivo Ninguna Documentar riesgo residual

6.2 Lo Que Obscura No Puede Hacer

No Puede Por Qué
Añadir características que el navegador no tiene No puede hacer que Firefox soporte WebUSB
Eliminar características que el navegador tiene No puede deshabilitar características desde el proxy (el usuario puede mediante flags)
Cambiar el renderizado CSS El renderizado está en el motor del navegador
Cambiar las métricas de fuentes El renderizado de fuentes está en el SO/navegador

6.3 Enfoque Recomendado

1. Bloqueo DNS de dominios de fingerprinting  (previene enumeración de características — mejor defensa)
2. Consistencia de perfil                     (al menos hacer que el navegador declarado coincida con las características reales)
3. Aceptar riesgo residual                    (el vector de características principalmente identifica versión del navegador, no usuario)

7. Referencias de Investigación

  • Eckersley, P. (2010). "How Unique Is Your Web Browser?" PETS 2010.
  • Mulazzani, M. et al. (2013). "Fast and Reliable Browser Fingerprinting." ACSAC 2013.
  • Laperdrix, P. et al. (2020). "Browser Fingerprinting: A Survey." ACM TOIT.
  • Modernizr (2026). "Feature detection library." github.com/modernizr/modernizr.
  • BrowserLeaks (2026). "Features Detection." browserleaks.com/features.