JSSI 2012 - Les injections NoSQL

Nicolas Viot (NGM Security)

« Les injections No-SQL »
edit:slides
Les bases de données NO-SQL regroupent toutes les BDD non relationelles, mongoDB, CouchDB, SimpleDB etc… Les grands acteurs du web travaillent sur le sujet et l’utilisent dans certains cas.

Les avantages de ces technologies, c’est la suppression des contraintes d’intégrité qui permet le découpage des données avec une bonne scalabilité sans forcément se traîner la problématique de cohérence des données sur un système éclaté. Par contre l’absence de contrôle d’intégrité impose aux développeurs d’effectuer ce travail.

Le scénario est simple, une BDD NoSQL derrière un serveur Web.

Le moteur NoSQL utilise un langage de requête spécifique, qui comme en SQL peut faire l’objet d’une injection ou l’on vient placer un élèment valant toujours vrai, et permettant donc de perturber le retour de la base. Une démonstration est donnée sur un formulaire de login en NoSQL.

Lors d’une injection SQL, il est possible de récupérer les données de la base. Coté NoSQL il est possible d’injecter du javascript dans certains backend, Javascript qui sera exécuté coté serveur. Il est donc envisageable d’exploiter une telle faille en aveugle et d’extraire là aussi, bit à bit l’information de la base.

Pour extraire les données, il faut récupérer les collections, équivalent des tables de la base. Heureusement il existe une fonction find() qui appellée sans paramètre retourne l’ensemble des collections. Il existe une fonction JavaScript qui permet d’obtenir le code d’un caractère donné pour récupérer la valeur du caractère par dichotomie.

Une base de données mal configurée peut même permettre l’execution de commandes ou l’accès fichier avec les droits du serveur NoSQL.

Le NoSQL ne prive pas les développeurs de l’utilisation de fonctions adéquates dans le cadre d’un framework, ou de l’échappement des méta caractères qui posent problème.

Ref: http://erlend.oftedal.no/blog/?blogid=110