Skip to main content
Blog
Blog

Désobfusquer le code JavaScript tiers | Guide pour les ingénieurs en sécurité

D'un point de vue sécurité, un script tiers avec du code obfusqué est un signal d'alarme majeur. Ce guide explore les méthodes pour désobfusquer JavaScript et comment repérer les attaques courantes.

Aug 28, 2025 15 min read
image de couverture - guide cside pour analyser et désobfusquer le JavaScript tiers

L'obfuscation JavaScript consiste à transformer du code JavaScript normal et lisible par un humain en une forme intentionnellement difficile à lire et à comprendre. L'obfuscation est généralement utilisée pour dissimuler la signification réelle du code — et rend de ce fait extrêmement difficile le suivi ou la rétro-ingénierie des fonctions du code. Contrairement au chiffrement du code, l'obfuscation ne nécessite ni algorithme ni clé privée pour s'exécuter. La logique et les fonctionnalités du code restent exactement les mêmes, mais le code est truffé de noms de fonctions vagues et opaques, de structures programmatiques étranges et de chaînes encodées.

Les développeurs utilisent parfois des outils comme les obfuscateurs JavaScript pour protéger leur code et leur propriété intellectuelle afin d'éviter qu'ils ne soient volés. Mais d'un point de vue sécurité, notamment dans le contexte des scripts tiers, le code obfusqué est un signal d'alarme majeur. Les attaquants utilisent souvent cette obfuscation pour dissimuler leur code malveillant — qu'il s'agisse de malware, de logique de vol de données ou de code d'exploitation — à l'intérieur de ce qui ressemble à un amas aléatoire de caractères. Cela seul peut souvent contourner les scanners de sécurité simples et rendre l'analyse manuelle des scripts bien plus difficile.

Pourquoi la désobfuscation de JavaScript est-elle importante pour la sécurité ?

En matière de sécurité web, la visibilité sur les charges utiles — c'est-à-dire la capacité à voir et inspecter le code qui s'exécute sur votre site — est absolument critique. Désobfusquer JavaScript (inverser ou décoder le code) offre à un analyste de sécurité une compréhension claire du script et de ce qu'il fait sous le capot. Si vous ne pouvez pas percer cette obfuscation, vous êtes effectivement aveugle à ce que ce code pourrait faire.

Se fier uniquement à des mesures de sécurité superficielles ne suffit pas à protéger votre site. Par exemple, les en-têtes Content Security Policy peuvent restreindre les sources depuis lesquelles les scripts sont autorisés à se charger, mais n'offrent aucune visibilité sur la charge utile des scripts eux-mêmes. Si un hébergeur tiers est compromis et commence à servir des malwares obfusqués — comme nous l'avons signalé en 2024 avec l'attaque Polyfill — une CSP ne vous indiquera pas que le contenu du script est malveillant. Parce qu'il provient d'une source approuvée, elle lui fera confiance et ne signalera pas le contenu potentiellement malveillant servi.

Une autre raison pour laquelle la visibilité sur les charges utiles est critique tient à la nature dynamique de la plupart des attaques côté client. Comme nous l'avons couvert dans notre rapport d'attaques côté client du T2, cside a commencé à observer de plus en plus d'attaques qui injectent du code obfusqué dans des sites, lequel envoie souvent des signaux à un serveur de commande et contrôle pour recevoir des instructions supplémentaires. Cela peut exposer un site à des menaces telles que la publicité malveillante et les redirections, les scripts de cryptojacking et les kits d'exploitation de navigateur, tous contrôlés dynamiquement par un tiers.

Quels sont les signaux d'alarme courants à surveiller dans JavaScript ?

Code illisible ou brouillé

L'un des plus grands signaux d'alarme à surveiller est qu'un script soit un enchevêtrement insensé de caractères, de longs tableaux numériques et de fonctions étranges qui ne ressemblent à aucun code lisible par un humain. Les attaquants dissimulent souvent les chaînes en les encodant via des échappements hexadécimaux, Base64 et Unicode, en les découpant en morceaux illisibles. Ces variables ressembleront à _0x5e ou aa1122bbcc et auront rarement des identifiants significatifs. Les bibliothèques légitimes peuvent minifier du code qui y ressemble, mais elles ne seront généralement pas profondément obfusquées avec des données parasites.

Données encodées ou parasites dans les chaînes

Les scripts malveillants dissimulent souvent des chaînes critiques (comme des URL, des mots-clés, des charges utiles JavaScript) en les encodant et en y insérant des données parasites. Par exemple, ils peuvent avoir une URL obfusquée via un encodage hexadécimal et y parsemer plusieurs sous-chaînes parasites constantes pour contrecarrer le décodage. Des fonctions comme atob(), unescape() et des routines personnalisées qui transforment des chaînes sont souvent des indicateurs clairs que le script cherche à dissimuler quelque chose. Par le passé, des attaquants ont été connus pour insérer du texte aléatoire ou utiliser plusieurs couches d'encodage pour masquer des variables comme eval et document.cookie.

