Skip to main content
Blog
Blog

Protection résistante à l'évasion CSP contre le JavaScript obscurci: guide 2026

Pourquoi la CSP ne peut pas arrêter les attaques JavaScript obscurcies et ce que la surveillance comportementale au niveau du navigateur apporte que les listes d'autorisation ne peuvent pas.

Jul 12, 2026 6 min read
Protection résistante à l'évasion CSP contre le JavaScript obscurci: guide 2026

La protection résistante à l'évasion CSP désigne des contrôles de sécurité qui détectent et bloquent le JavaScript malveillant même lorsque ce code utilise l'obscurcissement, le chargement dynamique ou l'injection depuis des hôtes de confiance pour contourner la Content Security Policy. La CSP impose une liste d'autorisation de sources de scripts approuvées mais ne peut pas inspecter ce que ces sources approuvées exécutent. Les contrôles résistants à l'évasion observent le comportement à l'exécution de chaque script dans la session du navigateur, détectant les menaces qui passent les vérifications de liste d'autorisation sans déclencher aucune violation de politique.

L'attaque de la chaîne d'approvisionnement de Polyfill[.]io en juin 2024 a montré cette faille. Plus de 490 000 sites web avaient cdn.polyfill[.]io dans leur liste CSP autorisée. Lorsque le domaine a changé de propriétaire et que le nouvel opérateur a remplacé la bibliothèque légitime par des malwares obscurcis, chaque site affecté a chargé et exécuté la charge malveillante tandis que la CSP ne signalait aucune violation. (Recherche Sansec, juin 2024)

Trois voies par lesquelles le code obscurci contourne la CSP

La CSP contrôle les sources, pas les charges utiles. Trois patterns d'attaque exploitent cette lacune:

Compromission d'un CDN de confiance ou d'un hôte tiers. Le script se charge depuis un domaine déjà présent dans la liste d'autorisation. Une charge modifiée ne déclenche pas la CSP car l'URL source est inchangée. Polyfill[.]io, les attaques de skimming web Magecart et les récentes compromissions de CDN d'analytique suivent cette voie.

Injection dans des fichiers propriétaires. Un attaquant ayant accès au serveur injecte du code obscurci dans un fichier JavaScript propriétaire existant. Ce fichier se charge depuis le domaine du site, qui est toujours autorisé.

Construction dynamique de code à l'exécution. Un script approuvé se charge et assemble une fonction malveillante à partir de fragments de chaînes à l'exécution, en utilisant eval(), Function() ou des équivalents indirects. La charge dangereuse n'existe jamais dans aucune ressource chargée; elle est construite dans le navigateur après un chargement de page propre.

Aucune de ces routes ne viole une liste d'autorisation de sources. La CSP rapporte tout propre pendant que les malwares obscurcis s'exécutent.

Comment les scripts obscurcis échappent aussi aux scanners automatisés

L'obscurcissement supprime les signaux lisibles que les réviseurs humains et les scanners automatisés recherchent:

TechniqueCe qu'elle faitPourquoi les scanners la manquent
Division et concaténation de chaînesFragmente les URLs et mots-clés en morceaux assemblés à l'exécutionAucune chaîne complète n'apparaît dans la source statique
Encodage Base64 avec décodage dynamiqueStocke la charge comme un blob décodé uniquement à l'exécutionRessemble à des données, pas à du code exécutable, pour un analyseur statique
Séquences d'échappement hexadécimales ou UnicodeEncode les caractères comme \x61 ou ALes outils statiques doivent exécuter le code pour résoudre la valeur réelle
Noms de variables aléatoiresRemplace les identifiants lisibles par des noms courts aléatoiresSupprime le signal de mots-clés sur lequel s'appuient les détecteurs de patterns
Chargement dynamique tardifRécupère la charge réelle depuis un serveur C2 après l'exécution d'un script approuvéLa ressource chargée diffère à chaque analyse

Les hashes de Subresource Integrity (SRI) protègent contre les substitutions silencieuses de charges depuis des sources connues, mais seulement si un hash peut être fixé pour chaque fichier. Les scripts tiers qui se mettent à jour fréquemment rendent le SRI impraticable en production, ce qui constitue le défi central de la gestion de l'intégrité des scripts pour les scripts dynamiques. Le SRI ne peut pas non plus protéger contre les charges récupérées dynamiquement depuis un endpoint C2, car cette charge n'existait pas lors du calcul d'un quelconque hash.

Approches pour la protection contre le JavaScript obscurci

ApprocheContrôle des sourcesInspection de la chargeGère la compromission d'un hôte de confianceDétecte l'injection dynamique à l'exécution
CSPOuiNonNonNon
Subresource Integrity (SRI)PartielHash uniquementPartielNon
WAF ou filtrage couche réseauPartielNonNonNon
Analyse statique JavaScriptNonPartielPartielNon
Surveillance comportementale couche navigateurOptionnelle par politiqueOuiOuiOui

La surveillance au niveau de la couche navigateur est le seul contrôle de ce tableau qui résiste aux trois voies d'évasion décrites. Elle fonctionne aux côtés de la CSP et couvre la lacune de visibilité des charges utiles que la CSP laisse ouverte.

Ce qu'exiger d'un outil résistant à l'évasion CSP

Quatre questions avant d'établir une liste de fournisseurs:

