5.9 KiB
Raw Blame History

IDOR (Insecure Direct Object Reference)

{{#include ../banners/hacktricks-training.md}}

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA), bir web veya API uç noktasının, bir kullanıcının kontrol edebildiği bir tanımlayıcıyı doğrudan iç nesneye erişmek için ifşa ettiği veya kabul ettiği ve çağıranın o nesneye erişmeye/ürünü değiştirmeye yetkili olup olmadığını doğrulamadan kullanıldığı durumlarda ortaya çıkar. Başarılı sömürü genellikle diğer kullanıcıların verilerini okuma veya değiştirme gibi horizontal or vertical privilege-escalationa izin verir ve en kötü durumda tam hesap devralma veya toplu veri dışarı sızdırma ile sonuçlanabilir.


1. Potansiyel IDOR'ları Belirleme

  1. Bir nesneyi referans gösteren parametrelere bakın:
  • Path: /api/user/1234, /files/550e8400-e29b-41d4-a716-446655440000
  • Query: ?id=42, ?invoice=2024-00001
  • Body / JSON: {"user_id": 321, "order_id": 987}
  • Headers / Cookies: X-Client-ID: 4711
  1. Veri okuyan veya güncelleyen (GET, PUT, PATCH, DELETE) uç noktalarını tercih edin.
  2. Tanımlayıcıların ardışık veya tahmin edilebilir olup olmadığına dikkat edin ID'niz 64185742 ise muhtemelen 64185741 vardır.
  3. Ek API'leri açığa çıkarabilecek gizli veya alternatif akışları (ör. giriş sayfalarındaki "Paradox team members" bağlantısı) keşfedin.
  4. Bir kimlik doğrulanmış düşük ayrıcalıklı oturum kullanın ve sadece ID'yi değiştirip aynı token/cookie'yi tutun. Yetkilendirme hatasının olmaması genellikle IDOR belirtisidir.

Hızlı manuel müdahale (Burp Repeater)

PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json

{"lead_id":64185741}

Otomatik enumeration (Burp Intruder / curl loop)

for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done

Error-response oracle for user/file enumeration

Bir download endpoint hem username hem de filename kabul ettiğinde (örn. /view.php?username=<u>&file=<f>), hata mesajlarındaki ince farklılıklar sıklıkla bir oracle oluşturur:

  • Var olmayan username → "Kullanıcı bulunamadı"
  • Hatalı filename ama geçerli extension → "Dosya mevcut değil" (bazen mevcut dosyaları da listeler)
  • Hatalı extension → doğrulama hatası

Herhangi bir kimliği doğrulanmış oturumda, zararsız bir filename sabit tutarak username parametresini fuzz'layabilir ve geçerli kullanıcıları keşfetmek için "Kullanıcı bulunamadı" dizisini filtreleyebilirsiniz:

ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'

Once valid usernames are identified, request specific files directly (e.g., /view.php?username=amanda&file=privacy.odt). Bu desen genellikle diğer kullanıcıların belgelerinin yetkisiz ifşasına ve credential leakage'e yol açar.


2. Gerçek Dünya Vaka Çalışması McHire Chatbot Platform (2025)

Paradox.ai-powered McHire işe alım portalının bir değerlendirmesi sırasında aşağıdaki IDOR tespit edildi:

  • Endpoint: PUT /api/lead/cem-xhr
  • Authorization: user session cookie for any restaurant test account
  • Body parameter: {"lead_id": N} 8 haneli, sıralı sayısal tanımlayıcı

lead_id'yi azaltarak test eden, rastgele başvuruların full PII'sini (isim, e-posta, telefon, adres, vardiya tercihleri) ve session hijacking'e olanak veren bir tüketici JWT'sini elde etti. 1 64,185,742 aralığının taranması yaklaşık 64 milyon kaydıığa çıkardı.

Proof-of-Concept isteği:

curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'

Combined with varsayılan yönetici kimlik bilgileri (123456:123456) test hesabına erişim verdiği için, bu zafiyet kritik ve şirket genelinde bir veri ihlaline yol açtı.


3. Impact of IDOR / BOLA

  • Yatay yetki yükseltme diğer kullanıcıların verilerini oku/güncelle/sil.
  • Dikey yetki yükseltme düşük ayrıcalıklı bir kullanıcı yöneticiye özel işlevlere erişim kazanır.
  • Tanımlayıcılar ardışık ise toplu veri ihlali olabilir (e.g., applicant IDs, invoices).
  • Token çalmak veya diğer kullanıcıların parolalarını sıfırlamak yoluyla hesap ele geçirme.

4. Mitigations & Best Practices

  1. Her istekte nesne düzeyinde yetkilendirme uygulayın (user_id == session.user).
  2. Otomatik artan ID'ler yerine dolaylı, tahmin edilemez tanımlayıcıları (UUIDv4, ULID) tercih edin.
  3. Yetkilendirmeyi sunucu tarafında gerçekleştirin; gizli form alanlarına veya UI kontrollerine asla güvenmeyin.
  4. Merkezi bir middleware'de RBAC / ABAC kontrolleri uygulayın.
  5. ID taramasını tespit etmek için oran sınırlaması ve kayıt tutma ekleyin.
  6. Her yeni endpoint'i güvenlik testinden geçirin (unit, integration ve DAST).

5. Tooling

  • BurpSuite extensions: Authorize, Auto Repeater, Turbo Intruder.
  • OWASP ZAP: Auth Matrix, Forced Browse.
  • Github projects: bwapp-idor-scanner, Blindy (bulk IDOR hunting).

References