Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

IDOR açığı nedir?​


IDOR (Insecure Direct Object Reference), istemcinin değiştirebildiği bir nesne tanımlayıcısı üzerinden yetkisi dışındaki veriye veya işleve erişebilmesidir. Örneğin bir uygulama siparişleri /orders/1001 gibi bir adresle gösteriyor ve kullanıcı 1001 yerine 1002 yazarak başka müşterinin siparişini görebiliyorsa bu bir IDOR açığıdır. Sorun, numaranın tahmin edilebilir olması değil, sunucunun nesnenin gerçekten isteği yapan kullanıcıya ait olduğunu denetlememesidir.

Nasıl çalışır?​


Uygulama istemciden bir nesne kimliği alır. Güvenli tasarımda sunucu bu kimliği yalnızca biçimsel olarak doğrulamaz; oturumdaki kullanıcının ilgili nesne üzerinde gereken yetkiye sahip olup olmadığını da kontrol eder. IDOR bulunan tasarımda ise sunucu çoğunlukla şu mantık hatasına düşer:

Kod:
nesne = VeritabanındanBul(istektenGelenId)
nesneyiGöster(nesne)

Yalnızca sahibine özel bir nesne için aşağıdaki sözde kod, sorguyu yetkili kapsam içinde çalıştırmayı gösterir; gerçek bir programlama dilinde çalıştırılacak kod değildir:

Kod:
nesne = VeritabanındanBul(
    id = istektenGelenId,
    sahip = oturumdakiKullanici
)
Eğer nesne yoksa 404 veya uygun bir yetki yanıtı döndür

Kontrol; görüntüleme, güncelleme, silme, indirme, ödeme, davet ve yönetim işlemlerinin her birinde ayrı ayrı yapılmalıdır. Bir kullanıcının nesneyi görebilmesi, onu değiştirebileceği veya silebileceği anlamına gelmez.

Somut örnek​


Varsayımsal bir e-ticaret uygulamasında Ali’nin sipariş kimliği 1001, Ayşe’nin sipariş kimliği 1002 olsun. Ali oturum açtıktan sonra kendi siparişini görüntülemek için şu isteği gönderir:

Kod:
GET /orders/1001

Ali aynı oturumla kimliği 1002 olarak değiştirip Ayşe’nin sipariş ayrıntılarını alabiliyorsa okuma IDOR’u vardır. Şu istek de benzer biçimde risklidir:

Kod:
DELETE /api/invoices/1002

Sunucu silme işleminden önce faturanın Ali’ye ait olduğunu kontrol etmiyorsa bu kez yalnızca veri ifşası değil, yetkisiz işlem açığı oluşur. Kimlikleri UUID gibi tahmin edilmesi zor değerlere çevirmek saldırıyı güçleştirebilir; ancak tek başına yetkilendirme kontrolünün yerini tutmaz.

Düzeltme yaklaşımını seçin​


YaklaşımNe sağlar?Sınırlaması
Sahiplik veya ilişki filtresiNesneyi yetkili kapsam içinde ararHer nesne türü için doğru kural yazılmalıdır
Rol ve izin kontrolüYönetim ve özel işlemleri sınırlarTek başına nesne sahipliğini kanıtlamaz
Tahmin edilmesi zor kimlikKimliklerin sırayla denenmesini zorlaştırırYetkisiz erişimi engellemez
Merkezi yetkilendirme katmanıKontrollerin tutarlı uygulanmasına yardım ederYanlış yapılandırma tüm uç noktaları etkileyebilir

Kendi uygulamanızda güvenli doğrulama​


