CSRF/XSRF

CSRF Nedir, Nasıl Oluşur?
Siteler arası istek sahteciliği saldırısı olarak bilinen Cross-Site Request Forgery (CSRF), saldırganın kullanıcıyı manipüle etmesidir. Bu manipüle işlemi çeşitli phishing yöntemleridir. Böylece kullanıcının authentication işlemini tamamladığı hedef siteye, çerezlerini kullanarak kullanıcının isteği dışı çeşitli faaliyetleri gerçekleştirebilir. (hesabından para aktarmak, e-posta adresini ve şifresini değiştirmek )
İlk olarak zafiyeti tam olarak detaylı incelemeden önce temelde bilinmesi gerekenlere değinelim.
HTTP stateless bir protokoldür. Stateless olması durum bilgisi tutmadığını belirtir. Yani request-response cycle’ı (istek-cevap döngüsü) yaşandıktan sonra diğer istekte, bir önceki istekte neler olup bittiğine dair bir bilgi tutmadığı anlamına gelir. Cookieler de tam bu noktada hayatımıza girdi. Bu sayede yapılan her istekte kullanıcı bilgileri alınmadan cookieler üzerinden işlem yapılarak sunucu tarafında session bilgisi takip edilebilir hale geldi.
- Çoğu web uygulaması, authentication işlemini kullanıcının oturumlarına dayalı olarak gerçekleştirir. Authentication işlemi tamamlandıktan sonra browser bir session cookie’si saklar. Ardından browser cookie’yi kayıtlı domaine her yapılan istekle birlikte oturum işlemini daha kolay hale getirmek için gönderir.
Bu mekanizmanın doğasında bulunan risk, uygulamaya giden requestlerin hangi kaynaktan ve nasıl gönderildiği kontrol edilmediği sistemlerde çerezlerin eklenerek gitmesidir. Gerekli önlemler alınmadığında CSRF zafiyeti ortaya çıkar.
CSRF Nasıl Tespit Ederiz?
Sistemde Token yönteminin kullanılması, kullanıcıdan sürekli kimlik doğrulama işleminin gerçekleştirmesine gerek bırakmaz. Böylece arka planda doğrulamayı yapar. Özellikle CSRF atağını engellemek için sisteme giriş yapan kullanıcıya her işlemde farklı ve tahmin edilmesi güç token bilgisi verir. Verilen bu token bilgisi session boyunca aynı kalmaz ve session sonlanınca etkisiz hale gelmelidir. Sonuç olarak eğer token vb. kontrolü yapılmazsa, CSRF zafiyetini tespit ederiz.
CSRF Zafiyet Sömürüsü (CSRF Savunmasız)
HTTP GET isteği göndermek hiçbir zaman herhangi bir verinin değişmesine neden olmamalıdır. Ancak bazı web uygulamaları, veri değişikliği durumlarına uygun olan POST yerine GET yöntemini kullanılırlar.
![]()
Bu istek uygulamada kimliği doğrulanmış bir kullanıcıdan gittiği için saldırgan bu noktada URL manipüle edebilir. Kimlik doğrulama işlemini tamamlamış hedef kullanıcıya bu isteği gerçekleştirmesini sağlayacak phishing yöntemleri kullanabilir.
Bunlardan birisi saldırgan kendi sitesine kurbanı yönlendirip tagi içerisinde manipüle ettiği isteği kullanıcı browserında parse ettirerek (parse işlemi sırasında browser isteğe cookieleri ekleyecek) manipüle edilmiş isteği kurban tarafından yaptırmış olacaktır. Örneğin:
![]()
POST isteklerine dayalı CSRF atağında, javascript kullanarak kullanıcının browserına bir
