Genel Bakış
HTTP cookie'leri, web uygulamalarının durum yönetimi — en kritik olarak kimliği doğrulanmış oturumlar — için kullandığı temel mekanizmadır. RFC 6265, tarayıcıların cookie değerlerini ne zaman ve nasıl ileteceğini veya açığa çıkaracağını kısıtlayan birçok isteğe bağlı cookie özniteliği tanımlamaktadır. Güvenlik açısından en kritik iki öznitelik şunlardır:
- Secure — Tarayıcıya cookie'yi yalnızca HTTPS bağlantıları üzerinden iletmesini bildirir; şifrelenmemiş HTTP üzerinden açığa çıkmayı önler.
- HttpOnly — İstemci tarafındaki JavaScript'in
document.cookiearacılığıyla cookie değerine erişmesini engeller; Cross-Site Scripting (XSS) yoluyla gerçekleştirilen cookie hırsızlığını azaltır.
Hassas bir cookie'de (örneğin oturum tanımlayıcısı) bu özniteliklerden biri veya her ikisi eksik olduğunda, oturum ele geçirme saldırı yüzeyi önemli ölçüde genişler. Sensagraph, taranan uygulamalarda ayarlanan cookie'lerdeki eksik Secure ve HttpOnly bayraklarını otomatik olarak tespit eder.
Nasıl çalışır?
Secure bayrağının eksikliği: Bir oturum cookie'si Secure özniteliği olmadan verilirse, tarayıcı onu hem HTTP hem de HTTPS isteklerine ekler. Yol üzerindeki bir saldırgan (örneğin açık bir Wi-Fi ağında), pasif dinleme veya SSL soyma saldırısı (HTTPS düşürme) gerçekleştirerek — kaynak sunucu yalnızca HTTPS sunuyor olsa bile — cookie'yi düz metin olarak ele geçirebilir.
HttpOnly bayrağının eksikliği: HttpOnly özniteliği olmadan, sayfa bağlamında çalışan herhangi bir JavaScript — XSS açığından enjekte edilen kötü amaçlı scriptler dahil — document.cookie kullanarak cookie değerini okuyabilir ve saldırganın kontrolündeki bir sunucuya sızdırabilir. Bu, XSS tabanlı oturum ele geçirmede standart saldırı sonrası adımdır.
Set-Cookie: sessionid=abc123; Path=/gibi birSet-Cookiebaşlığı güvensizdir — her iki bayrağı da içermemektedir.- Güvenli versiyon şöyledir:
Set-Cookie: sessionid=abc123; Path=/; Secure; HttpOnly; SameSite=Strict. SameSiteözniteliği (Lax veya Strict), Cross-Site Request Forgery (CSRF) saldırılarını azaltan tamamlayıcı bir kontroldür; ancak Secure veya HttpOnly'nin yerini almaz.- HTTP üzerinden ayarlanan cookie'ler geriye dönük olarak Secure cookie haline gelemez — bayrak, orijinal
Set-Cookieyanıt başlığında mevcut olmalıdır. - HttpOnly'dan yoksun üçüncü taraf veya analitik cookie'ler de kullanıcı izleme tanımlayıcılarını script enjeksiyon saldırılarına maruz bırakır.
İş etkisi
Güvensiz yapılandırılmış cookie'lerin istismarı, etkilenen cookie bir oturum belirteci veya kimlik doğrulama bilgisi taşıyorsa tam hesap ele geçirilmesine yol açabilir. Özel sonuçlar şunlardır:
- Oturum ele geçirme: Geçerli bir oturum cookie'si elde eden saldırgan, kimliği doğrulanmış kullanıcıyı parolasına ihtiyaç duymadan taklit edebilir.
- Ayrıcalık yükseltme: Bir yönetici oturum cookie'si ele geçirilirse saldırgan, uygulamaya en yüksek erişim düzeyini kazanır.
- Mevzuat riski: Oturum verileri, GDPR, KVKK ve benzeri düzenlemeler kapsamında genellikle kişisel veri olarak kabul edilir. Yetersiz cookie güvenliği, uygun teknik önlemlerin alınmaması anlamına gelebilir ve para cezaları ile zorunlu ihlal bildirimine yol açabilir.
- İtibar kaybı: Hesap ele geçirme olayları kullanıcı güvenini zedeler ve bulunulan yargı bölgesine göre kamuya açıklama gerektirebilir.
- PCI DSS uyumsuzluğu: Ödeme kartı verisi işleyen uygulamaların PCI DSS Gereksinim 6 kapsamında cookie güvenliği de dahil olmak üzere oturum yönetimi mekanizmalarını koruması zorunludur.
Nasıl düzeltilir?
- Tüm hassas cookie'lere Secure bayrağı ekleyin. Oturum tanımlayıcısı, kimlik doğrulama belirteci veya herhangi bir hassas değer taşıyan her cookie'nin
Secureözniteliğiyle verildiğinden emin olun. Bu, tüm uygulama genelinde HTTPS'in zorunlu kılınmasıyla (HSTS —Strict-Transport-Security) birlikte uygulanmalıdır. - Tüm oturum ve kimlik doğrulama cookie'lerine HttpOnly bayrağı ekleyin. Bir cookie değerinin istemci tarafı JavaScript tarafından okunması gerçekten gerekmedikçe (nadir ve genellikle tasarım yoluyla önlenebilir),
HttpOnlyuygulayarak script erişimini engelleyin. - SameSite özniteliği ekleyin. Siteler arası isteklerin gerekli olmadığı oturum cookie'leri için
SameSite=Strict, minimum temel olarakSameSite=Laxkullanın. Zorunlu olmadıkçaSameSite=Nonekullanmaktan kaçının (bu durumdaSecuregereklidir). - Cookie verilişini merkezi olarak denetleyin. Öznitelikleri her yanıtta ayrı ayrı ayarlamak yerine, framework düzeyinde veya middleware düzeyinde cookie yapılandırması kullanın. Çoğu framework, global oturum cookie yapılandırması sunar (örn. Django'da
SESSION_COOKIE_SECUREveSESSION_COOKIE_HTTPONLY; Express/connect oturumlarındacookie: { secure: true, httpOnly: true }). - Cookie'leri Path ve Domain ile sınırlandırın. Başka bir alt alan adının ele geçirilmesi durumunda maruziyeti sınırlamak için cookie'leri mümkün olan en dar path ve domain ile kısıtlayın.
- İçerik Güvenliği Politikası (CSP) uygulayın. Güçlü bir CSP, HttpOnly bayrağının eksikliğinden en çok yararlanan XSS riskini azaltır. Bu, derinlemesine savunma önlemidir; HttpOnly'nin yerini almaz.
- Cookie'leri uygun şekilde döndürün ve sona erdiğin. Cookie'leri açık
Max-AgeveyaExpiresdeğerleriyle verin; ayrıcalık değişikliklerinde (giriş, rol değişikliği) yeni oturum cookie'leri verin ve eskilerini sunucu tarafında geçersiz kılın. - Otomatik ve manuel incelemeyle test edin. Bayrakların tutarlı biçimde uygulandığını doğrulamak için, üçüncü taraf entegrasyonlarından ve CDN kenar katmanlarından gelen
Set-Cookiebaşlıkları dahil olmak üzere tüm HTTP yanıtlarındakiSet-Cookiebaşlıklarını inceleyin.
Referanslar
- RFC 6265 – HTTP State Management Mechanism (IETF)
- OWASP – Secure Cookie Attribute
- OWASP – HttpOnly Cookie Attribute
- OWASP Oturum Yönetimi Hile Sayfası
- CWE-614: HTTPS Oturumunda 'Secure' Özniteliği Olmayan Hassas Cookie (MITRE)
- CWE-1004: 'HttpOnly' Bayrağı Olmayan Hassas Cookie (MITRE)
- HTTP Cookies – MDN Web Docs
- Set-Cookie HTTP Başlığı – MDN Web Docs
- OWASP Top 10 A02:2021 – Kriptografik Hatalar