Üç Yıl, Üç Karar, Bir İhlal: Bir API Zafiyetinin Sessiz Hikayesi
2024'te kapatılan bir zafiyet, 2026'da bir kurumun 3.000 kurumsal müşterisinin verisinin sızmasına yol açtı. Aradaki üç yılda alınan üç ayrı karar, sonucu tek tek şekillendirdi.
Siber güvenlikte en yıkıcı olaylar genellikle ani bir saldırının değil, üst üste binmiş küçük kararların ürünüdür. Bu yazıda, bir müşterimizin başına gelen ve sonunda KVKK ihlal bildirimi ile sonuçlanan bir vakayı, müşteri kimliğine hiçbir referans vermeden anlatıyoruz. Amacımız tek bir olayı teşhir etmek değil, aynı kararları farklı kurumlarda defalarca gördüğümüz için tekrar etmemesine katkıda bulunmak.
2024: Bulgu Keşfedildi
Müşterimiz, Türkiye'de yaklaşık 3.000 kurumsal müşteriye hizmet veren bir kuruluştu. 2024 yılında gerçekleştirdiğimiz yıllık penetrasyon testinde, API katmanında kritik seviyede bir IDOR (Insecure Direct Object Reference) zafiyeti tespit ettik.
Zafiyet, kimliği doğrulanmış bir kullanıcının URL'deki kaynak tanımlayıcısını manipüle ederek başka bir müşterinin verisine erişebilmesine olanak tanıyordu. Pratikte bu, tek bir geçerli oturumla 3.000 müşterinin tamamının verisine ulaşılabilmesi anlamına geliyordu.
Bulguyu kritik olarak işaretledik, raporladık ve teknik ekiple birlikte düzeltme yöntemini netleştirdik. Müşteri kısa süre içinde düzeltmeyi yaptı. Retest sırasında bulgunun başarıyla kapatıldığını doğruladık.
Buraya kadar her şey doğru ilerlemişti.
2024 Sonu: Sessiz Geri Açılma
Pentest raporunun teslim edilmesinin ardından geçen aylarda, müşterinin geliştirme ekibi API üzerinde çeşitli değişiklikler yaptı. Yeni özellikler, refactor çalışmaları, performans iyileştirmeleri. Bu döngülerin birinde, daha önce kapatılan yetki kontrolü mantığı bir deploy ile geri açıldı.
Bunu kimse fark etmedi. Geliştiriciler fark etmedi çünkü değişiklik fonksiyonel olarak hiçbir şeyi bozmuyordu — kod çalışıyordu, testler geçiyordu, kullanıcılar şikayet etmiyordu. Güvenlik ekibi fark etmedi çünkü kapatılan bir bulgunun kapalı kalıp kalmadığını ölçen bir mekanizma yoktu.
Bu, sahada en sık karşılaştığımız durumlardan biridir. Bir pentest raporu, tarihinin atıldığı anın fotoğrafıdır. O an kapatılan bir zafiyet, sonraki deploy döngülerinde sessizce geri açılabilir. Geri açılma anını yakalamayan bir kurum için, o bulgu artık raporda "kapalı" olarak görünmeye devam eder.
2025: Atlanan Yıl
2025 yılında müşterimiz bütçe planlaması sırasında yıllık pentestini ertelemeye karar verdi. Tek başına bakıldığında bu, savunulabilir bir karar gibi durur: bir önceki yıl pentest yapılmıştı, kritik bulgular kapatılmıştı, ortamda büyük bir değişiklik olmadığı varsayılıyordu.
Sorun şu ki, "ortamda büyük bir değişiklik olmadığı" varsayımı geliştirme ekibinin ne yaptığını ölçmüyordu. O sene API üzerinde onlarca commit, birkaç major release ve birden fazla mimari değişiklik yaşanmıştı. 2024'te kapatılan ve sessizce geri açılan zafiyet, 2025 boyunca üretimde çalışıyordu.
Bir pentest atlandığında atlanan şey bir denetim değil, bir görme fırsatıdır.
2026: Kapsam Daralması
2026 yılında müşterimiz pentesti yeniden gündeme aldı. Ancak bu sefer bütçe kısıtı nedeniyle kapsamın daraltılmasına karar verdi. Daraltma sırasında API katmanı kapsam dışına çıkarıldı.
Karar verilirken kullanılan mantık, sahada sık duyduğumuz türdendi: "API'yi geçen sefer test ettiniz, kritik bulgu çıkmıştı, kapatıldı. Şimdi web tarafına yoğunlaşalım."
Bu mantık iki ayrı varsayıma dayanıyor:
- Geçen seferki bulgunun kapalı kaldığı,
- O tarihten bu yana API'de yeni bir zafiyet ortaya çıkmadığı.
Her iki varsayım da test edilmemişti. Test edilmeyen varsayımlar, güvenlik kararlarının dayandırılabileceği bir zemin oluşturmaz.
2026: İhlal
Pentest çalışmalarımız devam ederken — biz web katmanında testlerimizi yürütürken — bizden bağımsız bir saldırgan API katmanını taradı, 2024'ten beri açık olan IDOR'u keşfetti ve sistematik olarak sömürdü.
Saldırgan, geçerli bir hesapla giriş yaptıktan sonra kaynak tanımlayıcılarını iterate ederek müşteri veritabanının tamamını çekti. 3.000 kurumsal müşterinin verisi dışarı sızdı.
İhlal Cumartesi günü tespit edildi. Müşteri aynı gün bize ulaştı. Cumartesi günü olay müdahale ekibimiz devreye girdi: log analizi, etki kapsamının belirlenmesi, IoC çıkarımı. Pazar günü WAF logları üzerinde detaylı bir endpoint inceleme çalışması yürüttük; saldırganın kullandığı vektörün 2024'te tespit ettiğimiz IDOR ile aynı endpoint, aynı pattern olduğunu doğruladık. Bu, varsayım değil, log korelasyonu ile teyit edilmiş bir bulgudur. Pazartesi günü WAF üzerinden ilgili endpoint'i ve davranış paternini bloklayarak saldırı yüzeyini kapattık.
Müdahale 48 saatte tamamlandı. Ancak veri zaten dışarıdaydı.
Müşteri, KVKK kapsamında ihlal bildirimini gerçekleştirdi. Bildirim kamuya yansıdı.
Üç Kararın Birleşik Etkisi
Bu olayda tek bir hata yoktur. Üç ayrı karar, ayrı ayrı bakıldığında savunulabilir görünen üç karar, üst üste bindiğinde bir ihlali kaçınılmaz kıldı:
Birinci karar: Kapatılan bir bulgunun kapalı kalıp kalmadığını doğrulayan bir mekanizma kurulmaması. Bu, bir karar değil, bir karar eksikliği olarak başladı; ama sonuç aynıydı.
İkinci karar: Bir yıllık pentest döngüsünün atlanması. Bütçe açısından tasarruflu, risk açısından kör.
Üçüncü karar: Pentest kapsamından, geçmişte kritik bulgu çıkmış bir bileşenin çıkarılması. "Daha önce baktık" mantığı, zaman içinde değişen bir sisteme uygulandığında geçerliliğini yitirir.
Bu kararların her biri ayrı ayrı bir kurumun her gün verdiği türden kararlardır. Bir araya gelmediklerinde fark edilmezler. Bir araya geldiklerinde de, geldikleri an fark edilmezler — fark edildikleri an, ihlalin tespit edildiği andır.
Üç Soru
Bu vakadan çıkardığımız ders teknik değil, operasyoneldir. Her kurum kendi süreçleri için üç soruyu yanıtlayabilmelidir:
1. Kapatılan bir bulgunun bir sonraki deploy'da geri açıldığını nasıl anlarsınız? Eğer cevap "bir sonraki pentestte" ise, cevap yetersizdir. Regresyon, pentest sıklığından çok daha hızlı çalışır.
2. Pentest döngüsünü ertelediğinizde, ertelediğiniz süre içinde sisteminizde ne kadar değişiklik biriktiğini ölçüyor musunuz? Değişiklik hacmi, bir sonraki testin gerçek kapsamını belirler. Ölçülmediğinde, kararın dayandığı zemin de yoktur.
3. Pentest kapsamından bir bileşeni çıkardığınızda, o bileşenin saldırgan açısından da kapsam dışı olduğunu varsayıyor musunuz? Saldırgan, sizin satın alma kararınızı görmez. Onun için kapsam, sizin yayında olan tüm yüzeyinizdir.
Kapanış
Bu vakanın anlatılmaya değer yanı dramatik olması değil, sıradanlığıdır. Üç karar da birçok kurumda her yıl alınıyor. Üç kararın da ayrı ayrı bir savunması var. Ve sonuçları, her bir araya gelişlerinde aynı olmak zorunda değil — ama bir gün, bir araya geldiklerinde, sonuç tam olarak budur.
Pentest bir teslimat değil, bir döngünün adımıdır. O döngünün diğer adımları — bulgu takibi, regresyon kontrolü, kapsam disiplini — eksik olduğunda, teslim edilen rapor giderek geçmişte kalan bir fotoğrafa dönüşür. Saldırgan ise her zaman bugüne bakar.
Netlore Teknik Ekibi tarafından kaleme alındı
Mayıs 2026