Testi yalnızca sahip olduğunuz veya açıkça izin verilen uygulamalarda, tercihen izole bir test hesabı ve test verisiyle yapın. İki farklı kullanıcı hesabı oluşturmak, sahiplik kontrolünü gerçekten doğrulamanın en anlaşılır yoludur.

  1. Kullanıcı A ile oturum açın ve A’ya ait bir nesnenin kimliğini belirleyin. Görüntüleme, düzenleme, silme ve indirme gibi ilgili uç noktaları not edin.
  2. Kullanıcı B ile aynı türden ayrı bir test nesnesi oluşturun ve kimliğini kaydedin.
  3. Kullanıcı A’nın oturum bilgilerini koruyarak yalnızca nesne kimliğini B’nin kimliğiyle değiştirin. Bunu hem adres yolu hem de istek gövdesi veya sorgu parametresi içinde kullanılan kimlikler için deneyin.
  4. Her işlemde beklenen sonucu kontrol edin. A’nın B’ye ait veriyi okuyamaması ve B’nin nesnesini değiştirememesi veya silememesi gerekir.
  5. Yetkisiz istek sunucu tarafında reddediliyorsa sunucu günlüklerinde reddedilme nedenini ve nesne sahibinin doğru hesaplandığını doğrulayın. Yetkisiz yanıt başarılı veri veya işlem sonucu döndürüyorsa açığı düzeltin ve aynı testi tekrarlayın.

Sonuç yalnızca arayüzde gizleme veya düğmeyi devre dışı bırakma ile değerlendirilmemelidir. Tarayıcı geliştirici araçlarıyla gönderilebilen bir istek, doğrudan istemci dışından da gönderilebilir; kararın sunucuda verilmesi gerekir.

Düzeltme seçenekleri ve karar ölçütü​


Bu sahiplik örneğini her sisteme aynen uygulamayın. Paylaşılan veya kuruluşa ait nesnelerde sahiplikten başka üyelik, paylaşım ve işlem izinleri gerekebilir. Her nesne türü için erişim kuralını açıkça belirleyin. Bazı nesneler kullanıcıya, bazıları kuruluşa, role veya belirli bir ilişkiye bağlı olabilir. Liste uç noktalarında da aynı filtreyi uygulayın; yalnızca ayrıntı uç noktasını korumak yeterli değildir.

En sağlam temel, nesneyi kimliğe göre bulurken yetkili kapsamı sorguya dahil etmek ve hassas işlemler için ayrıca işlem izni kontrolü yapmaktır. Ayrıca hata yanıtlarının başka kullanıcıların nesnelerinin varlığını gereksiz yere açığa çıkarmamasına dikkat edin.

Sık yapılan hatalar​


Yalnızca istemciyi kontrol etmek: Formdaki kimliği gizlemek, düğmeyi kaldırmak veya JavaScript ile engellemek koruma değildir. İstek sunucuya ulaştığında yetki yeniden hesaplanmalıdır.

Kimliği değiştirmeyi güvenlik sanmak: Sıralı sayı yerine UUID kullanmak tahmini zorlaştırır; fakat ele geçirilmiş veya paylaşılmış bir kimlik yine yetki kontrolü olmadan kullanılabilir.

Sadece GET isteklerini test etmek: IDOR; POST, PUT, PATCH, DELETE, dosya indirme ve rapor dışa aktarma işlemlerinde de bulunabilir. Her işlem için hem okuma hem değişiklik yetkisini test edin.

Yönetici rolünü normal kullanıcı gibi değerlendirmek: Yönetici hesapları geniş yetkiye sahip olabilir; test matrisi normal kullanıcı, aynı kuruluşun başka kullanıcısı ve farklı kuruluş kullanıcısını ayrı ele almalıdır.

Sık sorulan sorular​


IDOR yalnızca mevcut bir kaydı okumada mı oluşur?​

Hayır. Yeni kayıt oluştururken gönderilen proje, hesap veya üstnesne kimliği de sunucuda yetkilendirilmelidir. Saldırganın başka kuruluşa ait bir kimliği ilişki alanına yazabilmesi, yalnız oluşturma işlemi olduğu için güvenli sayılmaz. Bu senaryoyu da izinli test verisiyle denetleyin.

Paylaşılan bir belgede yalnız sahiplik kontrolü yeterli midir?​

Her zaman değil. Belge sahibi dışında açıkça izin verilmiş kullanıcıların da erişmesi gerekebilir. Okuma, düzenleme ve paylaşma izinlerini ayrı tanımlayın; yalnız sahip değil diye meşru erişimi engellemeyin, yalnız kimliği biliyor diye erişim de vermeyin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic