OWASP Top 10: CSRF – Güvensiz Doğrudan Nesne Erişimi Zafiyeti

Güvensiz doğrudan nesne erişimi(Insecure direct object references) açıklığı OWASP top 10 listesindeki
4. sıradaki açıklıktır. Injection ve XSS açıklıklarından sonra en sık
karşılaşılan ve saldırganlar tarafından suistimal edilen bir
açıklıktır.  İlgili açıklık web uygulama güvenlik testlerinde sıklıkla
karşılaşılan, istismar edilmesi çok basit ve etkiside bir o kadar yüksek
olan bir açıklıktır.

Açıklığın temel sebebi, uygulama geliştirme
esnasında belli bir nesneye erişim talebinde bulunan kullanıcı için  o
nesneye erişim hakkının olup olmadığının kontrol edilmemesinden
kaynaklanmaktadır. 
Nesnelere erişimlerin mevcut kullanıcı oturumu
seviyesinde kontrolün gerçekleştirilmediği bu durumlarda doğrudan nesne
erişim açıklığı ortaya çıkmaktadır. Çoğunlukla nesneleri ifade eden uniq
bir ID değerinin veya bir dosya isminin manipulasyonu ile farklı
nesnelere erişim sağlanabilmektedir. 
Örneğin bir bankaya ait internet
şubesi üzerinde hesap numarası değerine göre hesap özeti çıkarılan bir
istek olduğunu varsayalım. Buradaki hesap özetlerine erişim esnasında
kullanıcının o nesneye erişim kontrolü yapılmadığı durumda hesap
numarası değiştirilerek başka kullanıcılara ait hesap özetleri de ele
geçirilebilecektir. Açıklığın bulunduğu parametrenin gösterdiği nesneye
ait tüm veriler otomatize bir script aracılığıyla kolaylıkla elde
edilebilmektedir. Elde edilen veriler bazen çok değerli veriler
olabilirken bazen değeri çok yüksek olmasa bile kurumsal bir firmaya ait
bu değersiz verilerin dahi public forumlarda paylaşılması vs.
düşünüldüğünde kurum için oluşturacağı prestij kaybının büyük kayıp
olacağı şüphesiz.

Açıklığın daha iyi anlaşılması için
aşağıdaki gibi bir örnek üzerinden gidelim. Banka Müsteri id değeri
değiştirilerek farklı kullanıcı bilgilerine erişim sağlayalım.

http://www.bgabank.com.tr/?sayfa=profil.php&musteriID=35 adresi üzerinden alınan kullanıcı bilgisi;

musteriID
değeri bir artırılarak başka bir müşteriye ait bilgilere erişim
sağlamak için
http://www.bgabank.com/?sayfa=profil.php&musteriID=35
bağlantısı çağırılmıştır;

Yukarıda
görüldüğü üzere farklı bir kullanıcı bilgilerine erişim
sağlanabilmiştir. İlgili durum erişim kontrol eksikliğinden kaynaklanan
doğrudan nesne erişim açıklığıdır.
Uygulamaların
bu tür açıklıklar ile prod ortamlara çıkmaması için, kaynak kod
denetiminden geçirilerek veya penetrasyon testlerine tabi tutularak
tespit edilip düzeltilmesi gerekmektedir. İlgili açıklığın istismarıda
oldukça basit olduğu için sıklıkla denenen ve başarı oranı yüksek bir
açıklık türüdür. Türkiyede ve uluslararası çok büyük firmalarda bu
açıklıktan ağzı yanan çok sayıda firma vardır.
İlgili
açıklık türünü tespit etmenin en temel yolu, uygulama içerisindeki tüm
nesne erişimi gerektiren bölümlerin manipulasyolara tabi tutularak bir
kimlik doğrulama mekanizması veya yetkilendirme işlemine tabi
tutulduğundan emin olmaktır. Bu tür açıklıkları otomatize web uygulama
güvenlik tarama araçları bulamamaktadır. Bu sebeple manuel testlerden
geçirilerek açıklığın tespit edilmesi gerekmektedir.
Açıklıktan
korunmak için nesnelere erişim için kullanılan ID, filename gibi
değerlerin değiştirilmesinin imkansızlaştırılması için maskeleme
yöntemleri kullanılarak anlamsız değerler ile taşınması gerekmektedir. 
Mesela http://www.bgabank.com/?sayf=profil.php&musteriID=35 yerine http://www.bgabank.com/?sayfa=profil.php&musteriID=14ab134dad3422dadacdeedadada12a56
gibi maskelenmiş bir ID değeri kullanılarak sorgu
gerçekleştirilmelidir.. Buradan alınan değer belli bir fonksiyona tabi
tutularak çözülüp bu değer veritabanından sorgulanabilir.

Fırat Celal Erdik