Observation de la charge utile à l'exécution. L'outil analyse-t-il ce que les scripts exécutent dans le navigateur, pas seulement les URLs depuis lesquelles ils se chargent? Demandez au fournisseur de démontrer la détection d'un script qui se charge depuis un domaine de confiance et appelle un endpoint d'exfiltration non autorisé. Si la démonstration nécessite une URL source malveillante pour se déclencher, l'outil dépend de la source.

Détection de patterns de code obscurci. Posez des questions spécifiques sur la division de chaînes, les équivalents d'eval() et le décodage dynamique Base64. Les outils qui ne signalent que eval() littéralement manqueront la plupart des obscurcissements réels.

Surveillance comportementale post-chargement. Beaucoup d'attaques récupèrent leur vraie charge depuis un serveur C2 après le chargement initial de la page. L'outil doit continuer à surveiller au-delà de DOMContentLoaded, pas seulement lors du parsing initial.

Explicabilité des alertes. Une alerte qui dit seulement "script suspect détecté" n'est pas exploitable. Chaque constat doit identifier le script, le comportement qui a déclenché la détection et l'appel réseau tenté, pour qu'un analyste puisse trier sans deviner.

Comment cside s'inscrit dans ce tableau

cside instrumente le navigateur via un script qui s'exécute dans chaque session de visiteur. Il observe ce que chaque script tiers et propriétaire fait à l'exécution: appels réseau effectués, modifications DOM appliquées, champs de données sensibles accédés et patterns d'exécution obscurcis détectés.

Lorsqu'un CDN compromis sert une charge obscurcie à une page instrumentée par cside, la détection s'active sur ce que la charge fait à l'exécution (appel réseau non autorisé, chaîne eval obscurcie, pattern d'exfiltration de données) plutôt que sur son origine. Un échec de liste d'autorisation de sources ne peut pas produire un faux négatif dans un système basé sur le comportement.

Les exigences 6.4.3 et 11.6.1 de PCI DSS v4.0.1 (obligatoires depuis mars 2025) imposent aux marchands d'autoriser tous les scripts sur les pages de paiement et de détecter les modifications non autorisées du contenu des scripts ou des en-têtes HTTP. La surveillance comportementale au niveau de la couche navigateur fournit les preuves au niveau de l'exécution que ces contrôles attendent d'une couche de surveillance qui atteint l'intérieur du navigateur plutôt que de s'arrêter au périmètre réseau.

Pour en savoir plus sur les limites pratiques de la CSP, consultez pourquoi la CSP ne fonctionne pas. Pour une analyse technique des méthodes d'obscurcissement utilisées dans les attaques réelles, consultez le guide de désofuscation du JavaScript tiers.

Simon Wijckmans
Founder & CEO

Founder and CEO of cside. Previously a product manager on Cloudflare Page Shield (now Cloudflare Client-Side Security). Co-chair of the W3C Anti-Fraud Community Group and a Forbes 30 Under 30 honoree. Building accessible security against client-side attacks — web security is not an enterprise-only problem.

FAQ

Frequently Asked Questions

La protection résistante à l'évasion CSP désigne des contrôles de sécurité qui détectent et bloquent le JavaScript malveillant même lorsque les attaquants utilisent l'obscurcissement, le chargement dynamique depuis un hôte de confiance ou une injection tardive pour contourner une Content Security Policy. La CSP impose des listes d'autorisation de sources; les contrôles résistants à l'évasion inspectent ce que les scripts exécutent réellement dans le navigateur.

La CSP approuve ou bloque les scripts selon leur origine, pas selon ce qu'ils font. Les attaquants la contournent par trois voies: compromettre un CDN de confiance pour qu'il délivre des malwares obscurcis depuis la source autorisée, injecter des charges obscurcies dans des fichiers propriétaires que le serveur fait déjà confiance, et assembler des fonctions dangereuses à partir de fragments de chaînes à l'exécution via des équivalents d'eval(). Aucune de ces routes ne viole une liste d'autorisation de sources.

La propriété clé est l'inspection de la charge utile à l'exécution. Un outil résistant à l'évasion CSP observe ce que les scripts exécutent dans la session du navigateur, pas seulement les domaines depuis lesquels ils se chargent. Il doit signaler les patterns de code obscurci, les appels réseau non autorisés et les changements de comportement en cours de session sans dépendre d'une liste d'autorisation de sources.

Les attaques de chaîne d'approvisionnement via des CDN de confiance constituent le principal pattern. En juin 2024, la compromission de Polyfill[.]io a livré des malwares obscurcis à plus de 490 000 sites web. Chaque site affecté avait cdn.polyfill[.]io dans sa liste CSP autorisée et aucune violation de politique ne s'est déclenchée. Les skimmers de paiement de type Magecart suivent la même route: un hôte de confiance compromis sert un code d'exfiltration obscurci qu'une CSP approuvée autorise.

cside instrumente le navigateur pour observer ce que chaque script fait à l'exécution, pas seulement son origine. Il détecte l'exécution de code obscurci, les appels de données non autorisés et les patterns d'injection dynamique qui apparaissent après le chargement de la page. La détection opérant au niveau de la couche d'exécution plutôt qu'au niveau de la couche source, un CDN de confiance compromis ne produit pas de faux négatif.

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