Saltar al contenido principal
it/blog/obscura/research/js-api-fingerprinting/

obscura/research/js-api-fingerprinting

3 min di lettura

Panoramica

Le API JavaScript del browser espongono una vasta gamma di informazioni sul sistema e sul browser. Questi segnali possono essere intercettati e modificati tramite iniezione JS a livello di proxy.

Vettori API

Navigator API

Proprietà Informazioni Rivelate Falsificabile tramite JS
navigator.userAgent Stringa browser/SO
navigator.platform Piattaforma SO
navigator.language Lingua primaria
navigator.languages Preferenze linguistiche
navigator.hardwareConcurrency Numero core CPU
navigator.deviceMemory RAM in GB
navigator.maxTouchPoints Supporto touch
navigator.webdriver Rilevamento automazione
navigator.plugins Plugin installati Limitato
navigator.mimeTypes Supporto MIME Limitato
navigator.cookieEnabled Stato cookie
navigator.doNotTrack Preferenza privacy
navigator.pdfViewerEnabled Supporto PDF

Screen API

Proprietà Informazioni Rivelate Falsificabile tramite JS
screen.width Risoluzione schermo
screen.height Risoluzione schermo
screen.availWidth Larghezza disponibile
screen.availTop Posizione finestra
screen.colorDepth Profondità colore
screen.pixelDepth Profondità pixel
screen.orientation Orientamento

Altre API

API Informazioni Rivelate Falsificabile tramite JS
Intl.DateTimeFormat().resolvedOptions().timeZone Fuso orario
performance.now() Precisione timer Sì (ridotta)
Date.now() Clock skew
navigator.connection Tipo di rete/RTT
navigator.getBattery() Livello batteria
navigator.mediaDevices Numero fotocamere/microfoni

Strategia di Spoofing

Tramite JS Iniettato

// Sovrascrivi proprietà navigator tramite Object.defineProperty
Object.defineProperty(navigator, 'userAgent', {
  get: () => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...'
})

Object.defineProperty(navigator, 'platform', {
  get: () => 'Win32'
})

Object.defineProperty(navigator, 'hardwareConcurrency', {
  get: () => 8
})

Sfide

  1. Temporizzazione: Lo script iniettato deve essere eseguito prima degli script della pagina. Richiede iniezione all'inizio di <head>.


  2. Framework: Alcuni framework (Next.js, Angular) usano SSR o script inline che vengono eseguiti prima del JS iniettato.



  3. Service Workers: I SW possono intercettare e modificare le risposte prima dell'iniezione.


  4. Rilevamento: Un sito può rilevare gli override verificando Object.getOwnPropertyDescriptor() o confrontando più segnali per incongruenze.

Conclusioni

  • ~25 segnali API JS sono falsificabili tramite iniezione JS del proxy
  • Richiede un'iniezione accurata nella fase di parsing HTML
  • La temporizzazione è critica (inietta prima di qualsiasi script della pagina)
  • Non può sovrascrivere tutte le API (alcune sono supportate da C++ nel browser)
  • Deve mantenere coerenza tra segnali (es. piattaforma Win32 + User-Agent Windows)