Attaques

IDOR et contrôle d'accès

Une IDOR apparaît lorsqu'une application laisse accéder à une ressource en changeant simplement un identifiant, sans vérifier que l'utilisateur a réellement le droit d'y accéder.


Définition

IDOR signifie Insecure Direct Object Reference. Le problème n'est pas l'identifiant visible en lui-même, mais l'absence de contrôle d'accès côté serveur.

Exemple de ressource :

/factures/123
/factures/124

Si un utilisateur peut consulter la facture 124 alors qu'elle ne lui appartient pas, il y a probablement un problème de contrôle d'accès.


Pourquoi c'est fréquent

Les IDOR sont fréquentes parce que les applications manipulent constamment des identifiants :

  • comptes
  • factures
  • commandes
  • messages
  • fichiers
  • tickets support
  • documents privés

L'interface peut cacher certains boutons, mais l'API ou le serveur doivent vérifier les droits à chaque action.


Authentification ne veut pas dire autorisation

Un utilisateur connecté n'a pas tous les droits.

SituationQuestion à vérifier
Lire une ressourceAppartient-elle à l'utilisateur
Modifier une ressourceA-t-il un droit d'écriture
Supprimer une ressourceL'action est-elle autorisée
Lister des donnéesLe filtre est-il appliqué côté serveur

La règle doit être vérifiée côté serveur, pas seulement dans le front-end.


Signaux d'alerte

Pendant une revue ou un test autorisé, certains indices méritent attention :

  • identifiants numériques simples
  • endpoints qui prennent un userId
  • absence de vérification propriétaire
  • rôles gérés uniquement côté client
  • réponses différentes selon l'identifiant
  • exports ou téléchargements par ID direct
  • messages d'erreur trop précis

Prévention

Bonnes pratiques :

  • vérifier les droits côté serveur à chaque requête
  • filtrer les données par utilisateur ou tenant
  • centraliser les contrôles d'accès
  • tester les rôles et permissions
  • éviter de faire confiance aux champs userId envoyés par le client
  • journaliser les accès refusés
  • utiliser le moindre privilège côté base et API

L'utilisation d'UUID peut réduire la devinabilité, mais ne remplace jamais un contrôle d'accès.

À retenir

Un identifiant non devinable aide, mais la vraie protection reste la vérification d'autorisation côté serveur.


Tests défensifs utiles

Dans un cadre autorisé, il faut tester plusieurs profils :

  • utilisateur A
  • utilisateur B
  • utilisateur non connecté
  • compte avec droits limités
  • compte admin

Les scénarios à vérifier :

  • lecture d'une ressource d'un autre utilisateur
  • modification d'une ressource d'un autre utilisateur
  • suppression non autorisée
  • export ou téléchargement non autorisé
  • accès à une ressource après changement de rôle

Logs utiles

À journaliser :

  • accès refusés
  • accès à des ressources sensibles
  • changements de rôle
  • téléchargements de documents
  • exports massifs
  • tentatives répétées sur plusieurs identifiants

Ces logs peuvent révéler une tentative d'énumération ou un abus de droits.

Précédent
MitM