Aperçu
Les API JavaScript du navigateur exposent un large éventail d'informations sur le système et le navigateur. Ces signaux peuvent être interceptés et modifiés via injection JS au niveau proxy.
Vecteurs d'API
API Navigator
| Propriété | Info Fuite | Usurpable via JS |
|---|---|---|
navigator.userAgent |
Chaîne Navigateur/OS | Oui |
navigator.platform |
Plateforme OS | Oui |
navigator.language |
Langue principale | Oui |
navigator.languages |
Préférences linguistiques | Oui |
navigator.hardwareConcurrency |
Nombre de cœurs CPU | Oui |
navigator.deviceMemory |
RAM en Go | Oui |
navigator.maxTouchPoints |
Support tactile | Oui |
navigator.webdriver |
Détection d'automatisation | Oui |
navigator.plugins |
Plugins installés | Limitée |
navigator.mimeTypes |
Support MIME | Limitée |
navigator.cookieEnabled |
Statut des cookies | Oui |
navigator.doNotTrack |
Préférence de confidentialité | Oui |
navigator.pdfViewerEnabled |
Support PDF | Oui |
API Screen
| Propriété | Info Fuite | Usurpable via JS |
|---|---|---|
screen.width |
Résolution d'écran | Oui |
screen.height |
Résolution d'écran | Oui |
screen.availWidth |
Largeur disponible | Oui |
screen.availTop |
Position de la fenêtre | Oui |
screen.colorDepth |
Profondeur de couleur | Oui |
screen.pixelDepth |
Profondeur de pixel | Oui |
screen.orientation |
Orientation | Oui |
Autres API
| API | Info Fuite | Usurpable via JS |
|---|---|---|
Intl.DateTimeFormat().resolvedOptions().timeZone |
Fuseau horaire | Oui |
performance.now() |
Précision du temporisateur | Oui (réduite) |
Date.now() |
Dérive d'horloge | Oui |
navigator.connection |
Type de réseau/RTT | Oui |
navigator.getBattery() |
Niveau de batterie | Oui |
navigator.mediaDevices |
Nombre de caméras/micros | Oui |
Stratégie d'Usurpation
Via JS Injecté
// Surcharger les propriétés navigator via 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
})
Défis
-
Temporalité : Le script injecté doit s'exécuter avant les scripts de la page. Nécessite une injection au tout début de
<head>.
Frameworks : Certains frameworks (Next.js, Angular) utilisent le SSR ou des scripts inline qui s'exécutent avant le JS injecté.
Service Workers : Les SW peuvent intercepter et modifier les réponses avant l'injection.
-
Détection : Un site peut détecter les surcharges en vérifiant
Object.getOwnPropertyDescriptor()ou en comparant plusieurs signaux pour des incohérences.
Conclusions
- ~25 signaux d'API JS sont usurpables via injection JS au proxy
- Nécessite une injection soigneuse au stade de l'analyse HTML
- La temporalité est critique (injecter avant tout script de la page)
- Ne peut pas surcharger toutes les API (certaines sont implémentées en C++ dans le navigateur)
- Doit maintenir une cohérence inter-signaux (ex., plateforme Win32 + User-Agent Windows)