La faille IDOR (Insecure Direct Object Reference) est une vulnérabilité de sécurité classée parmi les plus courantes par l'OWASP, où une application expose des identifiants directs (comme un numéro de commande ou un ID utilisateur) dans des URLs, formulaires ou APIs, sans vérifier les droits d'accès. Un attaquant peut ainsi modifier manuellement ces identifiants pour accéder aux données d'autres utilisateurs, comme illustré par l'exemple d'une URL ?id=1042 où remplacer 1042 par 1041 donne accès à une facture étrangère.
Cette faille est fréquente car elle est simple à implémenter et souvent négligée lors du développement, notamment avec des identifiants numériques prévisibles (auto-incrémentés). Elle ne se limite pas aux URLs mais peut aussi toucher les paramètres POST, les APIs ou les cookies, rendant le risque encore plus diffus. L'article souligne que même des développeurs expérimentés peuvent omettre de vérifier les permissions côté serveur, exposant ainsi des données sensibles.
En mai 2026, le portail moncompte.ants.gouv.fr a subi une faille IDOR (Insecure Direct Object Reference) ayant exposé les données de 11,7 millions de Français. L’exploitation, qualifiée de « vraiment stupide » par son auteur, consistait simplement à modifier un identifiant numérique dans une URL pour accéder aux comptes d’autres utilisateurs, faute de vérification d’autorisation entre l’authentification et la récupération des données.
L’article explique que cette vulnérabilité, courante mais critique, survient lorsque les applications ne contrôlent pas si un utilisateur a le droit d’accéder à une ressource spécifique, même après s’être authentifié. L’exemple donné illustre un endpoint /api/account/{id} où seule la session est validée, sans vérification que l’identifiant {id} correspond bien au compte de l’utilisateur connecté.
Pour éviter ce type de faille, l’auteur propose des solutions techniques avec Symfony et PHP, comme l’utilisation de Voters pour gérer les autorisations, l’absence d’IDs exposés dans les URLs, ou des tests automatisés pour détecter les accès non autorisés. Le problème ne dépend pas du framework utilisé, mais de l’absence d’une couche d’autorisation explicite.