Business logic vulnerabilities (İş mantığı zafiyetleri)
Business logic vulnerabilities (İş mantığı zafiyetleri)
Bu bölümde, iş mantığı zafiyetleri kavramını tanıtacağız ve bu zafiyetlerin, kullanıcı davranışları hakkında yapılan hatalı varsayımlar nedeniyle nasıl ortaya çıkabildiğini açıklayacağız. Ayrıca mantık hatalarının olası etkilerini ele alacak ve bu hataların nasıl istismar edilebileceğini öğreteceğiz.
Öğrendiklerinizi, gerçek dünyada karşılaşılan hatalardan esinlenerek hazırlanmış etkileşimli lab’lerde pratik yaparak pekiştirebilirsiniz. Son olarak, kendi uygulamalarınızda bu tür mantık hatalarının oluşmasını önlemek için bazı genel en iyi uygulamaları (best practices) paylaşacağız.

Business logic vulnerabilities (İş mantığı zafiyetleri) nedir?
İş mantığı zafiyetleri , bir uygulamanın tasarımında veya uygulanmasında bulunan ve saldırganın beklenmeyen davranışlar elde etmesine olanak tanıyan hatalardır. Bu durum, saldırganların meşru fonksiyonları kötüye kullanarak zararlı bir amaca ulaşmasını mümkün kılabilir. Bu tür hatalar genellikle, uygulamada oluşabilecek olağandışı durumların öngörülememesi ve bu durumların güvenli şekilde ele alınmaması sonucunda ortaya çıkar
Not: Bu bağlamda “iş mantığı (business logic)” terimi, uygulamanın nasıl çalıştığını tanımlayan kural setini ifade eder. Bu kurallar her zaman doğrudan bir “iş” ile ilgili olmadığından, bu zafiyetler “application logic vulnerabilities” veya kısaca “logic flaws (mantık hataları)” olarak da adlandırılır
Mantık hataları, genellikle uygulamanın normal kullanımı sırasında fark edilmez . Ancak bir saldırgan, geliştiricilerin hiç öngörmediği şekillerde uygulama ile etkileşime girerek bu davranışsal gariplikleri istismar edebilir
İş mantığının temel amaçlarından biri, uygulama veya fonksiyon tasarlanırken belirlenen kuralları ve kısıtlamaları uygulamaktır. Bu kurallar, belirli bir senaryoda uygulamanın nasıl tepki vermesi gerektiğini tanımlar. Buna, işletmeye zarar verecek veya anlamsız işlemleri kullanıcıların yapmasını engellemek de dahildir
Mantıktaki hatalar, saldırganların bu kuralları aşmasına olanak tanıyabilir. Örneğin, bir satın alma sürecinin gerekli adımlarını takip etmeden işlemi tamamlayabilirler. Bazı durumlarda ise, kullanıcıdan alınan verilerin yetersiz veya hiç yapılmayan doğrulaması , işlem açısından kritik değerlerin keyfi olarak değiştirilmesine ya da anlamsız verilerin gönderilmesine neden olabilir. Sunucu tarafındaki mantığa beklenmeyen değerler göndererek, saldırgan uygulamanın yapmaması gereken bir şeyi yapmasını sağlayabilir
Mantık tabanlı zafiyetler son derece çeşitlidir ve çoğu zaman uygulamaya ve onun özel işlevlerine özgüdür. Bu zafiyetleri tespit etmek genellikle, iş alanına dair bilgi veya saldırganın hedeflerini anlayabilme gibi insani sezgiler gerektirir. Bu da onları otomatik güvenlik tarayıcılarıyla tespit etmeyi zorlaştırır . Bu nedenle mantık hataları, bug bounty avcıları ve manuel test yapanlar için oldukça cazip hedeflerdir
Business logic zafiyetleri nasıl ortaya çıkar?
İş mantığı zafiyetleri çoğunlukla, tasarım ve geliştirme ekiplerinin kullanıcıların uygulama ile nasıl etkileşime gireceğine dair yanlış varsayımlar yapması sonucu ortaya çıkar. Bu hatalı varsayımlar, kullanıcı girdilerinin yetersiz doğrulanmasına yol açabilir. Örneğin, geliştiriciler kullanıcıların veriyi yalnızca tarayıcı üzerinden göndereceğini varsayarsa, uygulama tamamen zayıf istemci tarafı kontrollerine güvenebilir. Bu kontroller ise bir intercepting proxy kullanılarak kolayca aşılabilir
Sonuç olarak, saldırgan beklenen kullanıcı davranışından saptığında, uygulama bunu engellemek için gerekli adımları atamaz ve durumu güvenli şekilde ele alamaz
Mantık hataları özellikle, geliştirici ekibin bile tamamını tam olarak anlayamadığı aşırı karmaşık sistemlerde yaygındır. Bu tür hatalardan kaçınmak için geliştiricilerin uygulamayı bir bütün olarak anlaması gerekir. Büyük kod tabanlarında çalışan geliştiriciler, uygulamanın tüm parçalarına hâkim olmayabilir. Bir bileşen üzerinde çalışan biri, başka bir bileşenin nasıl çalıştığına dair yanlış varsayımlar yapabilir ve farkında olmadan ciddi mantık hataları ekleyebilir. Bu varsayımlar açıkça belgelenmezse, bu tür zafiyetlerin uygulamaya sızması oldukça kolaydır
Business logic zafiyetlerinin etkisi nedir?
İş mantığı zafiyetlerinin etkisi bazen önemsiz gibi görünebilir. Bu çok geniş bir kategoridir ve etkisi büyük ölçüde değişkenlik gösterir. Ancak istenmeyen herhangi bir davranış , doğru şekilde manipüle edildiğinde yüksek şiddette saldırılara yol açabilir. Bu nedenle, nasıl istismar edileceği tam olarak anlaşılamasa bile, garip görünen mantıklar ideal olarak düzeltilmelidir
Bir mantık hatasının etkisi temelde, hangi fonksiyonla ilişkili olduğuna bağlıdır. Örneğin hata kimlik doğrulama mekanizmasında ise, bu genel güvenliği ciddi şekilde etkileyebilir. Saldırganlar bunu yetki yükseltme veya kimlik doğrulamayı tamamen atlatma için kullanabilir ve hassas verilere erişebilir. Bu durum aynı zamanda başka saldırılar için daha geniş bir saldırı yüzeyi oluşturur
Finansal işlemlerdeki hatalı mantıklar ise, çalınan paralar, dolandırıcılık gibi nedenlerle işletme için büyük maddi kayıplara yol açabilir Ayrıca, mantık hataları saldırgana doğrudan bir kazanç sağlamasa bile, işletmeye zarar vermesine imkân tanıyabilir
Business logic zafiyetlerine örnekler nelerdir?
İş mantığı zafiyetlerini anlamanın en iyi yolu, gerçek dünya örneklerini incelemek ve yapılan hatalardan ders çıkarmaktır. Bu amaçla, yaygın mantık hatalarına dair somut örnekler ve bu zafiyetleri bizzat deneyimleyebileceğiniz bilinçli olarak zayıf bırakılmış uygulamalar sunulmaktadır
Business logic zafiyetleri nasıl önlenir?
Kısaca, iş mantığı zafiyetlerini önlemenin anahtarları şunlardır:
Geliştirici ve test ekiplerinin, uygulamanın hizmet ettiği iş alanını iyi anlaması
Kullanıcı davranışları veya uygulamanın diğer bölümlerinin davranışları hakkında örtük varsayımlardan kaçınılması
Sunucu tarafındaki durumla ilgili yapılan varsayımların açıkça belirlenmesi ve bu varsayımların doğrulandığından emin olunması
İşleme devam etmeden önce tüm girdilerin mantıklı ve geçerli olduğunun kontrol edilmesi
Buna ek olarak, geliştirici ve test ekiplerinin bu varsayımları ve uygulamanın farklı senaryolarda nasıl davranması gerektiğini tam olarak anlayabilmesi önemlidir. Bunu sağlamak için aşağıdaki en iyi uygulamalar önerilir:
Tüm işlem ve iş akışları için, her aşamadaki varsayımları belirten net tasarım dokümanları ve veri akışları oluşturmak
Kodu mümkün olduğunca anlaşılır yazmak. Anlaşılması zor kodda mantık hatalarını tespit etmek de zor olur. Zorunlu karmaşık durumlarda ise açık dokümantasyon şarttır
Her bileşeni kullanan diğer kodlara yapılan bağımlılıkları not almak ve kötü niyetli bir kullanımda ortaya çıkabilecek yan etkileri düşünmek
Mantık hataları çoğu zaman tek seferlik bir insan hatası gibi görülüp geçiştirilebilir. Ancak bu hatalar genellikle uygulamanın ilk tasarım aşamalarındaki kötü pratiklerin sonucudur. Bir mantık hatasının neden oluştuğunu ve ekip tarafından neden fark edilmediğini analiz etmek, süreçlerdeki zayıflıkları görmenizi sağlar. Küçük iyileştirmelerle, benzer hataların daha kaynağında engellenmesi veya daha erken aşamada yakalanması mümkün hale gelir
Business Logic Vulnerabilities Örnekleri (İş Mantığı Zafiyetleri)
İş mantığı zafiyetleri, ortaya çıktıkları bağlama oldukça özgüdür. Ancak tek tek mantık hataları büyük ölçüde farklılık gösterse de, çoğu zaman ortak temalar paylaşırlar. Özellikle, zafiyetin ilk ortaya çıkmasına neden olan temel hatalara göre gevşek biçimde gruplandırılabilirler
Bu bölümde, tasarım ve geliştirme ekiplerinin sıklıkla yaptığı bazı tipik hatalara bakacağız ve bunların iş mantığı zafiyetlerine doğrudan nasıl yol açtığını göstereceğiz. İster kendi uygulamalarınızı geliştiriyor olun ister mevcut bir uygulamayı denetliyor olun, bu örneklerden çıkarılan dersleri karşılaştığınız diğer uygulamalara da aynı eleştirel bakış açısıyla uygulayabilirsiniz
Mantık hatalarına örnekler
İstemci tarafı kontrollere aşırı güven
Alışılmadık (beklenmeyen) girdilerin ele alınamaması
Kullanıcı davranışları hakkında hatalı varsayımlar yapılması
Alan (domain) özelinde mantık hataları
Bir şifreleme oracle’ı sağlanması
E-posta adresi ayrıştırıcı (parser) tutarsızlıkları
İstemci tarafı kontrollere aşırı güven
Temel olarak hatalı bir varsayım, kullanıcıların uygulama ile yalnızca sağlanan web arayüzü üzerinden etkileşime gireceğidir. Bu varsayım son derece tehlikelidir çünkü istemci tarafı doğrulamanın kötü niyetli girdileri engelleyeceği düşüncesini doğurur. Oysa bir saldırgan, Burp Proxy gibi araçlar kullanarak tarayıcıdan çıkan veriyi sunucuya ulaşmadan önce kolayca değiştirebilir. Bu da istemci tarafı kontrolleri tamamen işlevsiz hale getirir
Sunucu tarafında yeterli doğrulama ve bütünlük kontrolleri yapılmadan verinin olduğu gibi kabul edilmesi, saldırganın çok az çabayla ciddi zararlar vermesine olanak tanır. Bu durumun etkisi, ilgili fonksiyonun ne yaptığına bağlıdır. Doğru bağlamda, hem iş süreçleri hem de uygulamanın güvenliği açısından yıkıcı sonuçlar doğurabilir
Alışılmadık girdilerin ele alınamaması
Uygulama mantığının amaçlarından biri, kullanıcı girdilerini iş kurallarına uygun değerlerle sınırlamaktır. Örneğin uygulama belirli bir veri tipindeki tüm değerleri teknik olarak kabul edebilir, ancak iş mantığı bu değerin iş açısından geçerli olup olmadığını belirler
Birçok uygulama, sayısal sınırlamalar içerir. Bunlar stok yönetimi, bütçe kısıtları veya tedarik zinciri aşamaları gibi amaçlarla kullanılır.
Örneğin bir e-ticaret sitesinde kullanıcılar sipariş vermek istedikleri ürün miktarını belirtir. Her ne kadar teoride her tam sayı geçerli olsa da, iş mantığı stoktan fazla ürün sipariş edilmesini engellemelidir
Geliştiricilerin tüm olası senaryoları öngörmesi ve bunları uygulama mantığına dahil etmesi gerekir. Eğer belirli bir durum için açık bir kontrol yoksa, bu beklenmeyen ve istismar edilebilir davranışlara yol açabilir
Örneğin, sayısal bir alan negatif değerleri kabul edebilir. İş mantığı açısından bu anlamsız olabilir. Ancak sunucu tarafı doğrulama yoksa, saldırgan bu negatif değeri göndererek istenmeyen sonuçlar doğurabilir
Banka transferi örneği $transferAmount = $_POST[‘amount’]; $currentBalance = $user->getBalance();
if ($transferAmount <= $currentBalance) { // Transferi tamamla } else { // Yetersiz bakiye }
Eğer amount parametresinin negatif olmasını engelleyen bir kontrol yoksa, saldırgan bu kontrolü atlatabilir. Örneğin -1000 gönderilirse, sistem bakiyeyi yeterli kabul eder ve transferi onaylar. Bu da paranın ters yönde aktarılmasına yol açabilir
Bu tür basit mantık hataları, doğru fonksiyon üzerinde gerçekleştiğinde son derece yıkıcı olabilir ve istemci tarafı kontroller nedeniyle geliştirme ve test aşamalarında kolayca gözden kaçabilir
Kullanıcı davranışları hakkında hatalı varsayımlar
Mantık zafiyetlerinin en yaygın nedenlerinden biri, kullanıcıların her zaman beklenen şekilde davranacağı varsayımıdır. Bu varsayımlar, geliştiricilerin tehlikeli senaryoları göz ardı etmesine yol açar
Güvenilen kullanıcılar her zaman güvenilir kalmaz
Bazı uygulamalar, kullanıcı ilk kontrolleri geçtikten sonra artık sürekli güvenilebilir olduğunu varsayar. Bu da ilerleyen aşamalarda kontrollerin gevşetilmesine neden olur. Güvenlik önlemleri uygulamanın her yerinde tutarlı şekilde uygulanmazsa, ciddi güvenlik açıkları oluşur
Kullanıcılar her zaman zorunlu alanları doldurmaz
Tarayıcılar zorunlu alanları boş bırakmayı engellese de, saldırganlar parametreleri değiştirebilir veya tamamen silebilir. Özellikle tek bir sunucu tarafı script’te birden fazla fonksiyon varsa, parametrenin varlığı veya yokluğu hangi kodun çalışacağını belirleyebilir. Bu da erişilmemesi gereken kod yollarına erişim sağlayabilir
Test sırasında:
Parametreleri tek tek silin
Hem parametre adını hem değerini kaldırmayı deneyin
Çok adımlı süreçleri sonuna kadar takip edin
URL, POST ve cookie parametrelerini test edin
Kullanıcılar her zaman doğru adım sırasını takip etmez
Birçok işlem, belirli adımlardan oluşan iş akışlarına dayanır. Arayüz kullanıcıyı yönlendirse de, saldırganlar bu sıraya uymak zorunda değildir. Bu durum özellikle 2FA atlatma gibi ciddi zafiyetlere yol açabilir
Burp Proxy ve Repeater ile:
Adımları atlayın
Aynı adımı birden fazla kez çağırın
Önceki adımlara geri dönün
Parametre setlerini değiştirin
Bu testler sırasında oluşan hata mesajları ve debug çıktıları, bilgi sızıntısı açısından çok değerlidir
Domain-özel mantık hataları
Bazı mantık hataları tamamen uygulamanın hizmet ettiği iş alanına (domain) özgüdür. Özellikle e-ticaret sitelerindeki indirim mekanizmaları, mantık hataları açısından klasik bir saldırı yüzeyidir
Örneğin, 1000$ üzeri alışverişe %10 indirim yapan bir sistem, indirim uygulandıktan sonra sepetin değiştirilip değiştirilmediğini kontrol etmezse istismar edilebilir. Saldırgan önce limiti aşar, sonra ürünleri çıkarır ve indirimi korur
Bu tür zafiyetleri tespit etmek için saldırganın hedeflerini ve uygulamanın bu hedeflere nasıl hizmet ettiğini anlamak gerekir. Domain bilgisi yoksa, tehlikeli davranışlar kolayca göz ardı edilebilir
Şifreleme oracle’ı sağlanması
Kullanıcı kontrolündeki girdilerin şifrelenip çıktısının kullanıcıya verilmesi durumunda bir encryption oracle oluşabilir. Saldırgan bu mekanizmayı kullanarak keyfi verileri geçerli şekilde şifreleyebilir ve bu verileri başka hassas fonksiyonlara sokabilir
Eğer tersine bir çözme (decrypt) mekanizması da varsa, saldırgan veri yapısını kolayca öğrenebilir. Etki, aynı algoritmayı kullanan fonksiyonlara bağlıdır
E-posta adresi ayrıştırma tutarsızlıkları
Bazı uygulamalar, e-posta adreslerinden domain bilgisini ayıklayarak kullanıcının hangi kuruma ait olduğunu belirler. Ancak RFC uyumlu e-posta adreslerinin ayrıştırılması oldukça karmaşıktır
Uygulamanın farklı bölümleri e-postayı farklı şekilde işlerse, saldırgan encoding teknikleriyle bu farkları istismar edebilir. Bu sayede kısıtlı domain’lerden geliyormuş gibi görünen e-postalarla yetkisiz erişim sağlanabilir
Bu tür hataların ana sonucu yetkisiz erişimdir ve admin panelleri gibi hassas alanlara erişim sağlayabilir







