\n\n\n\n Mon Plongée Profonde : L'empreinte numérique des navigateurs & Le nouveau visage des détournements de session - BotSec \n

Mon Plongée Profonde : L’empreinte numérique des navigateurs & Le nouveau visage des détournements de session

📖 11 min read2,039 wordsUpdated Mar 27, 2026

Salut tout le monde, Pat Reeves ici, de retour sur botsec.net. Aujourd’hui, je veux parler de quelque chose qui me garde un peu éveillé ces derniers temps, et ce n’est pas les habituels tremblements de café tard dans la nuit. C’est le bourdonnement silencieux des bots, pas le bon genre, et l’audace pure dont certains attaquants font preuve pour s’infiltrer. Je parle spécifiquement du vol de session, mais pas n’importe quel vol de session. Nous allons explorer comment cela évolue, en particulier avec l’augmentation du pistage sophistiqué des navigateurs et des compromissions côté client. Il ne s’agit plus seulement de voler un cookie ; il s’agit de devenir l’utilisateur, d’une manière de plus en plus difficile à détecter.

La dernière fois que j’ai vraiment creusé ce sujet, il y a peut-être trois ou quatre ans, le conseil courant était « sécurisez vos cookies avec les drapeaux HttpOnly et Secure, utilisez des délais d’attente de session courts et régénérez les identifiants de session après authentification. » Tous de bons conseils, je vous assure, et toujours absolument essentiels. Mais que se passe-t-il quand l’attaquant ne fait pas que voler votre cookie à partir d’un sniffing réseau ou d’une vulnérabilité XSS ? Que se passe-t-il s’ils sont déjà présents dans votre navigateur, observant patiemment, puis s’injectant dans une session active, parfaitement valide ?

La menace évolutive : plus que de simples cookies volés

Le mois dernier, j’étais en appel avec un client, une entreprise SaaS de taille intermédiaire, qui se grattait la tête face à une série de prises de contrôle de comptes hautement ciblées. Leurs journaux de sécurité étaient impeccables. Pas de tentatives de connexion échouées, pas de bruteforce, pas de changements d’IP étranges. On aurait dit que des utilisateurs légitimes se connectaient, faisaient leur chose, puis tout à coup, des paramètres critiques étaient modifiés ou des fonds étaient transférés. Le plus frappant ? L’utilisateur « légitime » signalait souvent le problème des heures plus tard, complètement déconcerté. Ils ne s’étaient pas connectés au moment de l’activité malveillante, ou ils l’avaient fait, mais seulement pour vérifier quelque chose de bénin.

Ce n’était pas une simple attaque par replay. C’était quelque chose de plus méchant. Après beaucoup de fouilles, nous avons trouvé un fil conducteur commun : une extension de navigateur particulière que beaucoup de leurs employés et quelques utilisateurs avancés avaient installée. Un outil de productivité apparemment inoffensif, mais qui avait été compromis. Il injectait du JavaScript malveillant directement dans la session active, ciblant spécifiquement les API de l’application. Le cookie de session n’était jamais volé ; il était utilisé par le code injecté de l’attaquant, depuis le navigateur de l’utilisateur légitime, comme si l’utilisateur lui-même faisait les requêtes.

Compromission côté client : la nouvelle frontière

Cela m’a vraiment frappé. Nous passons tellement de temps à durcir notre backend, nos API, notre logique côté serveur. Nous avons des WAF, IDS, IPS, toute la soupe alphabétique. Mais si un attaquant peut compromettre le client – le navigateur de l’utilisateur – alors une grande partie de cette protection devient beaucoup moins efficace. Ils opèrent effectivement de *l’intérieur* du périmètre, en utilisant la confiance établie de l’utilisateur.

Pensez-y : une extension de navigateur malveillante, une attaque de type watering hole servant une bibliothèque JavaScript empoisonnée, même un réseau publicitaire compromis injectant du code. Une fois que ce code malveillant est exécuté dans le navigateur de l’utilisateur, il a accès au DOM, à localStorage, à sessionStorage, et surtout, à la possibilité de faire des requêtes avec les cookies de session existants de l’utilisateur. C’est comme avoir un petit attaquant invisible assis juste à côté de votre utilisateur, utilisant son clavier et sa souris.

