Cross-Site Request Forgery (CSRF) | XSRF

Gauloran

Moderasyon Ekibi Lideri
7 Tem 2013
8,220
4
709
Bu konuda yüzeysel olarak Cross-Site requested forgery'den bahsedeceğiz birkaç örnekle de yaygın CSRF zafiyetlerini açıklamaya çalışacağız. Tabi bu açıkların nasıl önlenebileceğini de anlatacağız konuya geçelim.

CSRF Nedir?

S4tsDL.png

Saldırgan sitenin açığından faydalanarak siteye sanki o kullanıcıymış gibi erişerek işlem yapmasını sağlar. Bu güvenlik açığı; bir web tarayıcısı, bir web sayfasında yer alan betiklerin ikinci bir web sayfası üzerindeki veriye erişimine sadece bu iki sayfa aynı köke sahipse izin vermekte olan aynı kök politikasını çiğner.

Labler konunun altındadır.

Eğer zaten CSRF hakkında temel bilgiye sahipseniz yani temel konsepti falan biliyorsanız direkt pratiğe geçip konu sonundaki yorumlardan lablere gidebilirsiniz


CSRF saldırısının etkisi nedir?

Başarılı bir CSRF saldırısı gerçekleşirse saldırgan kurbanın yapmak istemediği şeyleri yapmasına neden olur yani mesela kurbanın hesabındaki mail adresini değiştirmesine sebep olabilir veya şifresini sadece mail olarak düşünmeyin para transferi bile yapmasına sebep olabilir. Duruma göre saldırgan kurbanın hesabı üzerinde %100 kontrole sahip olabilir eğer bahsettiğimiz bu kurbanın hesabı da yetkili bir hesapsa durum daha da vahimleşir. Çünkü uygulama verileri ve fonksiyonelliği tehlikeye girmiş olur.

CSRF nasıl çalışır?

CSRF saldırısının olması için 3 şarttan bahsedebiliriz:
Saldırganın kullanabileceği bir eylem olması gerekli:
Örneğin bu diğer kullanıcılar için izinleri değiştirme vb. bir şey olabilir. Ya da kullanıcıya özgü herhangi bir eylem olabilir (şifre değiştirme vb.)

Cookie tabanlı session handling:

Uygulama istekleri yapan kullanıcıyı tanımlamak için oturum çerezlerine güvenir. (session cookies) Çünkü kullanıcı isteklerini doğrulamak ve oturumları takip etmek için başka bir mekanizma yoktur.


Tahmin edilemeyen istek parametreleri olmamalı:

Eylemi gerçekleştiren istek saldırgan tarafından belirlenemeyen parametreler içermemeli. Örneğin saldırgan, bir kullanıcının şifresini değiştirmesine neden olduğunda saldırının başarıyla gerçekleşmesi için bu fonksiyon zafiyete sahip olmalıdır.
Mesela uygulama kullanıcının e-mail adresini değiştirmesini sağlayan bir fonksiyon içeriyor diyelim. Kullanıcı bunu yapmaya çalıştığında şu tarz bir HTTP isteği göndermiş olur:

HTTP:
POST /email/change HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Cookie: session=yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE

[email protected]


Bu mail adresini değiştirme olayı saldırganın ilgisini çeker ve buna takiben saldırgan şifre resetlemeyi tetikleyecek ve kullanıcının hesabı üzerinde full kontrole sahip olacaktır.

Uygulama hangi kullanıcının isteği gönderdiğini belirlemek için bir session cookie (oturum çerezi) kullanır.
Saldırgan eylemi gerçekleştirmek için istek parametrelerinin değerlerini kolayca belirleyebilir. Böylece saldırgan bir web sayfası oluşturabilir şu HTML kodlarına bir bakalım:

HTML:
<html>

    <body>

        <form action="https://vulnerable-website.com/email/change" method="POST">

            <input type="hidden" name="email" value="[email protected]" />

        </form>

        <script>

            document.forms[0].submit();

        </script>

    </body>

</html>


Eğer kurban kullanıcı saldırganın web sayfasını ziyaret ederse şöyle şeyler olacak:

