Insecure Direct Object Reference (IDOR) Zafiyeti – Güvensiz Doğrudan Nesne Referansı | Web Uygulama Güvenliği
Insecure Direct Object Reference Nedir?
IDOR (Insecure Direct Object Reference) bir web uygulama güvenliği zafiyetidir. Türkçeye Güvensiz Doğrudan Nesne Referansı olarak çevirilen IDOR, web uygulamarında access control (giriş kontrol) aşamasında ortaya çıkan bir açıktır. IDOR, access control işlemi yapılırken, yetersiz denetleme işleminden dolayı saldırganın gönderdiği isteği manipüle ederek; normalde beklenen nesne referansı yerine farklı bir nesne referansı tarafından istek yapılıyormuş algısı yaratmasıyla oluşturulur.
Daha net olmak gerekirse, normal bir kullanıcının admin kullanıcısının yetkilerini kullanabilmesi işlemidir. Örneğin, güvenliğin aşırı düşük olduğu bir web sitesinde olduğunuzu var sayalım. Yaptığınız istek sonucunda siz normal bir kullanıcı olduğunuz için URL adresi aşağıdaki gibi olsun:
https://www.websitesi.com/yapilanislem?kullanici_tipi=user
Yukarıdaki URL adresinin denetlenmeden direk back-end’de işlemi alındığını var sayalım, eğer saldırgan “user” bölümünü “admin” olarak değiştirirse yaptığı işlemi adminin yetkileri ile yapmış olacak ve IDOR zafiyetini sömürmüş olacak:
https://www.websitesi.com/yapilanislem?kullanici_tipi=admin
Zafiyetin tanımını ve kısaca kullanımını bu şekilde açıklayabilirim.
Insecure Direct Object Reference (IDOR) Zafiyetinin Sömürülmesi
PortSwigger’in web academy lab ortamından yararlanarak IDOR zafiyetini sömüreceğim. Buradaki linkten lab’a erişim sağlayabilirsiniz. Eğer bir hesabınız yok ise hesap açmanız gerekmektedir, merak etmeyin ücretsiz. LAB’ı başlattıktan sonra bizi aşağıdaki gibi bir sayfa karşılıyor.
Biraz sayfayı kurcaladıktan sonra sağ üst köşede yer alan “Live Chat” linki dikkatimi çekiyor ve ona tıklıyorum.
Canlı sohbet üzerinde deneme diye bir yazı yazıp gönderdim ve daha sonra “View transcript” butonuna tıkladım. Bana bir txt dosyası indirdi.
Yukarıdaki resimde de göreceğiniz üzere dosya adı “2.txt”. İndirmek için “View transcript” butonuna tekrar tıkladığımda bu sefer “3.txt” dosyasını indirdiğini gördüm. İçerik ise aynı, aşağıdaki gibi:
Buradan, eğer web sitesinde IDOR açığı var ise ve arka planda 1.txt adında bir dosya var ise ona erişim sağlayabilirim sonucunu çıkartıyorum. Peki nasıl? Bunun için sağ tık yapıp “Öğeyi Denetle” diyor ve geliştirici araçlarından “Network” bölümüne geliyorum:
Network bölümüde, web sayfasına yaptığımız istekleri ve istek türünü görebiliyoruz (POST-GET). “View transcript” butonunu tekrar kullandığımda aşağıdaki istek network bölümüde düşüyor.
İsteğe tıklayıp, aşağıda açılan ve sarı ile işaretlediğim URL adresine dikkat edin. O adres, bizim txt dosyasını indirmemizi sağlayan istek. Şimdi gelin onu manipüle edip sayfaya biz gönderelim:
URL adresini kopyalayıp, benim ulaşmak istediğim 1.txt dosyasını verecek şekilde düzenledim ve adres çubuğuna yazdım. Enter’a basıp isteği gönderdiğimde ise 1.txt dosyasını indirdim. 1.txt dosyasının içeriği ise şu şekilde:
Kırmızı ile altığını çizdiğim bölüm, PortSwiggerin bizden bulmamızı istediği “carlos” kullanıcısının şifresi (Acces the lab bölümüde kullanıcı adını bize veriyor). Zafiyeti sömürerek şifreyi ele geçirdik. Gelin giriş yapıp labı sonlandıralım:
Elde ettiğimiz bilgileri kullanarak giriş yapıp labı bitiriyoruz…
IDOR Zafiyetinin Sömürülmesi (Video)
Insecure Direct Object (IDOR) Zafiyetinin Kapatılması
Zafiyetin ne olduğunu ve nasıl sömürüldüğümü anlattım, peki bu açığı nasıl kapatırız? Insecure Direct Object Reference (Güvensiz Doğrudan Nesne Referansı) açığını kapatabilmek için atabileceğimiz birkaç adım var, bunlar arasında en önemlisi ve açığın temel kaynaklandığı nokta access control aşaması; yani yetkilendirme bölümü.
Access Control – Yetkilendirme, Yetki Kontrolü
Güvenliemeyen bir kaynaktan yapılan nesne referansı isteğinde, web uygulaması yetki kontrolü sağlamalı ve kullanıcıyı doğrulamalıdır. Bunu role dayalı yetkilendirme yöntemi kullanarak sağlayabilir, kullanıcılar için farklı roller atanırsa web uygulaması bu rollerin kontrolünü sağlayarak istekte bulunan kullanıcıyı doğrulayıp ona göre yetkilendirebilir.
Indirect Reference Map – Dolaylı Referans Haritası
Indirect reference map yani dolaylı referans haritası, uygulama içerisindeki referansın bir ID değeri yerine konulması ile sağlanır. Dolaylı referans haritalaması yöntemi, veri tabanı anahtarları ve dosya isimleri gibi çeşitli nesneleri haritalamak için kullanılır. Doğrudan referanslar, artan user ID’si şekline oluşturulmuş referanslardır. Bu yüzden tahmin etmesi kolaydır. Dolaylı referans haritasının arkasındaki fikir ise URL adresinindeki yada formlardaki hassas doğrudan dahili referansların, tahmin edilmesi zor ya da giriş yapan kullanıcıya özgü bir değerle değiştirilmesidir. Kısacası, dolaylı referans haritası (indirect reference map), bir nesnenin dahili referansı ile URL’deki karşılık gösterilen temsilci parametresi arasındaki eşleşmeyi sağlar.
Kullanıcı Girdisinin (Input) Kontrolü
Form yada URL adreslerinde yer alan kullanıcı inputlarının kontrol edilip doğrulanması da IDOR’a karşı alınabilecek basit önlemlerden bir tanesidir
Eğer konu hoşunuza gittiyse Manuel SQL Injection yazımı da incelemek isteyebilirsiniz.
Uzun süre Blogger’de acaaba.com adresinde yazılar yazdım. Genel olarak teknoloji, sanat ve psikoloji üzerine bir internet sitesi. Yaklaşık 3 yıldır aralıklı olarak siber güvenlik ile ilgilendim, 2 yıldır da profesyonel olarak bu alanda çeşitli çalışmalar yapmaktayım.