Business Logic

Business Logic Zafiyeti Nedir?

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.

Yöntemler

Client-Side Kontrole Güvenmek

Örnek olarak bir ürün sepete eklenirken server tarafında ücreti kontrol edilmiyor ise ürünün fiyatını düşürebiliriz.

Negatif Sayılarda Hatalar

Uygulamalar pozitif olması gereken verilerin negatif olup olmadığını kontrol etmiyor olabilir.

Mantıksız Güvenlik Kontrolü

Ö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.

Kuralların Hatalı Uygulanması

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.

Çok Yüksek Sayılarda Hatalar

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.

Girdilerin Yanlış Değerlendirilmesi

Ö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.

Endpointlerde Zayıf Kontroller

Örneğin bu enpointte parametre olarak eski parola gönderiliyor fakat parametreyi sildiğimizde olup olmadığı kontrol edilmiyor olabilir.

Çok Adımlı İşlemlerde Kontrol Eksikliği

Ö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.

Request ile Doğrulanan Yetki Kontrolü

Ö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.

Mantıksız Para İşlemleri

Ö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.

Aynı Şifrelemenin Birkaç Alanda Kullanılması

Ö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.

Email Parser Zafiyetleri

Bu zafiyette farklı kodlamalar kullanarak kayıt maili ile veritabanındaki mailin farklı kayıt edilmesini sağlıyoruz.

Önlemler

  • 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.

Kaynaklar

Portswigger Academy: https://portswigger.net/web-security/logic-flaws

Last updated