mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
107 lines
5.9 KiB
Markdown
107 lines
5.9 KiB
Markdown
# 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
|
||
|
||
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`
|
||
2. Veri **okuyan veya güncelleyen** (`GET`, `PUT`, `PATCH`, `DELETE`) uç noktalarını tercih edin.
|
||
3. Tanımlayıcıların **ardışık veya tahmin edilebilir** olup olmadığına dikkat edin – ID'niz `64185742` ise muhtemelen `64185741` vardır.
|
||
4. Ek API'leri açığa çıkarabilecek gizli veya alternatif akışları (ör. giriş sayfalarındaki *"Paradox team members"* bağlantısı) keşfedin.
|
||
5. 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)
|
||
```bash
|
||
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:
|
||
```bash
|
||
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:
|
||
```bash
|
||
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
|
||
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII](https://ian.sh/mcdonalds)
|
||
* [OWASP Top 10 – Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
||
* [How to Find More IDORs – Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
|
||
* [HTB Nocturnal: IDOR oracle → file theft](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
||
{{#include ../banners/hacktricks-training.md}}
|