← Tüm Yazılar
Senaryo,IDOR,Yetkilendirme,Yüksek Risk

URL'deki Tek Rakamı Değiştirdik, Başkasının Faturası Açıldı — IDOR Senaryosu

2026-07-14 · REDCELL AR-GE

Bazı açıklar gürültülüdür; ekrana hata basar, alarm çaldırır. IDOR ise sessizdir. Hiçbir şey kırılmaz, hiçbir uyarı çıkmaz — sadece görmemeniz gereken veriyi görürsünüz. İşte anonimleştirilmiş bir senaryo.

Sahne: Sıradan Bir Fatura Sayfası

Giriş yaptıktan sonra kendi faturamızı görüntüledik. Adres çubuğunda şu vardı:

https://uygulama.ornek/fatura?id=1043

Akla ilk gelen soru güvenlikçinin refleksidir: "Ya 1044 yazarsam?"

https://uygulama.ornek/fatura?id=1044

Sayfa açıldı. Karşımızda bize ait olmayan bir müşterinin faturası vardı: adı, adresi, aldığı hizmet, tutarı. Sistem "bu kaydın sahibi sen misin?" diye hiç sormadı.

Adı: IDOR (Insecure Direct Object Reference)

Uygulama, kaydı doğrudan ID ile çekiyor ama o kaydın isteği yapan kullanıcıya ait olup olmadığını kontrol etmiyor. Kimlik doğrulama (giriş) var; yetkilendirme (bu veriye erişebilir misin?) yok. OWASP bunu "Broken Access Control" başlığı altında yıllardır listenin 1 numarasında tutuyor.

Ölçek: Otomatik Toplama

Bir saldırgan tek tek denemez; ID'leri sırayla gezen basit bir betik yazar (yalnızca yetkili testte gösterim amaçlı):

for id in $(seq 1000 2000); do
  curl -s -b "oturum=$COOKIE"     "https://uygulama.ornek/fatura?id=$id"     -o "fatura_$id.html"
done

Birkaç dakika içinde binlerce faturaya ait kişisel veri diske iner. "Sızma" gibi görünmez — sunucuya göre bu, geçerli oturumla yapılan geçerli isteklerdir. Tehlikesi de buradadır.

Etki

Çözüm: Her İstekte "Sahiplik" Sorusu

Kural nettir: kaydı ID ile değil, ID + kullanıcı kimliğiyle çekin.

# YANLIŞ — sadece ID ile, sahip kontrolü yok
fatura = db.get("SELECT * FROM faturalar WHERE id = %s", id)

# DOĞRU — kayıt yalnızca isteği yapan kullanıcınınsa döner
fatura = db.get(
    "SELECT * FROM faturalar WHERE id = %s AND musteri_id = %s",
    (id, oturum.kullanici_id))
if not fatura:
    return hata(403)  # senin değilse: erişim yok

Tahmin edilmesi zor kimlikler (ardışık 1,2,3 yerine UUID) yardımcı olur ama tek başına yeterli değildir — asıl koruma sunucu tarafındaki yetki kontrolüdür.

Etik ve yasal not: Bir sistemde "acaba başkasının verisi geliyor mu?" diye ID değiştirmek bile — yetkiniz yoksa — izinsiz erişimdir ve suçtur. Bu testler yalnızca sözleşmeli, yetkili kapsamda yapılır.

Sonuç

IDOR, en çok "çalışıyor, o zaman güvenli" yanılgısından doğar. Uygulamanız ID'lerle veri çekiyorsa, her erişim noktasında "bu kayıt gerçekten bu kullanıcının mı?" sorusu kod içinde sorulmalıdır. REDCELL testleri bu sessiz açığı sistematik olarak avlar.

Sisteminizin güvenliğinden emin misiniz?

Ücretsiz Ön Değerlendirme →