IDOR (Insecure Direct Object References) Zafiyeti Nedir ve Nasıl Önlenir?
Selamlar ben Nisa bugün sizlerle IDOR zafiyetini öğreneceğiz ve IDOR zafiyeti ile ilgili Lablar’lar çözeceğiz
IDOR Zafiyeti Nedir?
Insecure Direct Object Reference (IDOR), saldırganların bir web uygulamasında URL’ler veya parametrelerde kullanılan tanımlayıcıları (identifier) manipüle ederek nesnelere yetkisiz şekilde erişebilmesi veya bu nesneleri değiştirebilmesi sonucu ortaya çıkan bir güvenlik açığıdır. Bu zafiyet, uygulamanın belirli verilere erişim için gerekli yetki kontrollerini düzgün şekilde yapmamasından kaynaklanır.
Size IDOR ile ilgili birkaç örnek göstermek isterim.
URL Parametresi ile Başka Kullanıcının Profiline Erişim
Kullanıcı Girişi:
GET /profile?user_id=123
Saldırganın yaptığı değişiklik:
GET /profile?user_id=124
Sonuç:
Uygulama yetki kontrolü yapmadığı durumda saldırgan diğer kullanıcıların profillerini görüntüleyebilir.
API Üzerinden Yetkisiz Veri Okuma
API İsteği:
GET /api/orders/456
Saldırganın Yaptığı Değişiklik:
GET /api/orders/457
Sonuç:
Saldırgan başkasına ait verileri görebilir.
POST Body Üzerinden Profil Güncelleme (Gizli Alan
Manipülasyonu)
Lab çözerken Burp Suite Community uygulamasını kullanacağız.
Burp Suite Community uygulamasından Proxy → HTTP History geliyoruz ve hedef üstünde yaptığımız tüm işlemlerin arşivleri burada gözüküyor.
Hedefimize bağlandıktan sonra ilk olarak Live Chat kısmına geliyoruz ve rastgele bir mesaj yazıp sisteme yolluyoruz sonrasında ise View transcript diyoruz.
Bu Lab diğer lablardan biraz farklı bu labda Burp Suit kullanmayacağız. Şimdi ise hedef sisteme gidiyoruz.
Bizi böyle bir sayfa karşılıyor ve burda CTRL+U yaparak sayfa kaynak kodlarına bakıcaz.
Kaynak kodlarında ise bizi bazı hashler karşılıyor. Bu hashleri CrackStation kullanarak hangi Encoding olduğuna bakacağız.
Burada type kısmına bakacağız bize md5 olarak vermiş. Sonraki adımımız ise CyberChef‘den 0 md5 çevrildiğinde çıkan hash’i kullanacağız.
Burada sıfır kullanmamızın nedeni ise web/app tarafında diziler (array’ler) 1’den değil 0’dan başlar.
Burada cfcd208495d565ef66e7dff9f98764da çıktısını alıyoruz. Bu çıktıyı kopyalıyoruz.
Sitenin URL’sine http://10.48.179.189/cfcd208495d565ef66e7dff9f98764da yapıştıryoruz bu URL bize flag’i verecektir.
Başarılı bir şekilde flag’e ulaştık sadece bunu kontrol etmek kaldı ve hemen lab’ın sayfasına gidip deniyoruz.
Ve Lab başarılı bir şekilde sonuçlandı.
IDOR Zafiyeti Nasıl Önlenir
IDOR zafiyetini önlemek için, kullanıcıların erişmeye çalıştığı her nesne için yetki kontrolü uygulanmalıdır. Çoğu web framework’ü bu kontrolleri kolaylaştıran mekanizmalar sunar. Ayrıca karmaşık tanımlayıcılar, ek bir güvenlik katmanı (defense-in-depth) olarak kullanılabilir; ancak unutulmamalıdır ki, asıl kritik olan erişim kontrolüdür.
Tanımlayıcıları URL’de veya POST gövdelerinde açık bir şekilde göstermemeye çalışın. Tanımlayıcılar yerine session (oturum) kullanarak o an kimliği doğrulanmamış kullanıcıyı belirleyin.
Artan sayısal tanımlayıcalar yerine (enumerable) daha karışık ve rastgele tanımlayıcalar kullanılmalı. Ek olarak UUID veya benzeri uzun ve rastgele değerler birincil anahtar olarak tercih edilebilir. Tanımlayıcıları şifrelemekten kaçınılmalıdır, çünkü bunu güvenli bir şekilde yapmak oldukça zordur.
.
IDOR(Insecure Direct Object References) Özet Bilgi
Insecure Direct Object Reference (IDOR), bir web uygulamasının nesnelere erişim sırasında yeterli yetkilendirme (authorization) kontrollerini uygulamaması sonucunda ortaya çıkan kritik bir erişim kontrolü zafiyetidir. Bu zafiyet, genellikle URL parametreleri, form verileri veya API isteklerinde kullanılan doğrudan nesne tanımlayıcılarının (örneğin kullanıcı ID’si, dosya ID’si, sipariş numarası) manipüle edilebilmesiyle istismar edilir.
IDOR zafiyetine sahip uygulamalarda, kimliği doğrulanmış bir kullanıcı, kendisine ait olmayan kaynaklara erişebilir, bu kaynakları görüntüleyebilir, değiştirebilir veya silebilir. Bu durum; kişisel verilerin ifşası, yetkisiz işlem gerçekleştirme ve hesap ele geçirme gibi ciddi güvenlik ihlallerine yol açabilir.
Bu zafiyetin önlenmesi için, nesneye erişim yapılan her istekte sunucu taraflı yetkilendirme kontrollerinin zorunlu olarak uygulanması gerekmektedir. Uygulama, yalnızca kullanıcının kimliğini doğrulamakla yetinmemeli, aynı zamanda ilgili kaynağa erişim yetkisine sahip olup olmadığını da doğrulamalıdır. Ek olarak, tahmin edilebilir ardışık tanımlayıcılar yerine rastgeleleştirilmiş veya UUID tabanlı tanımlayıcıların kullanılması, savunmayı güçlendiren tamamlayıcı bir önlem olarak değerlendirilebilir. Ancak bu yaklaşım, hiçbir zaman erişim kontrolünün yerine geçmemelidir.