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.
Türleri
Section titled “Türleri”- 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).
Tespit — IDOR
Section titled “Tespit — IDOR”-
Nesne referanslarını topla — ?id=1024 , /api/orders/1024 , ?file=inv_1024.pdf , GraphQL user(id:) , gizli alanlar, JWT claim’leri.
-
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) ).
-
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.
-
İ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.
-
Fonksiyonel IDOR — sadece okuma değil; başka kullanıcının kaydını güncelle / sil / paylaşım iznini değiştir.
Örnekler
Section titled “Örnekler”GET /api/account/1024/statement HTTP/1.1Authorization: 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 paneliGET /admin/users HTTP/1.1Cookie: session=user_session_abc
# Method basedPOST /api/users/1025/role HTTP/1.1{"role":"admin"}# GraphQL IDORquery { order(id: "1025") { total items { sku } } }UUID / tahmin edilemez id
Section titled “UUID / tahmin edilemez id”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.
Parameter / mass assignment ile yetki
Section titled “Parameter / mass assignment ile yetki”// 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.
Otomasyon
Section titled “Otomasyon”ffuf -u https://hedef/api/invoices/FUZZ -w ids.txt \ -H "Authorization: Bearer $TOKEN" -mc 200 -fs <own_len>Checklist
Section titled “Checklist”□ 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