Red Team/ Pentest alanında uzmanlaşmak istiyorsanız sistemin çalışma mantığını da çözmelisiniz arkadaşlar. İsteğin girişinden çıkışına kadar tüm yola hakim olmalısınız.
Gerçekten nasıl çalıştığını bilmediğin sistemlerde zafiyet mi arıyorsun?

Bu yazıda şu sorulara cevap bulacaksınız arkadaşlar:
- Cache nedir?
- Cache neden var?
- Cache olmasaydı internet nasıl çalışırdı?
- Cache nerelerde bulunur?
- Browser cache nedir?
- CDN cache nedir?
- Reverse proxy cache nedir?
Pentest tarafında cevap bulunacak sorular
- Pentester neden cache öğrenmeli
- Cache güvenlik açığına nasıl dönüşür?
- Cache performans sistemi iken neden güvenlik problemi olur?
- Pentest sırasında cache katmanı neden incelenmeli?
- zafiyet uygulamada değil de cache katmanında olabilir mi?
- Cache Poisoning nedir?
- Web Cache Deception nedir?
- Cache Key Confusion nedir?
- Cache üzerinden veri sızabilir mi?
- XSS cache üzerinden yayılabilir mi?
- Session bilgileri etkilenebilir mi?
Genel itibariyla bu sorulara cevap vermeye çalışacağız.

Cache nedir?
Sen bir siteye gittiğinde bazı isteklerde bulunursun ve sunucu da tarayıcı üzerinden onu sana ulaştırır. Sen bu isteği daimi bir hale getirince tarayıcı artık o istek için her seferinde sunucuya gitmek yerine bunu tekrar kullanılmak üzere bir yerde saklar.
İşte buna cache denir.
Cache neden var?
Cache var olmasının en temel sebebi sistemi yormamaktır.
Daha hızlı sonuçlar elde edip bilminimum sürede isteğe cevap vermekir hedef.
Basit bir isteğin bile daha sunucuya gidip gelmesindense tarayıcıda cache üzerinden saklanıp hızlı cevap vermesi yavaş sonuç problemini de ortadan kaldırıyor.
Senin normal isteğin şöyle ilerler:
kullanıcı —tarayıcı — sunucu — db — sunucu — tarayıcı — kullanıcı
ama cache devereye girince işler çok hızlanıyor:
kullanıcı — tarayıcı— kullanıcı
DİKKAT eğer cache olmasaydı tüm istekler sunucuya düşerdi ve sistem ciddi manada zarara uğrardı.
Milyonlarca kullanıcısı olan bir siteyi düşünebiliyor musunuz?
Aynı anda 10bin kişinin siteye girmesi sonucu load balancerın feleği şaşar, sunucu çöker veya aşırı yavaşlar.

Cache nerelerde bulunur?
En bilindik yer browser. Sen bir siteye girdiğinde tarayıcı şunları saklar:
HTML sayfaları
css dosyaları
Js
Görseller
Fontlar
site.com/logo.png — diske kaydedilir
Sen siteye tekrar girdiğinde sunucuya gidilmez direkt bilgisayardan gelir.
DNS cache
bir sitenin IP'si eğer cache olmasaydı her site açıldığında dns tekrar sorgulanırdı. Ama cache sayesinde domain IP'si burada saklanır ve tekrar tekrar dns sorgusuna ihtiyaç olmaz.
Reverse Proxy Cache
Sunucu önünde duran katmana reverse proxy denir örneğin Nginx, varnish
istek akışı normal şartlarda şöyledir:
kullanıcı isteği — Nginx — backend
ama eğer burada Nginx cache'lendiyse istek backende gitmez
kullanıcının isteği — Nginx — İsteğin cevabı
şeklinde olur.
Application Cache
Uygulamanın kendi içindeki veri saklama yöntemidir.
Burada session verileri, kullanıcı bilgileri, API response gibi veriler tutulur.
CDN cache
kullanıcıya en yakın noktada bulunan cachedir. CDN şunu yapar:
Bu veriyi ben tutayım herkes benden alsın.
CDN her ülkede farklı ama tamamen aynı mantıkta çalışır.
Tüm siteler global çalışır. Sen bir istekte bulunduğunda CDN senin konumuna en yakın sunucudan veri çeker.
CDN cache = içeriği kullanıcıya yakın yerde tutup interneti hızlandıran sistemdir.
Hemen hemen her sistemin cache'i vardır. Her cache'in mantığıda tamamen sistem yükünü hafifletip hızlı cevaplandırma yapmaktır.
NOT:
Cache tek bir şey değildir. Sistemin her katmanında tekrar eden işi azaltmak için kullanılan bir hızlandırma tekniğidir.
Her sistemin veri saklama yöntemi farklıdır ve cache ihtiyaç duyarlar.
Yani internet dünyası cache olmadan bugün çalışamaz.

