“Siteler Arası İstek Sahteciliği (CSRF), son kullanıcıyı kimliğinin doğrulandığı bir web uygulamasında istenmeyen eylemler gerçekleştirmeye zorlayan bir saldırıdır.” OWASP Siteler Arası İstek Sahteciliği (CSRF)
CSRF (Cross-Site Request Forgery) hatalarının temel sebepleri, web uygulamalarının güvenlik eksikliklerinden kaynaklanır. İşte bu hataların temel sebepleri:
- Oturum Yönetimi: CSRF saldırıları, genellikle kullanıcının oturum bilgilerini kullanır. Eğer bir web uygulaması, oturum yönetimini doğru bir şekilde gerçekleştiremiyorsa ve oturum bilgilerini yeterince güvenli bir şekilde saklamıyorsa, saldırganın kullanıcının adına istekler göndermesi kolaylaşır.
- Güvenlik Kontrol Eksikliği: Bazı web uygulamaları, kullanıcının tarayıcısından gelen isteklerin kaynağını doğrulamak için yeterli güvenlik kontrollerini yapmaz. Bu durumda, saldırganlar güvenilir gibi görünen istekleri kullanıcı adına gönderebilir.
- CSRF Token Eksikliği veya Zayıf İmplementasyon: Web uygulamaları, kullanıcıların oturumlarını korumak için CSRF token’larını kullanmalıdır. Eğer bu tokenlar eksikse veya zayıf bir şekilde uygulanmışsa, saldırganlar bu önlemi aşabilir ve istekleri gönderebilir.
- Güncel Olmayan Oturum Bilgisi Kullanımı: Eğer bir web uygulaması, oturum bilgilerini yeterince sık güncellemiyorsa, saldırganlar eskiden ele geçirdikleri oturum bilgilerini kullanarak istekleri gönderebilir.
- Güvenlik Politikalarının Eksikliği: Web tarayıcıları, güvenlik politikaları ve Cross-Origin Resource Sharing (CORS) gibi önlemlerle kullanıcının tarayıcısından gönderilen istekleri kontrol eder. Bu politikaların eksik veya zayıf olması durumunda, saldırganlar farklı bir kaynaktan istek göndererek bu önlemleri atlayabilir.
- Güvenli İletişim Eksikliği: Web uygulamaları ve tarayıcılar arasındaki iletişimde SSL/TLS gibi güvenli protokollerin eksik veya hatalı bir şekilde kullanılması, saldırıları kolaylaştırabilir.
- Kullanıcı Bilinçsizliği: Kullanıcıların tarayıcılarında oturum açıkken, başka bir tarayıcı sekmesinde kötü niyetli bir siteyi ziyaret etmeleri veya kötü amaçlı içerikli bir bağlantıyı tıklamaları da CSRF saldırılarına açık bir kapı bırakabilir.
Bu sebeplerin bir veya birkaçının bir araya gelmesi, bir web uygulamasının CSRF saldırılarına karşı savunmasız olmasına neden olabilir. Bu nedenle, web uygulamalarının güvenlik açıklarını düzeltmek ve kullanıcı bilgilerini korumak için güvenlik en iyi uygulamalarını izlemeleri önemlidir.
Geliştiricilerin aşağıdaki gibi hatalar aldığı CSRF belirteci doğrulamalarıyla ilgili sorunlar gerçekten sık sık ortaya çıkıyor:
- 403 Forbidden CSRF Token required
- 403 Forbidden CSRF Token expired
Peki İdeal akış nasıl çalışır?
- İstemci uygulama X-CSRF-TOKEN: Fetch başlığıyla bir GET isteği gönderir (bu genellikle $metadata veya basit bir hizmet belgesi isteğinde gönderilir).
2. Sunucu daha sonra 200 OK ve yanıt başlığı ile yanıt verir: X-CSRF-TOKEN: ve bir veya daha fazla Set-Cookie başlığı (aşağıda vurgulanmamıştır)
3. İstemci bu belirteci ve tüm çerezleri Set-Cookie yanıt başlığında saklamalı (buradaki çerez HTTP oturumunu tanımlar) ve oturumu boyunca her değişiklik isteğinde* göndermelidir. Oturum yenilendiğinde, CSRF belirteci de yeniden bir belirteç talep edilerek yenilenmelidir.
*Bir değişiklik isteği, POST, PUT, PATCH, MERGE, DELETE (CUD) gibi GET olmayan bir istektir. $batch isteklerinin her zaman POST yöntemi ile gönderildiğini unutmayın.
4. Sunucu bu belirteci ve oturum kimliği çerez(ler)ini kontrol edecek ve geçerli ve eşleşiyorlarsa isteği işleme koyacaktır. Bunlardan en az biri geçersiz veya süresi dolmuşsa, sunucu yanıt başlığıyla birlikte 403 Forbidden ile yanıt verecektir: X-CSRF-TOKEN: Gerekli, yanıt gövdesi ile: “CSRF Token gerekli”
5. İstemci otomatik olarak X-CSRF-TOKEN: Fetch ile yeni bir GET isteği göndermeli ve yanıt başlığından yeni belirteci almalıdır.
Yani başarılı senaryo şu şekilde görünecektir (Set-Cookie + Cookie diyagramda mevcut değildir):
Ve bir kez başarısız olduğu ve istemcinin CSRF belirtecini yeniden talep etmesi gerektiği senaryo şu şekilde görünecektir (Set-Cookie + Cookie diyagramda mevcut değildir):
Genel Bilgi:
CSRF token (Cross-Site Request Forgery token), web uygulamalarında güvenlik açıklarını önlemek için kullanılan bir güvenlik önlemidir. Aşağıda CSRF token’ı paragraflar halinde özetleyebilirim:
- Tanım: CSRF token, web uygulamalarında kullanıcıları kötü niyetli saldırılardan korumak için kullanılan bir güvenlik mekanizmasıdır. Bu token, kullanıcının tarayıcısında depolanır ve kullanıcı tarafından başlatılan isteklerin güvenilirliğini sağlamak için kullanılır.
- Neden Gereklidir: CSRF saldırıları, kullanıcının tarayıcısında oturum açıkken, kullanıcının bilgisi olmadan kötü niyetli bir web sitesi veya uygulama tarafından isteklerin gönderilmesini içerir. CSRF token’ı, bu tür isteklere karşı savunma mekanizması olarak görev yaparak, isteğin gerçekten kullanıcı tarafından yapıldığını doğrular.
- Çalışma Prensibi: Web uygulamaları, kullanıcıya özel benzersiz bir CSRF token sağlar. Bu token, kullanıcının oturum açtığı tarayıcısında saklanır. Her istek yapıldığında, tarayıcı tarafından otomatik olarak eklenen bu token, sunucunun isteğin güvenilir olduğunu doğrulamasına yardımcı olur.
- Bağlam ve Güvenlik Katkısı: CSRF token’ı, kullanıcı tarafından başlatılan isteklerin güvenilir olduğunu sağlamak için genellikle form gönderimlerinde, AJAX isteklerinde ve diğer önemli kullanıcı etkileşimlerinde kullanılır. Bu, kullanıcının kimlik bilgilerini korurken, kötü niyetli saldırılara karşı bir katman ekler.
- Uygulama Zorunluluğu: Web uygulamaları, kullanıcıların güvenliği için CSRF token’larını zorunlu kılabilir. Bu, uygulama geliştiricilerine ve kullanıcılara, güvenlik önlemlerini ihmal etmeden uygulama geliştirmelerini ve kullanmalarını sağlar.
- Token Oluşturma ve Yenileme: CSRF token’larının güvenliği için, uygulamalar genellikle her istekte token’ı yeniler ve günceller. Bu, olası bir token çalınması durumunda saldırganın token’ı kullanma şansını azaltır.
- Özetleme: CSRF token’ı, web uygulamalarının güvenlik seviyelerini artırmak için kullanılan önemli bir güvenlik önlemidir. Kullanıcıların oturumlarını ve bilgilerini kötü niyetli saldırılara karşı korur, böylece güvenli bir çevre sağlar. Uygulama geliştiricileri tarafından doğru bir şekilde uygulandığında, CSRF token’ı, web uygulamalarının güvenliği için önemli bir katkı sağlar.