Skip to content

İş Mantığı Zafiyetleri

OWASP A04 difficulty: değişken

İş mantığı zafiyetleri, uygulamanın teknik olarak “doğru” çalışıp iş kurallarının varsaydığı senaryoların dışına çıkılabilmesidir. Otomatik tarayıcılar bunları nadiren bulur; iş akışını anlayıp beklenmedik ama geçerli girdiler denemek gerekir.

# Negatif / aşırı miktar
qty = -5 → bakiye artışı / ücret iadesi
qty = 0 → bedava ürün
qty = 999999 → stok / integer overflow
# Fiyat istemciden geliyor
{"productId":1,"price":0.01}
{"currency":"IDR"} # döviz arbitrajı
# Akış adımı atlama
step3'e step1-2 olmadan POST
ödeme onayından önce kargo adresi değiştir
# Kupon / indirim
aynı kuponu iki kez uygula
indirimleri istifleyerek %100+ düş
süresi dolmuş kuponu tarih manipülasyonuyla kullan
# Referral / puan
kendi referral kodunu kullan
puan transfer döngüsü
  1. Akışı haritala — uçtan uca gez; her adımın sunucu durumunu not al (sepet id, ödeme intent, sipariş status).

  2. Varsayımları kır — adım atla, sıra değiştir, geri dön, paralel sekmeden eski isteği replay et.

  3. Güven sınırlarını test et — fiyat, rol, miktar, indirim, userId istemciden mi geliyor?

  4. Sınır değerleri — negatif, sıfır, 0.001 , “1e6” , boş dizi, aşırı uzunluk.

  5. Yarış ve tekrar — tek kullanımlık işlemler → Race .

  6. Rol farkı — aynı akışı user vs support vs admin ile karşılaştır.

POST /api/cart/checkout HTTP/1.1
Content-Type: application/json
{"items":[{"id":42,"qty":1,"unitPrice":0.00}]}
POST /api/cart/checkout
{"items":[{"id":42,"qty":1}],"discount":100,"shipping":-10}
POST /api/subscription
{"plan":"enterprise","priceId":"price_free_tier"}
1) GET /apply → applicationId=A1
2) POST /apply/A1/review (step 2 atlanarak)
3) POST /apply/A1/submit → onaylandı
□ Kart bakiyesini iki hesaba harca (race)
□ İade + harcama sırasını boz (refund after use)
□ Düşük entropili gift card brute
□ İade miktarı > ödenen
□ Ülke kodunu ucuz vergi bölgesine çevir (client-side)
□ Digitals üründe physical shipping ücreti iadesi
□ Adres değişikliği ödeme sonrası ama kargo öncesi
□ Satın almadan yorum
□ Kendi ürününe puan
□ Rapor/flag limit aşımı
disabled button → yine de POST
min=1 max=5 → qty=100
hidden input role=user → role=admin
frontend currency lock → body currency değiştir
□ İş kurallarını dokümandan / ürün sahibinden öğren
□ Her "impossible" UI kısıtını proxy'den aş
□ Eski API sürümlerinde logic farkı ara
□ Raporla: beklenen kural → manipülasyon → etki ($$ / veri / yetki)
□ Demo hesap + kanıt sipariş ID'leri
Checkout akışını haritala
→ unitPrice/qty oynat
→ kupon stack + race
→ bedava / negatif ödeme PoC