Az çok cache mantığı oturdu diye düşünüyorum. Şimdi sıra pentest için cach önemine.
Sorulara tek tek cevap verelim.
Pentesterlar için cache neden önemli?
Çok basit çünkü modern sistmelerin tamamında cache kullanılıyor. Bu da zafiyeti beraberinde getiriyor.
Browser cache
CDN cache
Reverse Proxy cache
API gateway cache gibi gibi bir çok cache türü mevcuttur.
Her sistemin mecburi cache kullanması şu sorunu da doğurmaz mı:
Aynı veri farklı kullanıcılar arasında yanlış paylaşılabilir.
Bu da doğrudan veri sızıntısı demektir. Peki bu nasıl bir güvenlik açığına dönüşebilir ona da bi bakalım.
Cache işleyişi normal şartlarda sunucuya tekrar tekrar gitme cevabı kendi içinde sakla idi
Eğer cache neyi saklayacağını doğru anlamazsa kullanıcıya ait özel bilgileri de dbden alıp farklı kullanıcılara gösterebilir.
Çünkü cache genelde şu temel anahtarlara göre çalışır:
URL
Wuery String
Bazen de bazı header'lar
Her zaman kullancıya ait özel verileri ayırt edildiği söylenemez.

Cache Poisoning nedir?
Cache Poisoning yani ön bellek zehirlenme saldırganın cache yanlış veya zararlı içerik yerleştirmesidir.
Ana mantık şu şekilde işler:
Normalde bir verinin yolu USER — CDN/PROXY — SERVER iken
cache ilk gelen isteği cache kaydeder ve sonraki kullanıcılar için aynı isteği alır.
Peki saldırgan ne yapar?
Saldırgan burada isteğin unique request olarak sanmasını sağlar yani benzersiz istek olarak gönderir.
Ve:
Zararlı JS
Redirect
Manipüle edilmiş HTML
Header İnjection
Örnek vermek gerekirse:
GET / HTTP/1.1
Host: target.com
X-Forwarded-Host: evil.comEğer cache ey bu header'ı kullanmıyorsa HTML içine
<script src="evil.com"></script>Eklenebilir.
Cache'e yazdırılır ve tüm sistem patlatılır. (Tabi sistem zayıflığı varsa)
Web Cache Deception nedir?
Bu saldırı türü biraz daha kurnaz bir yoldan gelir. Burada kurnaz hacker normal şartlarda herkese açık olan bir yola cache manipüle edilerek katmanlı bir yol daha çizdirir.
örneğin
/profile
bu yol herkeste olan kullanıcıya özel ve cache edilmemesi gereken bir yoldur.
ya da /admin gibi
Saldırgan burada şu isteği :
/profile.css
/profile.js
/profile.jpg
gibi yollar dener ve CDN bunu statik dosya sanıp cache saklar.
Neden öyle sanıyor?
Çünkü jpg — js— css özel değildir ve tekrar tekrar göstermek için cache saklanırdı.

Sonuç itibariyle başka kullanıcıların profili, dashboard verisi hatta bazen token içeren HTML bilgisi dahi cuplanabiliyor.
Bu zafiyet neden ortaya çıkar peki?
Yanlış CDN config
Cache key hataları
extension-based routing kullanan sistemlerde çok görülür.
Cache Key Confusion nedir?
Bu, cache sistemlerinin en kritik zayıflıklarından biridir.
Cache sistemleri bir isteği UNİQUE( benzersiz) yapmak için bir cache key oluşturur.
Genelde:
URL
Query string
Host
Bazı header'lar
Eğer backend ve cache sistemi farklı şeyleri key'e dahil ediyorsa, çakışma olur.
Diyelim ki cache key:
/page?lang=en
ama backend ayrıca şunları kullanırsa:
User-Agent Cookie Authorization
eğer cache bunları hesaba katmazsa Auth bypass ve veri sızıntısı kaçınılmaz olur.
XSS cache üzerinden yayılabilir mi?
Evet yayılabilir ve bu olası en tehlikeli yolllardan biridir.
Hacker sayfaya bir payload enjekte eder:
<script>stealCookies()</script>
eğer bu istek cache'e girerse her kullanıcı XSS'i çalıştırır ve stored XSS gibi davranır ama cache üzerinden yayılır.
DİKKAT
Bazı sistemlerde:
- CDN HTML cache eder
- Güvenlik header'ları yoktur
- Response dynamic sanılır
Bu durumda:
Cache sayesinde reflected XSS stored XSS'e dönüşür ve bu, CDN-based saldırılarda en kritik senaryolardan biridir.
Velhasılı:
Konuyu baştan sona şu cümleyle özetlemek ve konunun ana mantığını vurgulamak istiyorum:
Cache zafiyetleri sizin tek isteğinize bağlı olarak ortaya çıkan zafiyetler değildir sistem tasarım hatasını yakalamaktır.
KONUYLA ALAKALI ÇÖZÜLECEK LAB'LAR
Bu lablar sonunda konuyu tamamen oturtmanız gerekiyor

Buraya kadar okuduysan tebrik ederim. Umarım faydalı olmuştur. Bir sonraki yazılarda görüşmek üzere .
Değinmemi istediğiniz başka konu var mı?
ZEKİ KAYAALP