Content Security Policy (CSP) Bypass
Pridružite se HackenProof Discord 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
Poslednje objave Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platformi
Pridružite nam se na Discord-u i počnite da sarađujete sa vrhunskim hakerima danas!
Šta je CSP
Politika bezbednosti sadržaja (CSP) je prepoznata kao tehnologija pregledača, pretežno usmerena na zaštitu 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 poput slika, frejmova i JavaScript-a. 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 putem funkcija poput eval
, setTimeout
ili setInterval
.
Implementacija CSP-a se vrši putem odgovarajućih zaglavlja ili uključivanjem meta elemenata u HTML stranicu. Pregledači proaktivno sprovode ove odredbe i odmah blokiraju bilo kakva otkrivena kršenja.
Implementirano putem zaglavlja odgovora:
Implementirano putem meta oznake:
Zaglavlja
CSP može biti sproveden ili praćen korišćenjem ovih zaglavlja:
Content-Security-Policy
: Sprovodi CSP; pregledač blokira bilo kakve prekršaje.Content-Security-Policy-Report-Only
: Koristi se za praćenje; prijavljuje prekršaje bez blokiranja. Idealno za testiranje u pre-produkcionim okruženjima.
Definisanje Resursa
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:
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.
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.
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, primenljivo na elemente poput
<frame>
,<iframe>
,<object>
,<embed>
, i<applet>
.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.
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.
plugin-types: Ograničava mime tipove koje stranica može pozvati.
upgrade-insecure-requests: Naređuje pregledač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.)
Izvori
*
: Dozvoljava sve URL-ove osim onih sa šemamadata:
,blob:
,filesystem:
.'self'
: Dozvoljava učitavanje sa istog domena.'data'
: Dozvoljava resurse da se učitavaju putem data šeme (npr. Base64 kodirane slike).'none'
: Blokira učitavanje sa bilo kog izvora.'unsafe-eval'
: Dozvoljava korišćenjeeval()
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'
: Lista dozvoljenih specifičnih inline skripti koristeći kriptografski nonce (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:
'sha256-<hash>'
: Whitelists scripts with a specific sha256 hash.'strict-dynamic'
: Dozvoljava učitavanje skripti sa bilo kog izvora ako je dodat na belu listu pomoću nonce-a ili heša.'host'
: Specificira određeni domen, kao što jeexample.com
.https:
: Ograničava URL-ove na one koji koriste HTTPS.blob:
: Dozvoljava resursima da se učitavaju sa Blob URL-ova (npr. Blob URL-ova kreiranih putem JavaScript-a).filesystem:
: Dozvoljava resursima da se učitavaju sa fajl sistema.'report-sample'
: Uključuje uzorak koda koji krši pravila u izveštaju o kršenju (korisno za debagovanje).'strict-origin'
: Slično kao 'self' ali osigurava da nivo sigurnosti protokola izvora odgovara dokumentu (samo sigurni izvori mogu učitavati resurse sa sigurnih izvora).'strict-origin-when-cross-origin'
: Šalje kompletne URL-ove prilikom pravljenja zahteva istog izvora, ali šalje samo poreklo kada je zahtev preko granice izvora.'unsafe-allow-redirects'
: Dozvoljava učitavanje resursa koji će odmah preusmeriti na drugi resurs. Nije preporučljivo jer oslabljuje sigurnost.
Nebezbedna CSP Pravila
'unsafe-inline'
Radni payload: "/><script>alert(1);</script>
self + 'unsafe-inline' putem Iframe-a
pageCSP bypass: self + 'unsafe-inline' with Iframes'unsafe-eval'
Ovo ne radi, za više informacija proverite ovo.
Radni payload:
strict-dynamic
Ako na neki način možete da naterate dozvoljeni JS kod da kreira novi tag skripte u DOM-u pomoću vašeg JS koda, jer dozvoljeni skript kreira, novi tag skripte će biti dozvoljen za izvršavanje.
Zvezdica (*)
Radni payload:
Nedostatak object-src i default-src
Izgleda da ovo više ne funkcioniše
Radni payloadi:
Postavljanje datoteka + 'self'
Ako možete da otpremite JS fajl, možete zaobići ovaj CSP:
Radna payload:
Međutim, vrlo je verovatno da server validira otpremljeni fajl i dozvoliće vam samo da otprenete određenu vrstu fajlova.
Štaviše, čak i ako biste mogli da otpremite JS kod unutar fajla koristeći ekstenziju koju server prihvata (na primer: 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 odbiti da izvrše Javascript kod 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 mogućnost otpremanja fajla, i uspete da pronađete pogrešno tumač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).
Forma-akcija
Ako nije moguće ubaciti JS, još uvek možete pokušati da eksfiltrirate na primer kredencijale ubacivanjem akcije forme (i možda očekujući da menadžeri lozinki automatski popune lozinke). Možete pronaći primer u ovom izveštaju. Takođe, primetite da default-src
ne pokriva akcije formi.
Endpozicije trećih strana + ('unsafe-eval')
Za neke od sledećih payloada unsafe-eval
nije čak ni potreban.
Učitajte ranjivu verziju angular-a i izvršite proizvoljni JS:
Payloadi koji koriste Angular + biblioteku sa funkcijama koje vraćaju window
objekat (proverite ovaj post):
window
objekat (proverite ovaj post):Post pokazuje da biste mogli učitati sve biblioteke sa cdn.cloudflare.com
(ili bilo kog drugog dozvoljenog repozitorijuma JS biblioteka), izvršiti sve dodate funkcije iz svake biblioteke, i proveriti koje funkcije iz kojih biblioteka vraćaju window
objekat.
Angular XSS iz imena klase:
Zloupotreba google recaptcha JS koda
Prema ovom CTF writeup-u možete zloupotrebiti https://www.google.com/recaptcha/ unutar CSP-a da biste izvršili proizvoljni JS kod zaobići CSP:
Više payload-a iz ovog članka:
Zloupotreba www.google.com za otvoreno preusmeravanje
Sledeći URL preusmerava na example.com (odavde).
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.
Endpoeni treće strane + JSONP
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:
JSONBee sadrži spremne JSONP endpointove za CSP zaobilazak 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, postoji mnogo domena trećih strana koji bi mogli biti 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 |
---|---|---|
www.facebook.com, *.facebook.com | Eksfil | |
Hotjar | *.hotjar.com, ask.hotjar.io | Eksfil |
Jsdelivr | *.jsdelivr.com, cdn.jsdelivr.net | Izvrši |
Amazon CloudFront | *.cloudfront.net | Eksfil, Izvrši |
Amazon AWS | *.amazonaws.com | Eksfil, Izvrši |
Azure Websites | *.azurewebsites.net, *.azurestaticapps.net | Eksfil, Izvrši |
Salesforce Heroku | *.herokuapp.com | Eksfil, Izvrši |
Google Firebase | *.firebaseapp.com | Eksfil, Izvrši |
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.
Na primer, ako pronađete sledeći CSP:
Bypassing Content Security Policy (CSP)
Introduction
Content Security Policy (CSP) je mehanizam bezbednosti koji pomaže u sprečavanju Cross-Site Scripting (XSS) napada ograničavajući izvore sa kojih se mogu učitati resursi na web stranici. Međutim, postoje načini za zaobilaženje CSP-a kada je implementiran nepravilno.
Metode zaobilaženja CSP-a
Inline JavaScript: CSP može biti podešen da zabrani inline JavaScript (
<script>
tag sanonce
ilihash
vrednostima), ali napadači mogu koristiti različite tehnike za zaobilaženje ovih ograničenja.External Scripts: Napadači mogu učitati spoljašnje skripte koje nisu obuhvaćene CSP-om, kao što su skripte sa pouzdanih CDN-ova ili drugih domena.
Data URI: Korišćenje Data URI shema za ugradnju slika, fontova ili skriptova direktno u HTML može biti način za zaobilaženje CSP-a.
Eval Function: Iako je korišćenje
eval()
funkcije loša praksa zbog sigurnosnih rizika, ona može biti korišćena za zaobilaženje CSP-a.Dynamic Code Execution: Korišćenje
setTimeout
,setInterval
ilinew Function()
za dinamičko izvršavanje koda može biti još jedan način za zaobilaženje CSP-a.
Zaključak
Iako je CSP moćan alat za poboljšanje bezbednosti web aplikacija, važno je pravilno ga konfigurisati kako bi se izbegle rupe koje bi mogle biti iskorišćene za zaobilaženje. Redovno testiranje i ažuriranje CSP politike je ključno za održavanje efikasne zaštite od XSS napada.
Treba da možete da eksfiltrirate podatke, slično kao što je to uvek rađeno sa Google Analytics/Google Tag Manager. U ovom slučaju, pratite ove opšte korake:
Kreirajte Facebook Developer nalog ovde.
Napravite novu "Facebook Login" aplikaciju i izaberite "Website".
Idite na "Settings -> Basic" i dobijte svoj "App ID".
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.
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).
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 kao što je ovaj:
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:
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.
∑, oni ć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 nekonzistentnosti 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
Izvršavanje JS koda putem iframes
pageIframes in XSS, CSP and SOPnedostaje base-uri
Ako nedostaje direktiva base-uri možete je zloupotrebiti da biste izvršili dangling markup injection.
Osim toga, ako stranica učitava skriptu koristeći relativnu putanju (kao što je <script src="/js/app.js">
) koristeći Nonce, možete zloupotrebiti base tag da biste je učitali sa vašeg servera postižući XSS.
Ako je ranjiva stranica učitana sa httpS, koristite httpS URL u base.
AngularJS događaji
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 $event
objekat može biti iskorišćen kako bi se zaobišao CSP. Posebno, u Chrome-u, $event/event
objekat poseduje atribut path
, koji sadrži niz objekata uključenih u lanac izvršenja događaja, pri čemu je window
objekat uvek pozicioniran na kraju. Ova struktura je ključna za taktike bekstva iz peska.
Usmeravanjem ovog niza ka filteru orderBy
, moguće je iterirati kroz njega, koristeći terminalni element (window
objekat) kako bi se pokrenula globalna funkcija poput alert()
. Demonstrirani isečak koda ispod objašnjava ovaj proces:
Ovaj isječak ističe upotrebu ng-focus
direktive za pokretanje događaja, korišćenje $event.path|orderBy
za manipulaciju nizom path
, 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
AngularJS i belačka lista domena
Bypassing CSP by Invoking Callback Functions
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. Više informacija o ovoj tehnici možete pronaći u detaljnom vodiču dostupnom na ovom git repozitorijumu.
Radni payloadi:
Bypass preko 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, ako preusmeravanje vodi ka drugoj putanji, može zaobići originalna ograničenja.
Evo primera:
Ako je CSP postavljen na https://www.google.com/a/b/c/d
, s obzirom da se putanja uzima u obzir, i /test
i /a/test
skripte ć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 lokacija nema otvorene ranjivosti za preusmeravanje i da ne postoje domeni koji mogu biti iskorišćeni u pravilima CSP.
Zaobiđite CSP pomoću visećeg markup-a
Pročitajte ovde.
'unsafe-inline'; img-src *; putem XSS
'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 resursa.
Ovu CSP možete zaobići eksfiltriranjem podataka putem slika (u ovom slučaju XSS zloupotrebljava CSRF gde stranica pristupačna botu sadrži SQLi, i izvlači zastavu putem slike):
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, postaviti je na Twitter i zloupotrebiti "unsafe-inline" da izvršite JS kod (kao običan XSS) koji će učitati sliku, izdvojiti JS iz nje i izvršiti ga: https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/
Sa Servisnim Radnicima
Funkcija importScripts
servisnih radnika nije ograničena CSP-om:
Umetanje Politike
Istraživanje: https://portswigger.net/research/bypassing-csp-with-policy-injection
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 prelaznih rešenja:
Zato što će ovaj direktiv prepisati postojeće direktive script-src. Možete pronaći primer 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
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
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 izvući 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 informacije koje su vam potrebne.
Ovog puta će se flag izvući, svaki put kada se karakter tačno pogodi putem SQLi, odgovor traje duže vreme zbog sleep funkcije. Tada ćete moći izvući flag:
Putem Bookmarkleta
Ovaj napad bi implicirao neko oblik društvenog inženjeringa gde napadač ubeđuje korisnika da prevuče i ispusti link preko bookmarkleta pretraživača. Ovaj bookmarklet bi sadržao zlonamerni JavaScript kod koji bi se izvršio kada bi bio prevučen i ispusten ili kliknut, u kontekstu trenutnog prozora veba, zaobilazeći CSP i omogućavajući krađu osetljivih informacija poput kolačića ili tokena.
Za više informacija proverite originalni izveštaj ovde.
Bypass CSP ograničavanjem CSP-a
U ovom CTF izveštaju, CSP je zaobiđen ubacivanjem unutar dozvoljenog iframe-a strožiji CSP 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 csp
atributa:
U ovom CTF zapisu, 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:
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 iz Content-Security-Policy-Report-Only
.
Za primer proverite ovaj CTF writeup.
Otkrivanje informacija pomoću CSP i Iframe-a
Kreira se
iframe
koji pokazuje ka URL-u (nazovimo gahttps://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 svojstvoblockedURI
. Ovo svojstvo otkriva domen blokiranog URI-ja, otkrivajući tajni domen ka kojem je prvobitni URL preusmeren.
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.
Druga tehnika uključuje iskorišćavanje samog CSP-a kako bi se zaključio tajni poddomen. Ova metoda se oslanja na binarnu pretragu i prilagođavanje CSP-a kako bi uključila 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 dozvoljava ove poddomene. Evo isečka koji prikazuje kako bi CSP mogao biti podešen da olakša ovu metodu:
Prateći koje zahteve CSP blokira ili dozvoljava, moguće je suziti moguće karaktere u tajnom poddomenu, otkrivajući konačno kompletan URL.
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.
Triks sa ovde.
Pridružite se HackenProof Discord serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Hakerski uvidi Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
Vesti o hakovanju u realnom vremenu Budite u toku sa dinamičnim svetom hakovanja putem vesti i uvida u realnom vremenu
Najnovije najave Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platformi
Pridružite nam se na Discord i počnite da sarađujete sa vrhunskim hakerima danas!
Nesigurne tehnologije za zaobilaženje CSP-a
Preopterećenje bafera odgovora PHP-om
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 neposlato.
Ideja sa ovog writeupa.
Prepravljanje stranice sa greškom
Iz ovog writeupa 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.
SOME + 'self' + wordpress
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 bi pristupila DOM-u prave krajnje tačke koju želite zloupotrebiti. Za više informacija pogledajte:
Štaviše, 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).
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'. Štaviše, i zato š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...
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/
Bypass-ovi CSP eksfiltracije
Ako postoji strogi CSP koji vam ne dozvoljava da interaktujete sa spoljnim serverima, postoje neke stvari koje uvek možete uraditi da eksfiltrirate informacije.
Lokacija
Jednostavno možete ažurirati lokaciju da pošaljete tajne informacije napadačkom serveru:
Meta tag
Možete preusmeriti ubacivanjem meta oznake (ovo je samo preusmeravanje, neće procuriti sadržaj)
DNS Prefetch
Da biste učitali stranice brže, pretraživači će unapred rešavati imena domaćina u IP adrese i keširati ih za kasniju upotrebu.
Možete naznačiti pretraživaču da unapred reši ime domaćina sa: <link rel="dns-prefetch" href="something.com">
Možete zloupotrebiti ovaj postupak da biste eksfiltrirali osetljive informacije putem DNS zahteva:
Bypassing Content Security Policy (CSP)
Bypassing CSP using unsafe-inline
unsafe-inline
If a website allows unsafe-inline
in its CSP policy, an attacker can execute arbitrary inline scripts by injecting them into HTML attributes such as onmouseover
, onclick
, etc.
To bypass CSP using unsafe-inline
, you can inject your payload into an HTML attribute that allows inline scripts. For example:
This payload will execute the alert('XSS')
script even if CSP is in place allowing unsafe-inline
.
Bypassing CSP using unsafe-eval
unsafe-eval
If a website allows unsafe-eval
in its CSP policy, an attacker can execute arbitrary scripts by injecting them into functions like setTimeout
, setInterval
, etc.
To bypass CSP using unsafe-eval
, you can inject your payload into a function that allows eval. For example:
This payload will execute the alert("XSS")
script even if CSP is in place allowing unsafe-eval
.
Da biste izbegli da se ovo desi, server može poslati HTTP zaglavlje:
Očigledno, ova tehnika ne funkcioniše u headless pregledačima (botovima)
WebRTC
Na nekoliko stranica možete pročitati da WebRTC ne proverava connect-src
pravilo CSP-a.
Zapravo, možete procuriti informacije koristeći DNS zahtev. Pogledajte ovaj kod:
Druga opcija:
Provera CSP politika online
Automatsko kreiranje CSP
https://csper.io/docs/generating-content-security-policy
Reference
Pridružite se HackenProof Discord serveru kako biste komunicirali sa iskusnim hakerima i lovcima na bagove!
Hakerski uvidi Uključite se u sadržaj koji istražuje uzbuđenje i izazove hakovanja
Vesti o hakovanju u realnom vremenu Budite u toku sa dinamičnim svetom hakovanja kroz vesti i uvide u realnom vremenu
Najnovije najave Budite informisani o najnovijim nagradama za pronalaženje bagova i važnim ažuriranjima platforme
Pridružite nam se na Discord-u i počnite da sarađujete sa vrhunskim hakerima danas!
Last updated