Génération dynamique de fonctions (eval et ses équivalents)

Un autre signal d'alarme dans un script est l'utilisation de fonctions comme eval(), le constructeur Function() ou setTimeout() et setInterval(). Cela signifie souvent que le script construit du code à l'exécution, ce qui peut être une technique prisée des malwares pour décompresser la vraie charge utile. Les scripts légitimes modernes utilisent rarement eval() en raison des implications en matière de sécurité et de performances, donc sa présence dans un script tiers devrait éveiller les soupçons. De même, créer dynamiquement des éléments de script dans le DOM via document.createElement('script') est une autre façon d'injecter du code malveillant. Si vous repérez du code qui construit une balise <script> avec une URL externe suspecte, c'est un signal d'alarme majeur indiquant que votre site pourrait être compromis.

Connexions externes suspectes

Tout script tiers qui référence des domaines ou des adresses IP externes sans rapport avec la fonction du site est un signe révélateur de comportement malveillant. Par exemple, si un script obfusqué effectue soudainement une requête fetch() ou XHR vers un domaine sans rapport avec le site, c'est souvent un indicateur de comportement malveillant. Les attaquants utilisent souvent leurs propres serveurs pour l'exfiltration ou les points de contrôle, et toute apparition de ces domaines dans du code tiers est un signal d'alarme.

Manipulation du HTML et du DOM

Le JavaScript malveillant obfusqué manipule souvent la page de manière furtive. Cela se manifeste souvent par la création d'éléments invisibles ou superposés, la définition de valeurs z-index extrêmement élevées (pour couvrir la page avec une saisie ou une invite frauduleuse) et l'injection de formulaires et d'écouteurs d'événements. cside a récemment signalé une attaque survenue sur CoinMarketCap qui utilisait une fenêtre contextuelle malveillante avec une valeur z-index élevée pour inciter les utilisateurs à connecter leurs portefeuilles à un tiers malveillant, vidant leurs portefeuilles de toute cryptomonnaie.

L'obfuscation polymorphique dans les attaques JavaScript

L'une des techniques les plus avancées et les plus évasives que les attaquants peuvent utiliser pour dissimuler la véritable intention de leur script est l'obfuscation polymorphique. L'obfuscation polymorphique désigne du code qui change de structure à chaque livraison de la charge utile, même si le comportement sous-jacent reste identique. Cette technique est empruntée au développement traditionnel de malwares, où les binaires polymorphiques mutent leur apparence pour échapper à la détection des antivirus. Dans l'écosystème JavaScript côté navigateur, les attaquants obtiennent cette même évasion en faisant tourner les noms de variables, en restructurant les fonctions, en modifiant le flux de contrôle et en parsemant du code parasite aléatoire dans tout le script.

Cela signifie que deux charges utiles ayant la même intention — comme l'écrémage d'un formulaire de paiement sur un site web — peuvent sembler entièrement différentes au niveau du code. Cela rend les méthodes de détection comme les signatures basées sur les hachages et les filtres statiques basés sur les IOC insuffisantes, et globalement incroyablement difficiles à déployer. Parce que le code est dynamique et changeant, les défenses périmètriques comme la Content Security Policy (CSP) et la Subresource Integrity (SRI) ne peuvent pas offrir une protection suffisante contre les attaques polymorphiques. Ces protections sont capables de valider l'origine du script et de détecter s'il a été modifié, mais n'offrent aucune visibilité sur ce que le script fait réellement à l'exécution.

Quels outils et technologies permettent de désobfusquer JavaScript ?

La désobfuscation est essentiellement un exercice de rétro-ingénierie visant à transformer les chaînes et fonctions encodées en quelque chose de lisible par un humain. Il faut souvent combiner plusieurs des techniques ci-dessous pour désobfusquer complètement un script :

  • Embellisseurs ou formateurs de code : Des outils comme JSBeautify, deobfuscate.io, JSnice et de4js peuvent prendre un script compressé ou minifié et ré-indenter le code pour ajouter des sauts de ligne, le transformant en un morceau de code correctement structuré. Cela ne supprime souvent pas l'obfuscation, mais rend la mise en page du code plus lisible.
  • Utilitaires de décodage de chaînes : Le code obfusqué encodant fréquemment les données en hexadécimal, Base64, etc., l'utilisation d'outils de décodage simples peut récupérer les chaînes initiales. De nombreux analystes de sécurité utilisent des scripts Python ou des sites comme Dencode.com pour décoder les formats courants.
  • Refactorisation et remplacement manuels : Parfois, la méthode la plus simple est la plus manuelle — après avoir utilisé un embellisseur de code, lire le code et remplacer statiquement les noms de variables ou fonctions obfusqués par leur signification réelle peut aider à comprendre l'intention derrière certaines fonctions.
  • Analyse AST : Pour les scripts très complexes, les chercheurs en sécurité se tournent souvent vers des scripts développés sur mesure pour analyser et transformer le code. Utiliser un parseur JavaScript pour obtenir l'arbre syntaxique abstrait (AST) d'un script permet à un chercheur de naviguer programmatiquement dans la structure et de supprimer les couches d'obfuscation. Cette approche peut aider à simplifier automatiquement des éléments comme l'aplatissement du flux de contrôle ou l'encodage élaboré de fonctions, bien qu'elle nécessite de solides compétences en programmation.

