SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama
SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama

Tüm Kayıtlar

Kategori Cookie Güvenliği / Oturum Yönetimi
Tipik Önem Derecesi Orta
OWASP A01:2021 – Kırık Erişim Kontrolü; A05:2021 – Güvenlik Yapılandırma Hatası
CWE CWE-1275 – Uygunsuz SameSite Özelliğine Sahip Hassas Cookie
Diğer adları SameSite cookie yanlış yapılandırması, cookie üzerinden CSRF, siteler arası cookie sızıntısı
Etkilenen sistemler Oturum, kimlik doğrulama veya hassas işlevsel cookie'ler oluşturan tüm web uygulamaları
İlgili standart RFC 6265bis (draft-ietf-httpbis-rfc6265bis)

Genel Bakış

Google Chrome 51 (2016) ile tanıtılan ve ardından RFC 6265bis'te standartlaştırılan SameSite cookie özelliği, tarayıcılara bir isteğin farklı bir siteden kaynaklanması durumunda cookie'nin gönderilip gönderilmeyeceğini bildirir. Bu özellik açıkça belirtilmediğinde veya haklı bir neden olmaksızın SameSite=None olarak ayarlandığında, tarayıcı cookie'yi üçüncü taraf sayfalar tarafından başlatılan çapraz kaynaklı isteklere ekleyebilir. Bu davranış, Cross-Site Request Forgery (CSRF) saldırılarının temel ön koşuludur ve siteler arası bilgi sızıntısına da katkıda bulunur.

2020 öncesinde tarayıcıların örtük varsayılanı, cookie'leri kökenden bağımsız olarak tüm isteklerle göndermekti (SameSite=None ile eşdeğer). Modern tarayıcılar (Chrome 80+, Firefox, Safari) artık özellik yoksa varsayılan olarak SameSite=Lax uygulamakta ve riski kısmen azaltmaktadır; ancak bu tarayıcı düzeyindeki varsayılan, açık sunucu tarafı yapılandırmasının yerini tutmaz; çünkü eski tarayıcılar ve standart dışı kullanıcı aracıları bu sezgisel kuralı uygulamaz.

Nasıl çalışır?

