Bu bölümde, Broken Access Control güvenliğinin ne olduğunu tartışacağız, yetki yükseltme ve erişim kontrolü ile ortaya çıkabilecek güvenlik açıklarının türlerini anlatacağız ve bu güvenlik açıklarının nasıl önleneceğini özetleyeceğiz.
Access Control Nedir?
Erişim kontrolü (veya yetkilendirme), teşebbüs edilen eylemleri veya talep ettikleri kaynaklara erişimi kimin (veya neyin) gerçekleştirebileceğine ilişkin kısıtlamaların uygulanmasıdır. Web uygulamaları bağlamında erişim kontrolü, kimlik doğrulama ve oturum yönetimine bağlıdır:
- Kimlik doğrulama , kullanıcıyı tanımlar ve söyledikleri kişi olduklarını onaylar.
- Oturum yönetimi , aynı kullanıcı tarafından hangi sonraki HTTP isteklerinin yapıldığını tanımlar.
- Erişim denetimi , kullanıcının gerçekleştirmeye çalıştığı eylemi gerçekleştirmesine izin verilip verilmediğini belirler.
Bozuk erişim denetimleri, yaygın olarak karşılaşılan ve genellikle kritik bir güvenlik açığıdır. Erişim kontrollerinin tasarımı ve yönetimi, teknik bir uygulamaya iş, organizasyon ve yasal kısıtlamalar uygulayan karmaşık ve dinamik bir sorundur. Erişim kontrolü tasarım kararları teknoloji tarafından değil insanlar tarafından verilmelidir ve hata potansiyeli yüksektir.
Kullanıcı açısından bakıldığında, erişim kontrolleri aşağıdaki kategorilere ayrılabilir:
- Dikey erişim kontrolleri
- Yatay erişim kontrolleri
- Bağlama bağlı erişim kontrolleri
Dikey erişim kontrolleri
Dikey erişim kontrolleri, diğer kullanıcı türleri için mevcut olmayan hassas işlevlere erişimi kısıtlayan mekanizmalardır.
Dikey erişim kontrolleri ile farklı tipteki kullanıcılar, farklı uygulama işlevlerine erişebilir. Örneğin, sıradan bir kullanıcının bu işlemlere erişimi yokken bir yönetici herhangi bir kullanıcının hesabını değiştirebilir veya silebilir. Dikey erişim kontrolleri, görevler ayrılığı ve en az yetki gibi iş politikalarını uygulamak için tasarlanmış güvenlik modellerinin daha ayrıntılı uygulamaları olabilir.
Yatay erişim kontrolleri
Yatay erişim kontrolleri, kaynaklara erişimi, bu kaynaklara erişmelerine özel olarak izin verilen kullanıcılarla kısıtlayan mekanizmalardır.
Yatay erişim denetimleriyle, farklı kullanıcılar aynı türdeki kaynakların bir alt kümesine erişebilir. Örneğin, bir bankacılık uygulaması, bir kullanıcının işlemleri görüntülemesine ve kendi hesaplarından ödeme yapmasına izin verir, ancak başka bir kullanıcının hesaplarına izin vermez.
Bağlama bağlı erişim kontrolleri
Bağlama bağlı erişim kontrolleri, uygulamanın durumuna veya kullanıcının onunla etkileşimine bağlı olarak işlevlere ve kaynaklara erişimi kısıtlar.
Bağlama bağlı erişim kontrolleri, bir kullanıcının eylemleri yanlış sırada gerçekleştirmesini engeller. Örneğin, bir perakende web sitesi, kullanıcıların ödeme yaptıktan sonra alışveriş sepetlerinin içeriğini değiştirmesini engelleyebilir.
Broken Access Control-Bozuk erişim denetimlerine örnekler
Bozuk erişim denetimi güvenlik açıkları, bir kullanıcı gerçekten bir kaynağa erişebildiğinde veya erişemeyeceği varsayılan bir eylemi gerçekleştirebildiğinde ortaya çıkar.
Dikey yetki yükseltme
Bir kullanıcı, erişmesine izin verilmeyen işlevlere erişebiliyorsa, bu dikey yetki yükseltmektedir. Örneğin, yönetici olmayan bir kullanıcı, kullanıcı hesaplarını silebileceği bir yönetici sayfasına gerçekten erişebiliyorsa, bu dikey yetki yükseltmedir.
Korumasız işlevsellik
En temelde dikey yetki yükseltme, bir uygulamanın hassas işlevsellik üzerinde herhangi bir koruma uygulamadığı durumlarda ortaya çıkar. Örneğin, yönetim işlevlerine bir yöneticinin karşılama sayfasından bağlantı verilebilir, ancak bir kullanıcının karşılama sayfasından bağlantı verilmez. Ancak, bir kullanıcı doğrudan ilgili yönetici URL’sine göz atarak yönetim işlevlerine kolayca erişebilir.
Örneğin, bir web sitesi hassas işlevleri aşağıdaki URL’de barındırabilir:
Bu, yalnızca kullanıcı arabirimlerindeki işlevselliğe bağlantısı olan yönetici kullanıcılar tarafından değil, herhangi bir kullanıcı tarafından erişilebilir olabilir. Bazı durumlarda, yönetim URL’si robots.txt
dosya gibi başka konumlarda açıklanabilir :
URL herhangi bir yerde ifşa edilmemiş olsa bile, bir saldırgan hassas işlevselliğin konumunu kaba kuvvetle belirlemek için bir kelime listesi kullanabilir.
Bazı durumlarda, hassas işlevsellik sağlam bir şekilde korunmaz, ancak daha az tahmin edilebilir bir URL verilerek gizlenir: belirsizliğe göre güvenlik denir. Kullanıcılar, karmaşık URL’yi çeşitli şekillerde keşfetmeye devam edebileceğinden, yalnızca hassas işlevleri gizlemek etkili erişim kontrolü sağlamaz.
Örneğin, aşağıdaki URL’de yönetim işlevlerini barındıran bir uygulama düşünün:
Bu, bir saldırgan tarafından doğrudan tahmin edilemeyebilir. Ancak uygulama yine de URL’yi kullanıcılara sızdırabilir. Örneğin, URL, kullanıcının rolüne dayalı olarak kullanıcı arayüzünü oluşturan JavaScript’te açıklanabilir:
<script>
var isAdmin = false;
if (isAdmin) {
...
var adminPanelTag = document.createElement('a');
adminPanelTag.setAttribute('https://insecure-website.com/administrator-panel-yb556');
adminPanelTag.innerText = 'Admin panel';
...
}
</script>
Bu komut dosyası, yönetici kullanıcıysa kullanıcının kullanıcı arayüzüne bir bağlantı ekler. Ancak, URL’yi içeren komut dosyası, rollerinden bağımsız olarak tüm kullanıcılar tarafından görülebilir.
Parametre tabanlı erişim kontrol yöntemleri
Bazı uygulamalar, oturum açma sırasında kullanıcının erişim haklarını veya rolünü belirler ve ardından bu bilgileri gizli alan, tanımlama bilgisi veya önceden ayarlanmış sorgu dizesi parametresi gibi kullanıcı tarafından kontrol edilebilen bir yerde depolar. Uygulama, gönderilen değere göre müteakip erişim kontrol kararlarını verir. Örneğin:
https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1
Bu yaklaşım temelde güvensizdir, çünkü bir kullanıcı değeri kolayca değiştirebilir ve yönetimsel işlevler gibi yetkilendirilmediği işlevlere erişim sağlayabilir.
Platformun yanlış yapılandırılmasından kaynaklanan bozuk erişim kontrolü
Bazı uygulamalar, kullanıcının rolüne bağlı olarak belirli URL’lere ve HTTP yöntemlerine erişimi kısıtlayarak platform katmanında erişim denetimlerini zorunlu kılar. Örneğin, bir uygulama aşağıdaki gibi kuralları yapılandırabilir:
DENY: POST, /admin/deleteUser, managers
Bu kural , yöneticiler grubundaki kullanıcılar POST
için URL’deki yönteme erişimi reddeder /admin/deleteUser
. Bu durumda çeşitli şeyler ters gidebilir ve erişim denetimi baypaslarına yol açabilir.
Bazı uygulama çerçeveleri, X-Original-URL
ve gibi orijinal istekteki URL’yi geçersiz kılmak için kullanılabilecek standart olmayan çeşitli HTTP başlıklarını destekler X-Rewrite-URL
. Bir web sitesi, URL’ye dayalı erişimi kısıtlamak için sıkı ön uç kontrolleri kullanıyorsa, ancak uygulama, URL’nin bir istek başlığı aracılığıyla geçersiz kılınmasına izin veriyorsa, aşağıdaki gibi bir istek kullanarak erişim kontrollerini atlamak mümkün olabilir:
POST / HTTP/1.1
X-Original-URL: /admin/deleteUser
İstekte kullanılan HTTP yöntemiyle ilgili olarak alternatif bir saldırı ortaya çıkabilir. Yukarıdaki ön uç kontrolleri, URL ve HTTP yöntemine göre erişimi kısıtlar. Bazı web siteleri, bir eylem gerçekleştirirken alternatif HTTP istek yöntemlerine toleranslıdır. Saldırgan, GET
kısıtlı bir URL üzerinde eylemler gerçekleştirmek için (veya başka bir) yöntemi kullanabilirse, platform katmanında uygulanan erişim kontrolünü atlatabilir.
Yatay yetki yükseltme
Yatay yetki yükseltme, bir kullanıcı kendi kaynakları yerine başka bir kullanıcıya ait kaynaklara erişebildiğinde ortaya çıkar. Örneğin, bir çalışanın yalnızca kendi istihdam ve bordro kayıtlarına erişebilmesi gerekiyor, ancak aslında diğer çalışanların kayıtlarına da erişebiliyorsa, bu yatay yetki yükseltmedir.
Yatay yetki yükseltme saldırıları, dikey yetki yükseltmeye benzer türden yararlanma yöntemleri kullanabilir. Örneğin, bir kullanıcı normalde aşağıdaki gibi bir URL kullanarak kendi hesap sayfasına erişebilir:
Şimdi, bir saldırgan id
parametre değerini başka bir kullanıcınınkiyle değiştirirse, saldırgan, ilişkili veri ve işlevlerle başka bir kullanıcının hesap sayfasına erişim elde edebilir.
Bazı uygulamalarda, yararlanılabilir parametrenin tahmin edilebilir bir değeri yoktur. Örneğin, artan bir sayı yerine, bir uygulama kullanıcıları tanımlamak için genel olarak benzersiz tanımlayıcılar (GUID’ler) kullanabilir. Burada, bir saldırgan başka bir kullanıcının tanımlayıcısını tahmin edemeyebilir veya tahmin edemeyebilir. Ancak, diğer kullanıcılara ait GUID’ler, kullanıcı mesajları veya incelemeleri gibi kullanıcılara referans verilen uygulamada başka bir yerde ifşa edilebilir.
Bazı durumlarda, bir uygulama, kullanıcının kaynağa erişmesine izin verilmediğini algılar ve oturum açma sayfasına bir yönlendirme döndürür. Ancak, yeniden yönlendirmeyi içeren yanıt, hedeflenen kullanıcıya ait bazı hassas verileri hala içerebilir, bu nedenle saldırı yine de başarılı olur.
Yataydan dikeye yetki yükseltme
Genellikle, yatay bir yetki yükseltme saldırısı, daha yetkili bir kullanıcıdan ödün verilerek dikey bir yetki yükseltmeye dönüştürülebilir. Örneğin, yatay bir yükseltme, bir saldırganın başka bir kullanıcıya ait parolayı sıfırlamasına veya ele geçirmesine izin verebilir. Saldırgan bir yönetici kullanıcıyı hedefler ve hesabının güvenliğini ihlal ederse, yönetici erişimi kazanabilir ve böylece dikey yetki yükseltmesi gerçekleştirebilir.
Örneğin, bir saldırgan, yatay yetki yükseltme için önceden açıklanan parametre kurcalama tekniğini kullanarak başka bir kullanıcının hesap sayfasına erişim elde edebilir:
Hedef kullanıcı bir uygulama yöneticisiyse, saldırgan bir yönetim hesabı sayfasına erişim kazanacaktır. Bu sayfa, yöneticinin parolasını ifşa edebilir veya parolayı değiştirmenin bir yolunu sağlayabilir ya da yetkili işlevlere doğrudan erişim sağlayabilir.
Güvenli olmayan doğrudan nesne referansları
Güvenli olmayan doğrudan nesne başvuruları (IDOR), erişim denetimi güvenlik açıklarının bir alt kategorisidir. IDOR, bir uygulama nesnelere doğrudan erişmek için kullanıcı tarafından sağlanan girdiyi kullandığında ve bir saldırgan, yetkisiz erişim elde etmek için girdiyi değiştirebildiğinde ortaya çıkar. Erişim kontrollerinin atlanmasına neden olabilecek birçok uygulama hatasının sadece bir örneği olmasına rağmen, OWASP 2007 İlk On’daki görünümüyle popüler hale geldi.
Çok adımlı süreçlerde erişim denetimi güvenlik açıkları
Birçok web sitesi, önemli işlevleri bir dizi adım üzerinden uygular. Bu genellikle çeşitli girdilerin veya seçeneklerin yakalanması gerektiğinde veya kullanıcının eylem gerçekleştirilmeden önce ayrıntıları gözden geçirmesi ve onaylaması gerektiğinde yapılır. Örneğin, kullanıcı ayrıntılarını güncellemek için yönetim işlevi aşağıdaki adımları içerebilir:
- Belirli bir kullanıcı için ayrıntıları içeren formu yükleyin.
- Değişiklikleri gönderin.
- Değişiklikleri gözden geçirin ve onaylayın.
Bazen, bir web sitesi bu adımların bazıları üzerinde sıkı erişim kontrolleri uygular, ancak diğerlerini görmezden gelir. Örneğin, erişim kontrollerinin birinci ve ikinci adımlara doğru şekilde uygulandığını, ancak üçüncü adıma uygulanmadığını varsayalım. Etkili bir şekilde, web sitesi, bir kullanıcının yalnızca uygun şekilde kontrol edilen ilk adımları tamamlamış olması durumunda 3. adıma ulaşacağını varsayar. Burada bir saldırgan, ilk iki adımı atlayarak ve gerekli parametrelerle üçüncü adım için doğrudan istek göndererek işleve yetkisiz erişim elde edebilir.
Yönlendiren tabanlı erişim kontrolü
Bazı web siteleri, erişim denetimlerini Referer
HTTP isteğinde gönderilen başlığa dayandırır . Referer
Başlık genellikle bir istek başlatıldı hangi sayfayı belirtmek için tarayıcılar tarafından istekleri eklenir.
Örneğin, bir uygulamanın adresindeki ana yönetim sayfası üzerinde /admin
, ancak /admin/deleteUser
yalnızca Referer
başlığı inceler gibi alt sayfalar için erişim kontrolünü güçlü bir şekilde uyguladığını varsayalım . Eğer Referer
başlık ana içeren /admin
URL’yi, istek izin verilir.
Bu durumda, Referer
başlık bir saldırgan tarafından tamamen kontrol edilebildiğinden, hassas alt sayfalara doğrudan istekte bulunabilir, gerekli Referer
başlığı sağlayabilir ve böylece yetkisiz erişim elde edebilirler.
Konum tabanlı erişim kontrolü
Bazı web siteleri, kullanıcının coğrafi konumuna göre kaynaklar üzerinde erişim kontrolleri uygular. Bu, örneğin, eyalet mevzuatının veya ticari kısıtlamaların geçerli olduğu bankacılık uygulamaları veya medya hizmetleri için geçerli olabilir. Bu erişim denetimleri genellikle web proxy’lerinin, VPN’lerin kullanımı veya istemci tarafı coğrafi konum belirleme mekanizmalarının manipülasyonu ile atlatılabilir.
Erişim denetimi güvenlik açıkları nasıl önlenir
Erişim denetimi güvenlik açıkları, genel olarak derinlemesine savunma yaklaşımı benimsenerek ve aşağıdaki ilkeler uygulanarak önlenebilir:
- Erişim denetimi için asla yalnızca karartmaya güvenmeyin.
- Bir kaynağın herkese açık olması amaçlanmadıkça, varsayılan olarak erişimi reddedin.
- Mümkün olan her yerde, erişim kontrollerini zorlamak için uygulama çapında tek bir mekanizma kullanın.
- Kod düzeyinde, geliştiricilerin her kaynak için izin verilen erişimi beyan etmesini ve varsayılan olarak erişimi reddetmesini zorunlu kılın.
- Tasarlandığı gibi çalıştıklarından emin olmak için erişim kontrollerini baştan sona denetleyin ve test edin.