La partie inquiétante est à quel point il est difficile de détecter cela. Du point de vue du serveur, c’est une session valide, un agent utilisateur valide, une IP valide, tout est valide. Les requêtes semblent parfaitement normales car elles *sont* faites depuis le navigateur de l’utilisateur avec ses véritables identifiants de session.

Défendre contre le fantôme dans le navigateur

Alors, que faisons-nous à ce sujet ? Nous ne pouvons pas simplement baisser les bras. Nous devons faire évoluer nos défenses. Voici quelques éléments que j’ai recommandés et sur lesquels j’ai travaillé avec des clients :

1. Renforcez votre politique de sécurité de contenu (CSP)

C’est votre première ligne de défense contre les scripts injectés. Une CSP bien configurée peut considérablement limiter quels scripts peuvent s’exécuter sur votre page et d’où ils peuvent charger des ressources. Cela ne stoppera pas directement une extension de navigateur malveillante, car les extensions fonctionnent souvent en dehors de la CSP, mais c’est crucial pour prévenir les XSS et d’autres formes d’injection de script du point de vue du serveur ou de scripts tiers compromis.

Une CSP stricte peut empêcher les scripts inline, restreindre les sources de scripts à des domaines de confiance, et même limiter où les formulaires peuvent soumettre des données. Ce n’est pas une solution miracle, mais ça élève significativement le niveau.


Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';

Cet exemple permet uniquement aux scripts provenant de votre propre domaine et d’un CDN de confiance spécifique. Il interdit les scripts inline, eval(), et le chargement d’objets. C’est un point de départ ; vous devrez l’adapter aux besoins spécifiques de votre application, ce qui peut être une corvée, mais cela en vaut la peine.

2. Mettez en œuvre des analyses comportementales et une détection des anomalies

Puisque les journaux côté serveur peuvent sembler « normaux », nous devons commencer à chercher ce qui est *anormal* dans le comportement des utilisateurs. C’est là que l’analyse comportementale entre en jeu. Si un utilisateur se connecte typiquement de Londres, accède à certains rapports, puis se déconnecte, et que tout à coup il effectue des actions administratives qu’il n’a jamais faites auparavant, ou accède à des données sensibles dans une séquence inhabituelle, cela devrait alerter.

  • Séquences d’appels API inhabituelles : Un utilisateur consulte-t-il généralement un rapport pour ensuite mettre à jour un enregistrement ? Ou se met-il soudainement à faire des appels de mise à jour directe sans consultation préalable ?
  • Vitesse des actions : L’utilisateur effectue-t-il soudainement des actions à la vitesse de la machine, beaucoup plus rapidement qu’un humain ne pourrait cliquer et taper ?
  • Anomalies géographiques (avec prudence) : Bien que les changements d’IP puissent être bénins (itinérance, VPN), un utilisateur qui se déplace soudainement entre les continents en quelques minutes est un signal d’alarme clair.
  • Nouvelles fonctionnalités accédées : Si un utilisateur commence soudainement à accéder à des fonctionnalités qu’il n’a jamais touchées auparavant, surtout des fonctionnalités sensibles, cela justifie une investigation.

Il ne s’agit pas de bloquer chaque anomalie, mais de construire des scores de confiance et d’escalader les activités suspectes pour réexamen. Vous ne bloquerez peut-être pas l’action immédiatement, mais vous pourriez forcer une ré-authentification, envoyer une alerte à l’utilisateur, ou même restreindre temporairement l’accès à des fonctions à haut risque.

3. Vérifications d’intégrité côté client (avec précaution)

C’est un sujet plus délicat et pas sans ses propres défis. Certaines applications essaient de détecter si leur code côté client a été altéré. Cela peut impliquer des checksums de fichiers JavaScript ou la recherche de changements inattendus dans le DOM. Le problème est qu’un attaquant sophistiqué qui a compromis le navigateur peut également contourner ou manipuler ces vérifications.

Cependant, pour des attaques moins sophistiquées ou pour détecter des manipulations de base, vous pourriez mettre en œuvre un système où un hash de fichiers JavaScript critiques est envoyé au serveur, et le serveur le vérifie par rapport à son propre hash connu. S’il y a une discordance, cela pourrait indiquer une manipulation côté client.


