Skip to main content
Blog
Blog

Pourquoi la Content Security Policy ne fonctionne pas

La Content Security Policy (CSP) est une fonctionnalité de sécurité fournie par les navigateurs web qu'un propriétaire de site peut utiliser pour définir un ensemble de règles contrôlant les ressources (scripts, styles, images, etc.) pouvant être chargées et exécutées par le navigateur. C'est ce que l'on appelle le côté client, tout au bout de la chaîne d'approvisionnement web. Correctement configurée, elle aide à prévenir un large éventail d'attaques. Mais ces trois premiers mots font toute la différence. Elle peut aider à prévenir : le Cross-Site Scripting (XSS) en restreignant

Jan 07, 2025 10 min read
why-csps-are-not-enough-image-cover
Table des matières

En bref : limites de la conformité CSP

  • CSP est une défense native critique du navigateur, mais elle ne suffit pas à elle seule pour assurer la conformité PCI DSS 4.0.1. L'attaque de la chaîne d'approvisionnement Polyfill.io de 2024 a réussi sur des centaines de milliers de sites où la CSP était correctement configurée.
  • La limite fondamentale est que la CSP autorise des domaines, pas l'intégrité du code. Si un domaine de confiance est compromis (comme Polyfill.io l'a été), la CSP autorise tout de même le code malveillant à se charger et à s'exécuter.
  • PCI DSS 4.0.1 §6.4.3 et §11.6.1 exigent explicitement des capacités allant au-delà de la CSP : inventaire des scripts avec justification métier, vérification de l'intégrité à chaque chargement, et détection des modifications non autorisées des pages de paiement.

Peu de temps ? Découvrez le blocage de Magecart et de skimmers dans le navigateur de cside. Elle couvre tout ce qui suit en un seul déploiement.

Qu'est-ce qu'une Content Security Policy (CSP) ?

Une Content Security Policy (CSP) est un en-tête de réponse HTTP qui indique aux navigateurs quelles sources de scripts, feuilles de style et frames sont autorisées à se charger. Elle atténue les risques de XSS en bloquant les scripts inline non autorisés et les chargements externes non autorisés. La CSP constitue une base nécessaire, mais elle ne détecte pas les anomalies comportementales dans les scripts autorisés, ne surveille pas ce que font les scripts au moment de l'exécution, et ne satisfait pas à l'exigence de PCI DSS 6.4.3 concernant un inventaire des scripts autorisés avec justification métier.

La Content Security Policy (CSP) est une fonctionnalité de sécurité fournie par les navigateurs web qu'un propriétaire de site peut utiliser pour définir un ensemble de règles contrôlant les ressources (scripts, styles, images, etc.) pouvant être chargées et exécutées par le navigateur. C'est ce que l'on appelle le côté client, tout au bout de la chaîne d'approvisionnement web.

Correctement configurée, elle aide à prévenir un large éventail d'attaques. Mais ces trois premiers mots font toute la différence.

Elle peut aider à prévenir le cross-site scripting (XSS) : en restreignant les sources depuis lesquelles les scripts peuvent être chargés, la CSP bloque les scripts malveillants injectés dans une page web. Par exemple, si une politique CSP spécifie script-src 'self', seuls les scripts provenant du domaine propre du site peuvent s'exécuter. Elle protège également contre le clickjacking : la directive frame-ancestors empêche qu'un site soit intégré dans des iframes sur des domaines non autorisés, et elle limite les attaques par injection de données en contrôlant quelles images, polices et médias sont autorisés à se charger.

Comme nous allons le voir, ce n'est pas tout à fait le cas en réalité.

L'objectif de la CSP (correctement configurée)

Défense contre les contenus tiers malveillants

Les sites web s'appuient souvent sur des contenus tiers, comme des outils d'analyse ou des scripts publicitaires, qui peuvent devenir des vecteurs d'attaque s'ils sont compromis. La CSP minimise ce risque en restreignant le contenu à des sources pré-approuvées et de confiance, protégeant ainsi votre site des vulnérabilités présentes dans les bibliothèques tierces.

Prévention de l'exfiltration de données

Les scripts malveillants conçus pour extraire des données sensibles et les envoyer vers des domaines non autorisés constituent une menace permanente. La CSP agit comme un rempart, bloquant ces scripts et garantissant la sécurité des données des utilisateurs.

Protection contre les attaques de la chaîne d'approvisionnement

Combinée à la Subresource Integrity (SRI), la CSP valide les scripts et styles tiers pour s'assurer qu'ils n'ont pas été altérés lors de leur livraison. Cela constitue une protection théorique contre les compromissions de la chaîne d'approvisionnement.

Contrôle des comportements dynamiques non souhaités