Le JavaScript obfusqué peut-il être analysé automatiquement ?

L'analyse automatique et le sandboxing sont indispensables pour traiter de grands volumes de JavaScript obfusqué et détecter les menaces en temps réel. Analyser manuellement chaque script est souvent impraticable, aussi les organisations peuvent-elles employer une combinaison de sandboxing dynamique, d'analyse statique du code et de renseignement sur les menaces pour appréhender JavaScript à grande échelle.

  • Analyse dynamique par sandboxing : Une approche pour déterminer ce que fait un code suspect consiste à l'exécuter dans un environnement contrôlé (en utilisant un navigateur qui parcourt le code pas à pas, par exemple) et à observer son comportement. Lorsqu'un script obfusqué y est exécuté, le sandbox peut souvent enregistrer des comportements qui semblent malveillants. Le script tente-t-il de modifier le formulaire de paiement ? Effectue-t-il un appel AJAX vers un domaine suspect ou connu comme malveillant ? Génère-t-il des iframes cachées ou consomme-t-il une quantité significative de CPU ? Parce que le sandbox observe les actions du script, il peut signaler des patterns même si le code était obfusqué. Certains sandboxes peuvent même s'accrocher au moteur JavaScript pour extraire le code désobfusqué une fois que le script s'est décompressé en mémoire. L'approche dynamique est intéressante car elle ne nécessite pas de comprendre le code et observe directement les résultats malveillants, mais elle peut être détectée par des malwares avancés qui modifieraient alors leur comportement.
  • Analyse statique avec intelligence artificielle et grands modèles de langage : Du côté de l'analyse statique, les outils de sécurité utilisent souvent la correspondance de patterns et l'intelligence artificielle pour examiner le texte et le comportement des scripts afin de déterminer s'ils sont malveillants, même obfusqués. L'utilisation de grands modèles de langage pour établir rapidement une base d'activité à partir du script est devenue de plus en plus populaire, car elle permet à un analyste de sécurité de distinguer rapidement ce qui pourrait être un script minifié d'un script malveillant.

Chez cside, notre pipeline d'analyse automatique évalue JavaScript à la fois dans sa forme obfusquée et désobfusquée en exécutant des règles de détection avant et après la normalisation du code vers quelque chose de lisible. Cette approche à double couche nous aide à détecter les menaces évasives qui pourraient n'apparaître qu'une fois le code décompressé. Contrairement à de nombreux scanners traditionnels, cside utilise des modèles de détection basés sur les attributs pour observer comment un script interagit avec l'API DOM et quels éléments il peut créer, modifier et attacher. Ces attributs comportementaux nous permettent de voir des changements suspects même si le script est fortement obfusqué ou généré à l'exécution.

Quels sont des exemples concrets d'attaques JavaScript malveillantes obfusquées ?

