Ce septième épisode nous amène aux failles de type “manque de contrôle d’accès”.
Classé #7 dans l’OWASP Top 10 2013, ce genre de vulnérabilité est très facile à exploiter bien que pas nécessairement visible au premier coup d’oeil. L’impact exact dépendra précisément du contenu et des fonctionnalités présentes dans l’application.

Pour faire simple, ce type de faille existe à cause d’un manque de contrôle dans les droits d’accès aux fonctionnalités du site, quel que soit le niveau d’accès normalement requis par la fonctionnalité en question;
Dans le monde réel, cela reviendrait par exemple à pouvoir rentrer dans le laboratoire d’un hôpital en tant que simple patient (pour voler des médicaments ou toute autre chose).

Des fonctionnalités gérées par la même application

Dans les applications web, de nombreuses fonctions peuvent être implémentées dans le même code.
Prenons par exemple un blog, nous pouvons y trouver des fonctionnalités permettant de lire des articles, mais aussi d’autres fonctions permettant de les modifier, ou d’en supprimer. On trouvera également des fonctionnalités permettant de créer de nouveaux utilisateurs, d’en modifier, ainsi de suite…
Sur une application e-commerce, vous trouverez par exemple des fonctionnalités pour commander des produits, et d’autres pour créer des produits dans la base de données, ou pour extraire les commandes des clients.

Un manque de contrôle

Ces failles sont dues à un manque de contrôle sur une ou plusieurs des fonctionnalités. Différents scénarios peuvent être rencontrés, comme :
– Un menu qui change en fonction du niveau d’accès de la personne connectée, mais accéder directement aux URLs des éléments cachés du menu fonctionne.
– Une application qui vérifie les niveaux d’accès d’un utilisateur en se basant sur des informations fournies par l’utilisateur lui-même, par exemple avec un cookie (“admin”=1). Cela peut sembler ridicule, mais la situation existe.
Parfois, même si un système robuste de contrôle des droits a été mis en place, des fonctionnalités normalement inaccessibles seront disponibles à cause d’un oubli de configuration de la part d’un développeur, ou parce qu’il l’aura mal configuré.

Détecter de telles failles est assez facile

Des outils automatisés ne pourront en général pas détecter de telles failles par eux-mêmes. Une revue de code et des configurations pourra se révéler très efficace dans la détection d’un manque de contrôle ou d’un problème de configuration.
Cependant, le meilleur moyen de détecter ces failles est de tester l’application! Effectuer un mapping des différentes fonctionnalités avec un compte possédant les droits les plus élevés et descendre progressivement les droits de l’utilisateur permettra de repérer les fonctionnalités qui ne devraient plus être disponibles mais qui le restent tout de même (ce type de test est généralement effectué durant un test d’intrusion).

Autres articles dans cette série :