Les directives CSP comme script-src, style-src et les restrictions sur unsafe-eval empêchent l'exécution de code généré ou modifié dynamiquement. Cela réduit la surface d'attaque en limitant les exploits qui reposent sur eval() ou les scripts inline.

Légèreté et haute configurabilité

Transmise via des en-têtes côté serveur, la CSP a un impact minimal sur les performances de l'application. Sa flexibilité permet des configurations sur mesure, ce qui la rend adaptée à un large éventail de cas d'usage et de besoins architecturaux.

Les défis et les limites de la CSP

Pourquoi alors la CSP a-t-elle mauvaise réputation ? En théorie, elle semble être une solution idéale. Un outil puissant pour contrôler totalement ce que les navigateurs sont autorisés à charger sur un site web.

En pratique, cependant, la réalité est bien loin de tenir cette promesse.

La CSP est un mécanisme de défense complémentaire, pas une solution autonome, et elle s'accompagne de défis et de limites significatifs qui peuvent nuire à son efficacité, voire donner un faux sentiment de sécurité.

Complexité de mise en œuvre

Élaborer une CSP efficace pour des applications web modernes est une tâche difficile. Les sites web dépendent souvent de nombreux domaines tiers pour l'analyse, les CDN, la publicité et les polices, ce qui rend presque impossible la création d'une politique stricte sans casser certaines fonctionnalités. La gestion des directives comme script-src, style-src et img-src sur des sources diverses devient effectivement ingérable, en particulier pour les applications volumineuses et en constante évolution.

Impossibilité de bloquer des scripts spécifiques

La CSP fonctionne sur un modèle de liste d'autorisation, qui permet les ressources provenant de domaines de confiance mais ne peut pas bloquer des scripts ou ressources individuels provenant de ces domaines.

Un exemple rapide : si vous autorisez un domaine comme cdn.example.com, la CSP ne peut pas empêcher l'exécution de scripts malveillants qui y sont hébergés.

Les mises à jour récentes de la CSP introduisent une fonctionnalité pour remédier à cette limitation en utilisant la Subresource Integrity (SRI) intégrée à la directive script-src. Cela permet d'inscrire des scripts spécifiques sur liste d'autorisation à l'aide de hachages de leur contenu, garantissant que seule la version exacte et vérifiée d'un script peut être chargée.

Bien que puissante en théorie, cette approche présente un inconvénient majeur : toute mise à jour du script invalide le hachage, provoquant l'échec de la vérification SRI et rendant le script non fonctionnel.

Pour les scripts fréquemment mis à jour, comme ceux des outils marketing, cela rend la fonctionnalité de hachage inutile. À moins de travailler avec des scripts garantis statiques, ce mécanisme est essentiellement inutilisable.

Charge de maintenance élevée

Les politiques CSP nécessitent des mises à jour fréquentes pour prendre en compte :

  • Les nouveaux scripts, styles ou ressources pour les fonctionnalités ou pages ajoutées.
  • Les modifications des domaines ou services tiers.
  • Les facteurs externes, comme un changement d'API tierce, qui peuvent casser une politique auparavant fonctionnelle.

Un outil de surveillance dédié est nécessaire pour détecter ces mises à jour.

Risques liés aux dépendances tierces

Autoriser des ressources tierces dans les politiques CSP revient intrinsèquement à faire confiance à ces domaines externes pour qu'ils restent sécurisés. Or, des scripts compromis ou malveillants provenant de tiers de confiance peuvent tout de même s'exécuter, contournant entièrement les protections CSP.

Cette dépendance constitue elle-même une vulnérabilité critique dans le modèle CSP.

Nous l'avons constaté lors de l'attaque Polyfill de 2024, où c'est exactement ce qui s'est produit. Plus d'un demi-million de sites web faisaient confiance à un seul domaine pour injecter un script sur leur site. Même ceux disposant d'une stratégie CSP robuste en ont été victimes.

Difficultés avec les scripts et styles inline

Par défaut, la CSP bloque les scripts et styles inline, ce qui est une mesure de sécurité judicieuse. Mais là encore, des problèmes se posent.

  • De nombreux frameworks (React, Angular, etc.) et systèmes legacy s'appuient fortement sur les scripts inline, rendant leur application difficile sans une refactorisation importante.
  • De nombreux outils marketing fournissent des exemples utilisant des balises <script> inline pour charger des bundles JavaScript externes. Bien que ces scripts puissent s'exécuter depuis des fichiers séparés, les exemples les intègrent souvent directement, compliquant l'application de la CSP et introduisant des risques potentiels.
  • Pour y remédier, les développeurs ont souvent recours à unsafe-inline, ce qui compromet la sécurité de la CSP en autorisant tout le contenu inline.

Abus des directives d'assouplissement

