Web ve mobil uygulamalarda oturum yönetimi uygulamanın güvenliği açısından çok önemlidir.Oturum yönetimi iki ayrı parçadan oluşur. Kimlik doğrulama ve yetkilendirme. Oturum yönetimi işlemi doğru yapılmazsa web uygulması veya mobil uygulama birçok zafiyete maruz kalabilir. Bunlardan birisi de IDOR’dur.

Herhangi bir web uygulama ve mobil uygulama çeşitli fonksiyonlarını yerine getirebilmek için çeşitli değişkenler kullanırlar. (örneğin id , pid ve uid gibi) Bu değişkenleri kullanmakta sakınca yoktur. Asıl sorun olan bu değişkenlerin user tarafından manipüle edilebilir olması ve bu değişkenlerin uygulama içerisindeki obje(object)’lere direkt olarak erişebilmesidir. Bu değişkenler her ne kadar HTTP parametreleri olarak görülsede request header larındada bulunabilirler(ör : cookie). Eğer backend tarafında bu değişkenlerin yönetimi düzgün yapılmamışsa saldırgan web uygulamasını kullanan başka bir kullanıcının objelerine erişim ve hatta değiştirme hakkına sahip olabilir. İşte burda oluşan zafiyetin adı IDOR ‘dur (Insecure Direct Object Reference).

alt (owasp dökümanı ekran görüntüsü)

Şimdi lab ortamında bu zafiyete uygulamalı olarak bakalım:

alt

Karşımızda şu şekilde bir uygulama olsun. Diyelim ki bu uygulama üzerinden konser bileti satın alıyoruz ve 4 kişilik bir arkadaş grubu olarak konsere gideceğiz ve 1 biletin fiyatı 15 euro olarak belirlenmiş. Yani toplamda 4 adet bilet alıp 60 euro para ödememiz gerekiyor.

Burada bilet değişkeni kullanıcı tarafından manipüle edilebilir halde bulunmakta. Başka bir değişkene müdahale edebiliyormuyuz bunu görmek için burp proxy ile isteği(request) inceliyoruz.

alt

Görülüyor ki biletlerin fiyatı da kullanıcı tarafından manipüle edilebilir halde, oysa ürünlerin fiyatları sunucu tarafından kontrol edilip belirlenmeliydi ve kullanıcı tarafından hiçbir şekilde değiştirilemez olmalıydı.

İstek(Request): alt Cevap(Response): alt

Bu şekilde 4 bileti para vermeden alabiliriz.

Şimdi başka bir örneğe bakalım.

alt

Bu web uygulamasında her kullanıcıya özel bir gizli mesaj bulunmakta. fakat burp ile araya girdiğimizde görüyoruz ki hangi gizli mesajın getirileceğinin kontrolü yine client tarafında, kullanıcı adına göre yapılmakta. istek kısmına başka bir kullanıcının adını girdiğimiz zaman o kullanıcıya özel gizli mesajı değiştirebiliyoruz.

İstek(Request): alt Cevap(Response): alt