Le JavaScript obfusqué a été au cœur de nombreuses attaques réelles que cside a signalées, des violations très médiatisées aux campagnes de malwares quotidiennes.

  • Écrémeurs de cartes de crédit Magecart : Magecart est un terme générique désignant des groupes qui ont historiquement injecté du JavaScript malveillant dans des sites e-commerce pour voler des données de cartes de paiement. Dans l'attaque contre British Airways en 2018, des attaquants ont compromis des scripts tiers et inséré du code d'écrémage obfusqué. Ce code était conçu pour voler les informations de carte de crédit sur les pages de paiement et les envoyer vers des serveurs contrôlés par les attaquants, tout en se fondant dans les scripts légitimes. Les attaquants Magecart utilisent couramment l'obfuscation de scripts pour encoder les fonctions et dissimuler la véritable intention de la logique du code. Pour plus d'informations sur l'attaque contre British Airways, cside a publié un rapport spécial sur l'attaque (et comment nous nous sommes retrouvés avec le domaine utilisé dans l'attaque !).
  • Scripts de cryptojacking : L'essor des mineurs de cryptomonnaie dans le navigateur a également vu du code obfusqué être utilisé pour mettre en œuvre leurs attaques. Dans une attaque de cryptojacking, un attaquant injecte un script qui utilise silencieusement le CPU d'un visiteur pour miner de la cryptomonnaie. Pour éviter une détection facile (en dehors d'une hausse de l'utilisation du CPU par l'utilisateur), le code était souvent obfusqué ou servi depuis un CDN de contenu compromis. cside a récemment publié comment les attaques de cryptojacking sont devenues plus importantes au cours de la dernière année et ont considérablement évolué dans leur mode d'exécution.
  • Injection de Progressive Web App et redirections : En 2025, cside a signalé une attaque utilisant une Progressive Web App pour rediriger les utilisateurs mobiles vers une arnaque de contenu adulte chinois. La charge utile de cette attaque avait déjà été observée, mais la livraison via une Progressive Web App constituait un vecteur d'attaque incroyablement unique. Bien que les PWA soient souvent ignorées dans le domaine de la sécurité côté client, elles sont également susceptibles aux attaques côté navigateur que cside observe fréquemment.

Quelles sont les bonnes pratiques pour la surveillance et la défense continues de la sécurité JavaScript ?

Protéger votre application web contre le code tiers malveillant n'est pas un effort ponctuel, mais nécessite une surveillance continue et de bonnes pratiques pour minimiser les risques.

  • Le proxy cside : Le proxy cside agit comme un intermédiaire entre votre site et les scripts tiers externes, nous permettant d'intercepter, d'analyser et de bloquer les attaques JavaScript avant qu'elles ne s'exécutent dans le navigateur de l'utilisateur. Notre proxy permet une surveillance en temps réel du comportement des scripts à chaque chargement de page, sans modifier le code de l'application ni ajuster les exigences de Content Security Policy. En inspectant les scripts dans leurs formes obfusquée et normalisée, le proxy peut appliquer des règles et signaler des anomalies — même lorsque les attaquants font tourner les couches d'obfuscation ou injectent des charges utiles dynamiques.
  • Restreindre et valider les sources de scripts : Utiliser des en-têtes Content Security Policy (CSP) pour contrôler strictement les sources depuis lesquelles les scripts peuvent être chargés est une autre excellente façon de protéger votre site contre les attaques indésirables. Utiliser une règle CSP pour mettre en liste blanche uniquement vos domaines et les CDN connus, et bloquer tout le reste, est une excellente première étape pour sécuriser le JavaScript qui s'exécute sur votre site. Combiner la CSP avec des vérifications de Subresource Integrity (SRI) — qui peuvent détecter si un fichier a été modifié et empêcher son exécution — peut garantir que vous ne chargez que ce que vous avez l'intention de charger.
  • Restez informé et formez votre équipe : Le paysage des menaces évolue incroyablement vite, et de nouvelles techniques d'obfuscation et d'attaque émergent en permanence. Investissez dans la formation de vos équipes de sécurité, ainsi que de vos équipes de développement, sur ces tendances et les bonnes pratiques pour s'en protéger. Suivez les rapports de renseignement sur les menaces et mettez à jour vos propres patterns de détection en conséquence. Assurez-vous de disposer d'un plan de réponse aux incidents spécifiquement pour les incidents côté client — par exemple, si vous détectez soudainement un écrémeur obfusqué sur votre site, qui alertez-vous ? Se préparer à ces scénarios garantit une réponse capable de minimiser les dommages si elle est correctement gérée.

Réflexions finales

Dans l'écosystème de navigateurs actuel, le JavaScript tiers est à la fois une nécessité et un risque pour les sites web. Les techniques d'obfuscation peuvent servir du code légitime, mais elles sont aussi souvent utilisées par les attaquants pour dissimuler des charges utiles nuisibles — rendant plus difficile que jamais la détection, l'analyse et la réponse aux menaces potentielles. La capacité à désobfusquer JavaScript et à surveiller son comportement n'est plus optionnelle. C'est absolument critique.

Chez cside, nous avons conçu notre technologie pour donner aux équipes une visibilité sur ce qui se passe réellement à l'intérieur des scripts tiers. À mesure que les attaques côté client continuent d'évoluer, investir dans la visibilité sur les charges utiles et la surveillance en temps réel est la meilleure défense que vous puissiez déployer aujourd'hui. Si vous êtes prêt à prendre le contrôle de vos risques liés au JavaScript tiers, contactez-nous et explorez davantage notre blog de renseignement sur les menaces pour rester informé des patterns d'attaque.

Jack LaFond
Security Researcher

I'm a security engineer + security researcher at cside.

Surveillez et sécurisez vos scripts tiers

Gain full visibility and control over every script delivered to your users to enhance site security and performance.

Commencez gratuitement, ou essayez Business avec un essai de 14 jours.

cside Interface du tableau de bord affichant la surveillance des scripts et les analyses de sécurité
Related Articles
Réserver une démonstration