SameSite özelliği, her biri farklı bir uygulama düzeyi tanımlayan üç değer alır:

  • Strict: Cookie yalnızca istek, cookie'nin alanıyla aynı siteden geldiğinde gönderilir. Hiçbir koşulda siteler arası gönderim gerçekleşmez.
  • Lax: Cookie, aynı site istekleriyle ve güvenli HTTP yöntemleri (GET, HEAD) kullanan üst düzey gezinmelerle (örneğin bir bağlantıya tıklama) gönderilir. Siteler arası alt kaynak isteklerinde (resimler, iframe'ler, AJAX/fetch) gönderilmez.
  • None: Cookie, kökenden bağımsız olarak tüm isteklerle gönderilir. Aynı anda Secure özelliğinin de ayarlanmasını gerektirir; aksi hâlde modern tarayıcılar cookie'yi tamamen reddeder.

Özellik eksik olduğunda ve tarayıcı Lax'e geri döndüğünde, durum değiştiren GET uç noktaları açık kalır. Tarayıcı eski veya uyumsuzsa ve None davranışına eşdeğer biçimde geri dönerse, tüm durum değiştiren uç noktalar açığa çıkar. Bir saldırgan bunu kontrol ettiği bir sayfaya yerleştirdiği sahte bir istekle (otomatik form gönderimi, resim etiketi, fetch çağrısı) sömürebilir:

  1. Kurban bank.example.com'da kimliği doğrulanmış durumda; SameSite içermeyen bir oturum cookie'si depolanmış.
  2. Kurban, saldırganın kontrolündeki evil.example.com'u ziyaret eder.
  3. Kötü amaçlı sayfa, bank.example.com/transfer'e sessizce bir POST isteği gönderir.
  4. Tarayıcı oturum cookie'sini otomatik olarak ekler ve sunucu isteği meşru olarak işler.

CSRF'nin ötesinde, eksik SameSite özelliği aynı zamanda siteler arası arama saldırılarına ve bir saldırganın cookie varlığından kimlik doğrulama durumunu çıkardığı zamanlama yan kanallarına da olanak tanır.

İş etkisi

Eksik SameSite özelliğinin mümkün kıldığı başarılı bir CSRF saldırısı, bir saldırganın kurbanın kimliği doğrulanmış hâlde gerçekleştirebileceği her eylemi yapmasına izin verir; bunlar arasında hesap kimlik bilgilerini veya e-posta adreslerini değiştirme, finansal transfer başlatma, yapılandırma değiştirme veya veri silme sayılabilir. Saldırganın kurbanın kimlik bilgilerini bilmesine gerek yoktur; yalnızca kurbanın aktif oturumu yeterlidir.

Uyumluluk açısından OWASP ASVS (Düzey 1, gereksinim 3.4.3), oturum yönetimine ilişkin PCI DSS gereksinimleri ve kişisel verileri uygun teknik önlemlerle koruma yükümlülüğü kapsamındaki GDPR ihlalleri söz konusu olabilir. Düzenlenmiş sektörlerdeki kuruluşlar, bu yanlış yapılandırmadan kaynaklanan bir ihlal sonrasında para cezası, denetim bulgusu veya sözleşmesel yaptırımlarla karşılaşabilir.

Nasıl giderilir?

  1. Tüm oturum ve kimlik doğrulama cookie'leri için temel olarak SameSite=Lax ayarlayın. Bu, çoğu uygulama için önerilen varsayılandır; siteler arası alt kaynak isteklerinde cookie iletimini önlerken üst düzey gezinmeler için işlevselliği korur.
  2. Yönetim oturumları veya ödeme akışları gibi son derece hassas cookie'ler için SameSite=Strict kullanın; siteler arası gezinme bağlantılarını kesmenin kabul edilebilir olduğu durumlarda bu tercih edilir.
  3. Cookie'nin açıkça bir siteler arası bağlamda gerekli olmadığı durumlarda SameSite=None'dan kaçının (örn. gömülü widget'lar, OAuth akışları). None zorunluysa her zaman Secure ile birleştirin ve Eşzamanlayıcı Belirteç Modeli veya Çift Gönderim Cookie Modeli gibi ek CSRF savunmaları uygulayın.
  4. Özelliği sunucu tarafında, her Set-Cookie yanıt başlığında ayarlayın; tarayıcı varsayılanlarına güvenmeyin. Örnek: Set-Cookie: sessionid=abc123; Path=/; HttpOnly; Secure; SameSite=Lax
  5. Birinci taraf kodu ve üçüncü taraf kütüphane/çerçeveler tarafından üretilen tüm cookie'leri denetleyin. Pek çok web çerçevesi genel cookie yapılandırması sunar (örn. Django'da SESSION_COOKIE_SAMESITE, Express-session'da cookie.sameSite, Spring Boot'ta session.cookie.samesite).
  6. Yalnızca tarayıcı varsayılanlarına hafifletme olarak güvenmeyin; eski tarayıcılar, gömülü WebView'lar ve standart dışı istemciler Lax varsayılan davranışını uygulamayabilir.
  7. Savunmaları katmanlayın: Tüm durum değiştiren istekler için CSRF belirteçleri, Origin/Referer başlık doğrulaması ve aynı cookie'lerdeki HttpOnly ile Secure bayraklarıyla SameSite'ı tamamlayın.

Kaynaklar

Sıkça sorulan sorular

Modern tarayıcılar (Chrome 80+, Firefox, güncel Safari), özellik yokken varsayılan olarak SameSite=Lax uygular. Ancak eski tarayıcılar ve standart dışı istemciler bunu SameSite=None olarak değerlendirir ve cookie'yi tüm siteler arası isteklerle gönderir. Bu tarayıcı düzeyindeki varsayılana güvenmek, açık sunucu tarafı yapılandırmasının yerini tutmaz.

SameSite=Lax, siteler arası alt kaynak isteklerinde (resimler, iframe'ler, AJAX) cookie iletimini engeller. Ancak üst düzey GET gezinmelerinde cookie'ye izin vermeye devam eder; bu da GET tabanlı durum değiştiren uç noktaları savunmasız bırakır. Tam CSRF koruması için SameSite=Lax veya Strict'i CSRF belirteçleriyle birleştirin.

SameSite=None yalnızca bir cookie'nin üçüncü taraf gömülü widget'lar, çapraz kaynaklı OAuth akışları veya birleşik oturum açma senaryoları gibi meşru bir siteler arası bağlamda gönderilmesi gerektiğinde uygundur. Her zaman Secure özelliğiyle birlikte kullanılmalı ve ek CSRF önlemleri (örn. CSRF belirteçleri) uygulanmalıdır.

Bunlar farklı katmanlarda birbirini tamamlayan savunmalardır. Eksik SameSite, tarayıcının hangi sitelerin cookie taşıyan istekleri tetikleyebileceğini kısıtlamadığı anlamına gelir. Eksik CSRF belirteçleri ise sunucunun bir isteğin kullanıcı tarafından kasıtlı olarak başlatıldığını doğrulamadığı anlamına gelir. En iyi uygulama her ikisini bağımsız olarak hayata geçirmektir.

En azından oturum cookie'leri, kimlik doğrulama belirteçleri ve varlığı ya da değeri sunucu tarafı durumu veya erişim kararlarını etkileyen tüm cookie'ler SameSite ayarına sahip olmalıdır. Tüm cookie'lere SameSite=Lax uygulamak, bakımı en kolay ve en güvenli yaklaşımdır.