Saldırganın sayfası açıklı siteye yönelik bir HTTP isteği tetikleyecek

Eğer kullanıcı açıklı siteye giriş yapmışsa tarayıcısı oturum çerezlerini yani session cookileri otomatik olarak isteğe dahil edecek.

Açıklı site isteği normal bir şekilde kullanıcı tarafından yapılmış gibi işleyecek ve kullanıcının mail adresini değiştirecek.

Not: isteklere farklı bilgiler de eklenebilir ve potansiyel risk demektir (misal isteklere otomatik olarak bazı kullanıcı kimlik bilgilerinin eklenmesi vb.)

CSRF Saldırısı Nasıl Oluşturulur?

HTML'i manuel olarak oluşturmak biraz yavaş kalabilir özellikle isteğin bir ton parametreye sahip olduğunu düşünürsek işler karışabilir.
Bir CSRF saldırısını oluşturmanın en kolay yolu, Burp Suite Professional'da default olan CSRF PoC özelliğini kullanmaktır: CSRF PoC
  • Burp Suite Professional'da test etmek veya istismar etmek istediğiniz herhangi bir yerde bir requıest seçin.​
  • Sağ tık ile içerik menüsünden Etkileşim araçları/CSRF PoC Oluştur'u seçin. (Engagement tools/Generate CSRF PoC)​
  • Burp Suite, seçilen isteği tetikleyecek olan bir HTML üretecek (kurbanın tarayıcısı tarafından otomatik olarak eklenecek çerezler hariç).​
  • Saldırının durumuna göre ince ayar yapmak için CSRF PoC generator'daki çeşitli seçenekleri ayarlayabilirsiniz. Request'lerin garip özellikleriyle başa çıkmak için bazı beklenmedik durumlarda bunu yapmanız gerekebilir.​
  • Oluşturulan HTML'yi bir web sayfasına kopyalayın, savunmasız web sitesinde oturum açmış bir tarayıcıda görüntüleyin, amaçlanan isteğin başarılı bir şekilde yapılıp yapılmadığını ve istenen eylemin gerçekleşip gerçekleşmediğini test edin.​

Bir CSRF istismarı nasıl sağlanır?

CSRF saldırıları için teslim mekanizmaları esasında reflected XSS ile aynıdır. Tipik olarak, saldırgan kötü amaçlı HTML'yi kontrolünde olan bir web sitesine yerleştirir ve ardından kurbanları bu web sitesini ziyaret etmeye teşvik eder. Bu işlem, kullanıcıya bir e-posta veya sosyal medya mesajı yoluyla web sitesine bir bağlantı verilerek yapılabilir veya bu saldırı, popüler bir web sitesine (örneğin, bir kullanıcı yorumuna) yerleştirilirse, kullanıcıların web sitesini ziyaret etmesini bekleyebilirler.

Bazı basit CSRF istismarlarının GET yöntemini kullandığını ve savunmasız web sitesinde tek bir URL ile tamamen bağımsız olabileceğini unutmayın. Bu durumda, saldırganın harici bir site kullanması gerekmeyebilir ve kurbanlara doğrudan savunmasız domain'de kötü amaçlı bir URL verebilir. Önceki örnekte, e-posta adresini değiştirme isteği GET yöntemiyle gerçekleştirilebiliyorsa çoğu ihtimalle bir saldırı şöyle görünür:
HTML:
<img src="https://vulnerable-website.com/email/[email protected]">

CSRF'ye karşı yaygın savunma biçimleri

Günümüzde CSRF güvenlik açıklarını başarılı bir şekilde bulmak ve kullanmak genellikle hedef web sitesi, kurbanın tarayıcısı veya her ikisi tarafından dağıtılan CSRF karşıtı önlemlerin bypass edilmesini içerir. Karşılaşacağınız en yaygın savunmalar ise şunlardır:

CSRF tokenleri - Bir CSRF tokeni, sunucu tarafından oluşturulan ve istemciyle paylaşılan benzersiz, gizli ve öngörülemez bir değerdir. Bir form göndermek gibi hassas bir eylem gerçekleştirmeye çalışırken istemci request'e doğru CSRF tokeni eklemelidir. Bu, bir saldırganın kurban adına geçerli bir request oluşturmasını çok zorlaştırır.

