Business Logic
Last updated
Was this helpful?
Last updated
Was this helpful?
Business logic zafiyeti, bir yazılım veya uygulamanın iş kuralları ve mantığıyla ilgili zayıflık veya güvenlik açığıdır. Bu tür zafiyetler, uygulamanın tasarım aşamasında yapılan hatalardan kaynaklanır ve genellikle normal kullanıcı davranışlarının ötesine geçerek sistemi kötüye kullanmayı mümkün kılar.
Örneğin, bir e-ticaret sitesinde indirim kodlarıyla ilgili bir zafiyet, kullanıcıların sınırsız sayıda indirim uygulamasına veya belirli ürünleri ücretsiz almasına olanak tanıyabilir. Diğer bir örnek, bir bankacılık uygulamasında para transfer limitlerini aşmanın mümkün olması olabilir.
Örnek olarak bir ürün sepete eklenirken server tarafında ücreti kontrol edilmiyor ise ürünün fiyatını düşürebiliriz.
Uygulamalar pozitif olması gereken verilerin negatif olup olmadığını kontrol etmiyor olabilir.
Örnek olarak bir uygulama kendi şirketindeki çalışanlara admin yetkisi veriyor olabilir. Eğer eposta doğrulaması yapılmadan hesap açılıyor ise saldırgan admin hesabına sahip olabilir.
Mesela sepetteki ürünlere kupon uygulanabiliyor fakan aynı kuponun birden fazla kere girilememesi lazım. Eğer uygulama sadece son kuponun girilen kupon ile aynı olup olmadığını kontrol ediyorsa 2 kupon sürekli ard arda girilebilir.
Bilgisayarlar bir verinin değeri çok yüksek integer değerlere çıktığında negatife dönebilir. Bu durumda negatif sayıda ürün alınıyor olabilir.
Örneğin uygulama bir domainden kayıtlı hesaplara admin yetkisi veriyor ve maili doğruluyor. Fakat veritabanı en fazla 255 karakter uzunluğunda email tutabiliyor ve devamını kesiyor. Böyle bir davranış varsa aşağıdaki şekilde bir saldırı yapabiliriz.
Örneğin bu enpointte parametre olarak eski parola gönderiliyor fakat parametreyi sildiğimizde olup olmadığı kontrol edilmiyor olabilir.
Örneğin bir ürün siparişinde önce sepete sonra ödeme kısmına sonrasında onay kısmına yönlendiriliyoruz.
Eğer kontrol yapılmıyorsa ödeme bilgisi girmeden sipariş oluşturabiliriz.
Örneğin admin paneline erişirken bizim admin olmadığımızı belirten bir istek atılıyor. Bu isteği yarıda keserek göndermezsek panele ulaşabiliriz.
Örneğin siteden 100TL karşılığında 100TL değerinde hediye kartı alabiliyoruz ve sitede bakiyemize yükleniyor.
Eğer bu ürüne indirim kuponu ekleyebiliyorsak 100 lira ile sonsuz bakiye yükleyebiliriz.
Örneğin bir mesaj gönderdiğinizde çerezinize o mesajın şifrelenmiş hali geliyor. Eğer bu çerezi decode eden bir özellik varsa diğer şifrelenmiş verileri de aynı şekilde decode etmeyi deneyebiliriz.
Bu zafiyette farklı kodlamalar kullanarak kayıt maili ile veritabanındaki mailin farklı kayıt edilmesini sağlıyoruz.
Geliştiricilerin uygulamanın hizmet ettiği alanı anladığından emin olun.
Kullanıcı davranışı veya uygulamanın diğer bölümlerinin davranışı hakkında üstü kapalı varsayımlarda bulunmaktan kaçının.
Her aşamada yapılan varsayımları not ederek, tüm işlemler ve iş akışları için açık tasarım belgelerini ve veri akışlarını oluşturun.
Kodu mümkün olduğunca açık yazın. Ne olması gerektiğini anlamak zorsa, herhangi bir mantık hatasını tespit etmek de zor olacaktır. İdeal olarak, iyi yazılmış bir kodun anlaşılması için dokümantasyona ihtiyaç duyulmamalıdır.
Kaçınılmaz olarak karmaşık durumlarda, diğer geliştiricilerin ve test uzmanlarının hangi varsayımların yapıldığını ve beklenen davranışın tam olarak ne olduğunu bilmelerini sağlamak için açık belgeler üretmek çok önemlidir.
Her bir bileşeni kullanan diğer kodlara yapılan referansları not edin. Kötü niyetli bir tarafın bunları alışılmadık bir şekilde manipüle etmesi durumunda bu bağımlılıkların yan etkilerini düşünün.
Portswigger Academy: