CSP(Content Security Policy (CSP) Nedir ve Bypass Teknikleri Nelerdir ?

SecurityFaTHeR

Uzman üye
4 Şub 2022
1,321
360
Merhabalar THT ailesi bügün sizlere CSP(Content Security Policy) Nedir ? ve Bypass Tekniklerinden bahsedeceğim.

Content Security Policy Nedir ?
Bir İçerik Güvenliği Politikası (CSP) veya içerik güvenliği stratejisi, web sitelerinin güvenliğini artırmayı amaçlar.CSP, web uygulamalarımızı başta XSS olmak üzere, bir dizi güvenlik zafiyetine karşı korumak için ek bir güvenlik katmanı sunmaktadır.

Content Security Policy Nasıl Çalışır ?
CSP'de kurallar tanımlarken whitelist (beyaz liste) olarak bilinen bir yaklaşım kullanılmaktadır. Whitelist yaklaşımı sayesinde, yalnızca kabul ettiğimiz kaynakları belirtip, bu kural ile eşleşmeyen tüm kaynakların kullanımını engelleyebiliriz. Bu kaynakların hangileri olacağını HTTP response'ları ile beraber döndürdüğümüz CSP talimatlarında belirtmemiz yeterli.
Content Security Policy Talimatları
CSP headerı ile birlikte, aşağıda sıralayacağımız kontrol alanlarındaki kaynak kullanımlarını sınırlandırabilir, tanımlayabiliriz.

Kod:
base-uri : Base elementi, sayfadaki tüm relative URL’lerin kendisine çözümleneceği absolute URL’i belirtilen bir değerdir. <base> elementinde kullanılacak değer ile ilgili kısıt tanımlamamıza yardımcı olur. Böylece Base Tag Hijacking saldırıları engellenebilir.

block-all-mixed-content

child-src: Deprecated olan frame-src yerine kullanılır. Sayfaya embed edilecek olan framelerin alabileceği kaynak değerleri tanımlar. Sayfamızı Frame Injection saldırılarına karşı koruyabilmek için, ek bir tedbir olarak kullanabiliriz.

connect-src : XHR, Web Sockets, EventSource ile bağlanılabilecek kaynakları kısıtlamamıza yardımcı olur.  Eğer izin verilmeyen kaynaktan bir sorgulama yapılırsa tarayıcından 400 HTTP kodu döner.

default-src : Burada tanımlanan değer, -src ile biten pek çok direktifin varsayılan değer tanımlamak için kullanılır. Eğer default-src ‘i http://www.example.com olarak tanımlandı ise ve font-src ‘ye bir değer vermediysek bu durumda fontlar yalnızca https://www.example.comadresinden yüklenir.

font-src : fontların yüklenebileceği kaynakları belirtir.

form-action : form tagları için geçerli olan action’ları belirtir.

frame-ancestors : mevcut sayfayı, frame, iframe, embeded ve applet olarak yükleyebilecekleri kaynakları belirtir. X-Frame-Options’in bir benzeridir. Clickjacking, UI Redressing vb.. saldırıları engellememize yardımcı olur. Bu direktifi ‘none’ olarak ayarlamak X-Frame-Options: DENYile aynıdır.

frame-src : Sayfayı embed edilecek olan framelerin alabileceği kaynak değerleri tanımlar. Sayfamızı Frame Injection saldırılarına karşı koruyabilmek için ek bir tedbir olarak kullanılır.

img-src : Resimlerin yüklenebileceği kaynakları tanımlar.

media-src : Geçerli ses veya görüntü kaynaklarını tanımlar.

manifest-src : Manifest dosyasının kaynağını tanımlar.

object-src : Flash ve diğer pluginlerin yüklenebileceği kaynakları tanımlar.

plugin-types : Yüklenebilecek plugin MIME tiplerini belirler veya kısıtlar.

report-uri : Belirttiğiniz direktiflerin ihlali durumunda bir JSON nesnesinin POST edileceğini URI.

sandbox : Sandbox modu sayesinde birçok etkinliği kısıtlayabilirsiniz. Popupları engeller, formları durdurur, javascriptleri çalıştıramaz hale getirebilirsiniz. Sandbox direktifi için boş değer tanımlarsanız aşağıdaki listenin tümünü tanımlamış sayılırsınız yada sadece seçtiklerinizi çalışmasını sağlayabilirsiniz.



script-src : Geçerli javascript kaynaklarını tanımlar.

script-src-elem: komut dosyası isteklerinin ve bloklarının yürütülmesinin gerçekleşebileceği konumu kontrol eder.

style-src : Stil dosyaları için kaynak tanımlanması yapar.

upgrade-insecure-requests : HTTP isteklerini HTTPs olarak değiştirir.

worker-src : Worker dosyalarının kaynaklarını tanımlar.

Örnek:
Kod:
Content-Security-Policy: script-src 'self' https://apis.google.com
Örneğin yukarıdaki CSP talimatı sayesinde, web sayfamızda yalnızca kendi originimizden (self) ve apis.google.com üzerinden yüklenecek scriptlere izin veriyoruz. Inline script çağrıları, olay tetikleyicileri vasıtası ile script çalıştırmak bu durumda mümkün olmayacaktır.

Content Security Policy Bypass Teknileri

1-Inline Injection

Origin temelli bir kısıtlama/izin mekanizması ile pek çok sorun çözülebilirdi. Fakat origin temelli bir kısıtlama kullanılsa bile, CSP'nin varlık nedenlerinden biri olan XSS için hala büyük bir boşluk var, Inline Injection:
unsafe-inline: Bu, satır içi <script> öğeleri, javascript: URL'ler, satır içi olay işleyicileri ve satır içi <stil> öğeleri gibi satır içi kaynakların kullanımına izin verir. Yine güvenlik nedenleriyle bu önerilmez.

Kod:
<script>alert(123);</script>
<a href= onclick="javascript:alert(123)">Click me!</a>
<img src=1 onerror="alert(1);"/>
CSP bu problemi, inline scriptleri engelleyerek çözmektedir. CSP sadece script tagları arasına gömülmüş kodları değil, inline olay tetikleyecilerini ve javascript: URL'lerini de engellemektedir.
Bu sebeple script tagları arasındaki kodlarımızı harici dosyalar olarak yeniden sayfalarımızda yüklememiz gerekecektir.
2-Eval
Girdi olarak kabul ettiği metinleri, döküman context'i içerisinde çalıştıran eval, new Function(), setTimeOut, setInterval fonksiyonlarının kullanımları CSP tarafından otomatik olarak engellenmiştir.

unsafe-inline: Bu, satır içi <script> öğeleri, javascript: URL'ler, satır içi olay işleyicileri ve satır içi <stil> öğeleri gibi satır içi kaynakların kullanımına izin verir. Yine güvenlik nedenleriyle bu önerilmez.
Eğer, eval gibi Text-to-Javascript fonksiyonlarının kullanımı kaçınılmaz ise, "unsafe-eval" talimatını kullanarak, CSP güvenlik mekanizmasında koca bir delik açabilirsiniz.


Content Security Policy(CSP) Örnek Lab Çözümü



İlk olarak xss payloadı girmek ile başlayalım.


Gördüğünüz gibi xss payloadımızı yazdıktan sonra resme tıklayıp incele dediğimizde source kısmına girdiğimizde Content Security Policy(CSP) tarafından hata alıyoruz ve javascript kodu çalıştıramıyoruz ama html kodu çalıştırabiliyoruz bu demek oluyorki Content Security Policy(CSP) talimatları ile javascript çalıştırmamız filtrelenmiş ama bunu bypass edebiliriz,bu labda script-src,unline-safe,report-uri,script-src-elem talimatlarını kullanarak Content Security Policy(CSP)'yi bypass edeceğiz.




şimdi burada gördüğünüz gibi hangi Content Security Policy(CSP) talimatlarını kullandığını response olarak yazmış orada report-uri var report-uri sayesinde token= değerine kendimizin istediği talimatları girebileceğiz.





Payload;
Kod:
%3Cscript%3Ealert%281%29%3C%2Fscript%3E&token=;script-src-elem%20%27unsafe-inline%27

öncelikle <script>alert(1)</script> yazısını hexleyerek yazıyor. ondan sonra report-uri sayesinde token= verisine kendimizin belirttiği CSP talimatları ile javascript çalıştırabiliyoruz çünkü burada unsafe-inline adındaki talimatımız sayesinde urllerdede <script>,javascript: gibi kullanımlara izin veriyor script-src talimatı ilede javascript kaynağını belirtiyoruz ve script-src-elem sayesinde ise komut dosyası isteklerinin ve bloklarının yürütülmesinin gerçekleşebileceği konumu kontrol ediyor ve bu sayede Content Security Policy(CSP) bypass ediyoruz.


Kaynaklar;

1.Kaynak
2.Kaynak
3.Kaynak
4.Kaynak
5.Kaynak

Bu konumuzda Content Security Policy(CSP) Nedir ondan bahsettim ve Bypass Teknikleri hakkında bilgi vermeye çalıştım iyi günler THT ailesi.
 
Son düzenleme:

ekremk

Üye
31 May 2023
92
13
Eline Emeğine Sağlık Güzel Ve Detaylı Konu Olmuş.


NE MUTLU TÜRKÜM DİYENE
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.