SameSite tanımlama bilgileri (cookies) - SameSite, bir web sitesinin tanımlama bilgilerinin diğer web sitelerinden kaynaklanan isteklere ne zaman dahil edildiğini belirleyen bir tarayıcı güvenlik mekanizmasıdır. Hassas eylemler gerçekleştirmek için istekler genellikle kimliği doğrulanmış bir tanımlama bilgisi gerektirdiğinden dolayı uygun SameSite kısıtlamaları bir saldırganın siteler arası bu tür eylemleri tetiklemesini engelleyebilir. 2021'den beri Chrome, Lax SameSite kısıtlamalarını varsayılan olarak uygular. Önerilen standart bu olması sebebi ile diğer büyük tarayıcıların gelecekte bu davranışı benimsemesini bekliyoruz.

Yönlendiren tabanlı doğrulama - Bazı uygulamalar normalde isteğin uygulamanın kendi domain'inden geldiğini doğrulayarak CSRF saldırılarına karşı savunma yapmaya çalışma amacı ile HTTP Referer başlığını kullanır. Bu genellikle CSRF token doğrulamasından daha az etkilidir.



Kaynak: What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy
Çevirmenler: @Gauloran @Dolyetyus
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 1: Savunmasız CSRF güvenlik açığı

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır.

Laboratuvarı çözmek için görüntüleyen kişinin e-posta adresini değiştirmek ve exploit sunucunuza yüklemek için CSRF saldırısını kullanan bir HTML oluşturun.

Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter

İpucu: Halihazırda başka bir kullanıcı tarafından alınmış bir e-posta adresini kaydedemezsiniz. Güvenlik açığını test ederken kendi e-posta adresinizi değiştirirseniz kurbana teslim ettiğiniz son exploit için farklı bir e-posta adresi kullandığınızdan emin olun.

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 2: Token doğrulamasının istek yöntemine bağlı olduğu CSRF

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır. CSRF saldırılarını engellemeye çalışır, ancak yalnızca belirli istek türleri için savunma uygular.

Laboratuvarı çözmek için görüntüleyen kişinin e-posta adresini değiştirmek için CSRF saldırısını kullanan bir HTML sayfası barındırmak için exploit sunucunuzu kullanın.

Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter


İpucu: Halihazırda başka bir kullanıcı tarafından alınmış bir e-posta adresini kaydedemezsiniz. Güvenlik açığını test ederken kendi e-posta adresinizi değiştirirseniz kurbana teslim ettiğiniz son exploit için farklı bir e-posta adresi kullandığınızdan emin olun.

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 3: Token doğrulamasının tokenin mevcut olup olmamasına bağlı olduğu CSRF

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır.

Laboratuvarı çözmek için görüntüleyen kişinin e-posta adresini değiştirmek için CSRF saldırısını kullanan bir HTML sayfası barındırmak için exploit sunucunuzu kullanın.

Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter

İpucu: Halihazırda başka bir kullanıcı tarafından alınmış bir e-posta adresini kaydedemezsiniz. Güvenlik açığını test ederken kendi e-posta adresinizi değiştirirseniz kurbana teslim ettiğiniz son exploit için farklı bir e-posta adresi kullandığınızdan emin olun.

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 4: Tokenin kullanıcı oturumuna bağlı olmadığı CSRF

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır. Site CSRF saldırılarını engellemeye çalışmak için tokenler kullanır ancak bunlar sitenin oturum işleme sistemine entegre değildir.

Laboratuvarı çözmek için görüntüleyen kişinin e-posta adresini değiştirmek için CSRF saldırısını kullanan bir HTML sayfası barındırmak için exploit sunucunuzu kullanın.

Bu sefer saldırınızı tasarlamanıza yardımcı olması için kullanabileceğiniz iki hesap var.
Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı 1:
wiener
Şifre 1: peter
Kullanıcı 2: carlos
Şifre 2: montoya

