Skip to content

Broken Access Control & IDOR

OWASP A01 · en sık görülen risk difficulty: kolay

Broken Access Control, kullanıcının kendi yetki sınırları dışındaki kaynaklara veya işlemlere erişebilmesidir. OWASP 2021’de 1 numaralı risk kategorisidir. Kimlik doğrulama geçmiş olsa bile yetkilendirme eksikse zafiyet vardır.

  • IDOR (Insecure Direct Object Reference) — nesne kimliği (id, uuid, dosya adı) doğrudan girdiden alınır, sahiplik doğrulanmaz.
  • Yatay yetki yükseltme — aynı seviyedeki başka kullanıcının verisine erişim.
  • Dikey yetki yükseltme — normal kullanıcının yönetici işlevine erişimi.
  • Force browsing / hidden functionality — UI’da yok ama API’de açık uç.
  • CORS / path / verb — yanlış yapılandırılmış erişim kuralları (ör. /admin engelli, /Admin veya /admin/ açık).
  1. Nesne referanslarını topla — ?id=1024 , /api/orders/1024 , ?file=inv_1024.pdf , GraphQL user(id:) , gizli alanlar, JWT claim’leri.

  2. Değeri değiştir — komşu sayısal id ( 1023 , 1025 ), başka hesabın UUID’si, e-posta, sipariş numarası. Encoded id’leri decode et ( base64(user:1024) ).

  3. Yöntem/rol farkı — düşük yetkili hesapla yönetici uçlarını çağır; PUT / DELETE / PATCH metotlarını, parametreleri ( role=admin , isAdmin=true , user_type=1 ) dene.

  4. İki hesapla doğrula — A hesabının token’ıyla B hesabının kaynağına eriş; Authorization header’ı A’da tutup path’teki id’yi B yap.

  5. Fonksiyonel IDOR — sadece okuma değil; başka kullanıcının kaydını güncelle / sil / paylaşım iznini değiştir.

GET /api/account/1024/statement HTTP/1.1
Authorization: Bearer <düşük-yetkili-kullanıcı-token>

1024 → 1025 değişimiyle başka kullanıcının ekstresi dönüyorsa IDOR vardır.

# Dikey: user cookie ile admin paneli
GET /admin/users HTTP/1.1
Cookie: session=user_session_abc
# Method based
POST /api/users/1025/role HTTP/1.1
{"role":"admin"}
# GraphQL IDOR
query { order(id: "1025") { total items { sku } } }

UUID kullanmak tek başına yetmez — id sızdırıldığı (e-posta, paylaşım linki, JS bundle) veya liste endpoint’i (/api/users) açık olduğu sürece IDOR mümkündür. Test: referans sızıntısı + doğrudan erişim.

// Kayıt / profil güncelleme
{ "email": "a@x.com", "isAdmin": true, "role": "admin", "credits": 9999 }

Sunucu bilinmeyen alanları nesneye map ediyorsa dikey yükseltme olur — API Güvenliği ile örtüşür.

Terminal window
ffuf -u https://hedef/api/invoices/FUZZ -w ids.txt \
-H "Authorization: Bearer $TOKEN" -mc 200 -fs <own_len>
□ Her resource id'si için yatay test (2 hesap)
□ Admin-only path'ler user oturumuyla
□ Eski API sürümleri (/v1 vs /v2)
□ Export / PDF / dosya indirme uçları
□ Webhook / paylaşım token'ları tahmin veya reuse
□ IDOR + CSRF / XSS ile zincir etkisi