Pour éviter de casser des fonctionnalités, les développeurs doivent en réalité affaiblir les politiques CSP. Une façon paradoxale de faire primer la fonctionnalité sur la sécurité.

  • unsafe-inline : autorise les scripts et styles inline, annulant les principaux objectifs de sécurité de la CSP.
  • unsafe-eval : permet l'utilisation de eval() et de méthodes similaires, qui sont très facilement exploitables.
  • * (caractère générique) : accorde l'accès à n'importe quel domaine, annulant ainsi effectivement la valeur de la politique.

Débogage des violations CSP

Diagnostiquer les problèmes liés à la CSP est extrêmement chronophage et frustrant.

  • Les navigateurs consignent les violations CSP dans la console, mais les journaux manquent souvent de contexte suffisant pour identifier la cause racine.
  • Le débogage de politiques trop strictes qui cassent des fonctionnalités demande un effort considérable, poussant les développeurs à assouplir la politique et à compromettre la sécurité.

Rupture des fonctionnalités existantes

Comme mentionné précédemment, des politiques CSP strictes peuvent perturber des composants essentiels.

  • Les intégrations tierces comme les outils d'analyse, la publicité ou les widgets sociaux.
  • Les applications legacy qui dépendent de scripts inline, de styles ou de ressources chargées dynamiquement. Pour rétablir les fonctionnalités, les développeurs assouplissent fréquemment les restrictions, compromettant la sécurité visée.

Incohérences entre navigateurs

L'application de la CSP varie d'un navigateur à l'autre, ce qui aggrave encore la situation.

  • Les navigateurs plus anciens peuvent ignorer certaines directives entièrement.
  • Certaines directives, comme worker-src ou navigate-to, ne bénéficient pas d'un support universel, ce qui limite leur efficacité.

Absence de reporting standardisé

Bien que la CSP prenne en charge le signalement des violations, il n'existe pas de format ou d'outil universellement accepté pour traiter ces rapports, ce qui rend plus difficile pour les équipes de les analyser et d'agir efficacement.

Contournements d'exfiltration faciles pour les politiques CSP incomplètes

L'une des plus grandes vulnérabilités des configurations CSP incomplètes est l'absence de la directive default-src. Sans elle, les politiques CSP peuvent être contournées pour exfiltrer des données via des mécanismes comme le prefetching.

Bien que default-src soit censée définir des règles de repli, la spécification CSP précise que le prefetching n'est pas régi par sa propre directive, donc sans default-src, les liens de prefetch contournent entièrement la CSP. Notre analyse de sites web explorés a révélé qu'un nombre surprenant d'entre eux ne disposaient pas de default-src, les laissant vulnérables à cet exploit. Et connect-src n'aide pas non plus : même un connect-src bien configuré ne peut pas empêcher l'exfiltration par prefetch, car il ne s'applique pas à ce type de connexions.

Évitez la CSP, faites plutôt ceci

La CSP présente des avantages réels sur le papier. L'utiliser dans un environnement réel devient rapidement une tâche fastidieuse. Pourtant, la sécurité côté client est de plus en plus répandue.

Lorsque vous recherchez un outil de sécurité côté client, vérifiez qu'il ne repose pas uniquement sur la CSP comme base de surveillance des ressources en la configurant en mode « report-only ». Ces solutions dépendent principalement de la CSP pour suivre et signaler les comportements des ressources, n'offrant qu'une capacité de blocage limitée en fonctionnalité supplémentaire.

Si cela est probablement suffisant pour la conformité, cela vous expose à de sérieux problèmes en cas d'attaque.

cside propose des solutions de sécurité modernes qui ne dépendent pas de la CSP, pour une approche plus efficace de la protection côté client. Nous avons développé un service qui surveille l'ensemble des scripts de votre site et peut détecter et bloquer de manière proactive le code malveillant.

Pas besoin de vérifications manuelles ni de rapports.

Vous pouvez commencer gratuitement ou nous contacter.

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.

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.

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

Envie de passer tout ça en revue avec un ingénieur ?

Trente minutes, sur votre propre site. Pas de slides.

Nous vous montrerons :

Quels scripts tiers s'exécutent actuellement sur votre site
Où vous en êtes sur les exigences PCI DSS 6.4.3 et 11.6.1
Quelle part de votre trafic provient de bots et d'agents IA

Vous préférez simplement poser une question ?

Recherche de créneaux…

Humains uniquement. On le saurait.

Un problème pour réserver ? Ouvrir le calendrier dans un nouvel onglet

Quel problème cherchez-vous à résoudre ?

Dites-le-nous en une ligne et nous reviendrons vers vous avec quelque chose d'utile, pas un discours générique.

Nous aidons souvent sur :

Voir quels scripts tiers s'exécutent sur votre site
Les preuves pour PCI DSS 6.4.3 et 11.6.1
Les bots, les agents IA et le vol de comptes

Vous préférez réserver un créneau ? Choisir un créneau