İpucu: Halihazırda başka bir kullanıcı tarafından alınmış bir e-posta adresini kaydedemezsiniz. Güvenlik açığını test ederken kendi e-posta adresinizi değiştirirseniz kurbana teslim ettiğiniz son exploit için farklı bir e-posta adresi kullandığınızdan emin olun.

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 5: Tokenin oturum dışı tanımlama bilgisine bağlı olduğu CSRF

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır. Site CSRF saldırılarını engellemeye çalışmak için tokenler kullanır ancak bunlar sitenin oturum işleme sistemine entegre değildir.

Laboratuvarı çözmek için görüntüleyen kişinin e-posta adresini değiştirmek için CSRF saldırısını kullanan bir HTML sayfası barındırmak için exploit sunucunuzu kullanın.

Bu sefer saldırınızı tasarlamanıza yardımcı olması için kullanabileceğiniz iki hesap var.
Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı 1:
wiener
Şifre 1: peter
Kullanıcı 2: carlos
Şifre 2: montoya

İpucu: Halihazırda başka bir kullanıcı tarafından alınmış bir e-posta adresini kaydedemezsiniz. Güvenlik açığını test ederken kendi e-posta adresinizi değiştirirseniz kurbana teslim ettiğiniz son exploit için farklı bir e-posta adresi kullandığınızdan emin olun.

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 6: Tokenin tanımlama bilgisinde (cookie içinde) çoğaltıldığı CSRF

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır. Güvenli olmayan "çift gönderme" diye bilinen bir CSRF önleme tekniğini kullanmaya çalışır.

Laboratuvarı çözmek için görüntüleyen kişinin e-posta adresini değiştirmek için CSRF saldırısını kullanan bir HTML sayfası barındırmak için exploit sunucunuzu kullanın.

Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter

İpucu: Halihazırda başka bir kullanıcı tarafından alınmış bir e-posta adresini kaydedemezsiniz. Güvenlik açığını test ederken kendi e-posta adresinizi değiştirirseniz kurbana teslim ettiğiniz son exploit için farklı bir e-posta adresi kullandığınızdan emin olun.

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 7: Yöntem geçersiz kılma yoluyla SameSite Lax atlama

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır.

Laboratuvarı çözmek için kurbanın e-posta adresini değiştiren bir CSRF saldırısı gerçekleştirin. Saldırınızı barındırmak için sağlanan exploit sunucusunu kullanmalısınız.

Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter

Not: Varsayılan SameSite kısıtlamaları tarayıcılar arasında farklılık gösterir. Kurban Chrome kullandığından dolayı istismarınızı test etmek için Chrome'u (veya Burp'ın yerleşik Chromium tarayıcısını) kullanmanızı öneririz.

İpucu: Halihazırda başka bir kullanıcı tarafından alınmış bir e-posta adresini kaydedemezsiniz. Güvenlik açığını test ederken kendi e-posta adresinizi değiştirirseniz kurbana teslim ettiğiniz son exploit için farklı bir e-posta adresi kullandığınızdan emin olun.


Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 8: İstemci tarafı yönlendirme yoluyla SameSite Strict bypass'ı

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır.

Laboratuvarı çözmek için kurbanın e-posta adresini değiştiren bir CSRF saldırısı gerçekleştirin. Saldırınızı barındırmak için sağlanan exploit sunucusunu kullanmalısınız.

Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter

İpucu: Halihazırda başka bir kullanıcı tarafından alınmış bir e-posta adresini kaydedemezsiniz. Güvenlik açığını test ederken kendi e-posta adresinizi değiştirirseniz kurbana teslim ettiğiniz son exploit için farklı bir e-posta adresi kullandığınızdan emin olun.

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 9: Kardeş domain üzerinden SameSite Strict bypass'ı

Bu laboratuvarın canlı sohbet özelliği siteler arası WebSocket hırsızlığına (CSWSH) karşı savunmasızdır. Laboratuvarı çözmek için kurbanın hesabına giriş yapın.