// Exemple (simplifié, côté client)
// Dans un scénario réel, cela serait plus complexe et potentiellement obfusqué
function calculateScriptHash() {
 const scriptContent = document.getElementById('critical-script').textContent;
 return sha256(scriptContent); // En supposant qu'une fonction utilitaire sha256 est disponible
}

// Au chargement de la page ou périodiquement
const currentHash = calculateScriptHash();
// Envoyer 'currentHash' au serveur pour vérification

Le serveur comparerait ensuite ce `currentHash` avec un hash pré-calculé. S’ils ne correspondent pas, vous avez un problème. C’est un jeu du chat et de la souris, cependant. Un attaquant déterminé pourrait modifier la fonction de hachage elle-même ou fournir un faux hash.

4. Adoptez FIDO2/WebAuthn pour une authentification forte

Bien que cela ne prévienne pas directement le vol de session côté client, une authentification forte réduit considérablement les vecteurs de compromis initiaux. Si un attaquant ne peut pas facilement obtenir un accès initial, il ne peut pas installer son poste d’observation côté client. FIDO2/WebAuthn, en particulier avec des clés matérielles, offre une authentification résistante au phishing. Même si un utilisateur tombe sur un site de phishing, sa clé matérielle ne s’authentifiera pas sur le mauvais domaine, rendant la prise de contrôle de compte beaucoup plus difficile.

Si vous mettez en œuvre FIDO2, même si un attaquant parvient à compromettre une session, il n’aura toujours pas le principal identifiant d’authentification de l’utilisateur. Cela signifie qu’il ne pourra pas facilement se ré-authentifier si la session expire ou si vous forcez une ré-authentification après avoir détecté une activité suspecte.

Ce que je fais à ce sujet

Pour botsec.net, je raffine constamment ma CSP. C’est un document vivant, franchement, et chaque fois que j’ajoute un nouveau widget ou script, je le revisite. Je garde également un œil très attentif sur mes journaux de serveur pour détecter quelque chose d’inhabituel, même si cela semble être une requête « valide ». J’examine également des outils d’analyse comportementale plus sophistiqués, en particulier ceux qui peuvent s’intégrer à mon infrastructure de journaux existante. L’objectif n’est pas de créer une forteresse qui gêne les utilisateurs légitimes, mais de construire un système qui peut subtilement détecter quand le fantôme dans le navigateur commence à tirer les ficelles.

Il est clair que le champ de bataille évolue. Nous ne pouvons plus nous concentrer uniquement sur le serveur et le périmètre réseau. Le côté client, le navigateur de l’utilisateur, est une cible de plus en plus attrayante pour les attaquants. Nous devons commencer à considérer le navigateur comme un environnement potentiellement hostile, même lorsqu’il est supposément « à nous. »

Points pratiques à retenir

  • Revoyez et renforcez votre CSP : Ne vous contentez pas d’en avoir une ; rendez-la stricte et gardez-la à jour. Envisagez un ‘report-uri’ pour collecter les violations sans bloquer.
  • Investissez dans l’analyse comportementale : Commencez à enregistrer les actions des utilisateurs et cherchez les écarts par rapport aux modèles normaux. Cela nécessite de comprendre les flux de travail typiques de vos utilisateurs.
  • Envisagez une ré-authentification pour les actions à haut risque : Pour les opérations critiques (par exemple, changer des mots de passe, transférer des fonds), obligez l’utilisateur à se ré-authentifier, même dans une session active. Cela rend beaucoup plus difficile pour un attaquant de finaliser l’action sans l’interaction explicite de l’utilisateur.
  • Éduquez les utilisateurs (encore !) : Rappelez aux utilisateurs les dangers d’installer des extensions de navigateur inconnues et de cliquer sur des liens suspects. Bien que ce ne soit pas un contrôle technique, c’est tout de même une couche de défense essentielle.
  • Explorez FIDO2/WebAuthn : Une authentification solide et résistante au phishing est clé pour prévenir le compromis initial du compte, qui précède souvent les attaques côté client.

Soyez prudents là-dehors, et gardez ces bots verrouillés !

Articles connexes

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

Learn more →
Browse Topics: AI Security | compliance | guardrails | safety | security
Scroll to Top