Bunu yapmak için, kurbanın sohbet geçmişini varsayılan Burp Collaborator sunucusuna sızdıran bir CSWSH saldırısı gerçekleştirmek için sağlanan exploit sunucusunu kullanın. Sohbet geçmişi, oturum açma kimlik bilgilerini düz metin olarak içerir.

Henüz yapmadıysanız, bu laboratuvarı denemeden önce WebSocket güvenlik açıkları hakkındaki konumuzu okumanızı öneririz.

İpucu: Mevcut tüm saldırı yüzeyini tam olarak denetlediğinizden emin olun. Saldırınızı gerçekleştirmenize yardımcı olabilecek ek güvenlik açıklarına dikkat edin ve aynı site içinde iki domainin bulunabileceğini unutmayın.


Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 10: Çerezleri yenileme yoluyla SameSite Lax bypass'ı

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır.

Laboratuvarı çözmek için kurbanın e-posta adresini değiştiren bir CSRF saldırısı gerçekleştirin. Saldırınızı barındırmak için sağlanan exploit sunucusunu kullanmalısınız.

Bu laboratuvar, OAuth tabanlı oturum açmayı destekler. Aşağıdaki kimlik bilgileriyle sosyal medya hesabı üzerinden giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter

Not: Varsayılan SameSite kısıtlamaları tarayıcılar arasında farklılık gösterir. Kurban Chrome kullandığından dolayı istismarınızı test etmek için Chrome'u (veya Burp'ın yerleşik Chromium tarayıcısını) kullanmanızı öneririz.

İpucu: Mevcut tüm saldırı yüzeyini tam olarak denetlediğinizden emin olun. Saldırınızı gerçekleştirmenize yardımcı olabilecek ek güvenlik açıklarına dikkat edin ve aynı site içinde iki domainin bulunabileceğini unutmayın.
Tarayıcılar, tıklama gibi manuel bir kullanıcı etkileşimi tarafından tetiklenmedikçe pop-up pencerelerin açılmasını engeller. Kurban, ona gönderdiğiniz herhangi bir sayfaya tıklayacaktır ve bu sayede aşağıdaki gibi bir global olay işleyici kullanarak açılır pencereler oluşturabilirsiniz:

JavaScript:
<script>
    window.onclick = () => {
        window.open('about:blank')
    }
</script>

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 11: Yönlendiren doğrulamasının başlığın mevcut olup olmamasına bağlı olduğu CSRF

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır. Domainler arası istekleri engellemeye çalışır ancak güvenli olmayan bir geri dönüşü vardır.
Laboratuvarı çözmek için görüntüleyen kişinin e-posta adresini değiştirmek için CSRF saldırısını kullanan bir HTML sayfası barındırmak için exploit sunucunuzu kullanın.

Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter

İpucu: Mevcut tüm saldırı yüzeyini tam olarak denetlediğinizden emin olun. Saldırınızı gerçekleştirmenize yardımcı olabilecek ek güvenlik açıklarına dikkat edin ve aynı site içinde iki domainin bulunabileceğini unutmayın.

Lab linki:
 

Dolyetyus

Özel Üye
21 Nis 2020
1,208
3
677
Delft
Lab 12: Bozuk yönlendiren doğrulaması ile CSRF

Bu labdaki e-posta değiştirme fonksiyonu CSRF'ye karşı savunmasızdır. Domainler arası istekleri engellemeye çalışır ancak algılama mekanizması atlatılabilir.
Laboratuvarı çözmek için görüntüleyen kişinin e-posta adresini değiştirmek için CSRF saldırısını kullanan bir HTML sayfası barındırmak için exploit sunucunuzu kullanın.

Aşağıdaki kimlik bilgilerini kullanarak kendi hesabınıza giriş yapabilirsiniz:
Kullanıcı:
wiener
Şifre: peter

İpucu: Mevcut tüm saldırı yüzeyini tam olarak denetlediğinizden emin olun. Saldırınızı gerçekleştirmenize yardımcı olabilecek ek güvenlik açıklarına dikkat edin ve aynı site içinde iki domainin bulunabileceğini unutmayın.

Lab linki:
 
Ü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.