• Abdali Ferradj

Injection NoSQL

Dernière mise à jour : sept. 21

Dans mon dernier article, nous avons vu le fonctionnement des injections SQL et quelques techniques pour se défendre face à ce type d'attaque. Cependant, les bases de données NoSQL sont de plus en plus populaires. Il est difficile de nier leur rapidité et leur facilité à traiter des données non structurées, surtout avec des équipes de développement qui travaillent de plus en plus avec des méthodologies agiles.


Il faut du temps aux développeurs pour se débarrasser des vulnérabilités et autres problèmes des technologies émergentes. Ce n'est qu'après avoir été utilisés pendant un certain temps dans des applications de production que les problèmes commencent à remonter à la surface.


Les bases de données NoSQL sont similaires. Les développeurs doivent être conscients des principaux risques afin de garantir la sécurité de leurs applications. L'un de ces risques est l'injection de NoSQL.


Voyons ce qu'est l'injection NoSQL, les dommages qu'elle peut causer et comment la réparer.




Comprendre l'injection NoSQL


L'injection NoSQL est causée par plusieurs des mêmes vulnérabilités d'injections que l'injection SQL.


L'injection NoSQL permet aux attaquants de placer des commandes arbitraires dans une requête NoSQL. Cela leur permet de voler des données et même d'apporter des modifications à la base de données si leurs privilèges sont suffisamment élevés.


Les bases de données MongoDB sont l'un des terrains de jeux les plus populaires à exploiter avec cette vulnérabilité. '$ne : ""' est l'opérateur équivalent à 1=1 dans le monde NoSQL, donc, à titre d'exemple, un attaquant pourrait placer les caractères '$ne : ""' dans les champs de nom d'utilisateur et de mot de passe d'une interface utilisateur. Si le code est vulnérable à l'injection NoSQL, la base de données recherchera tous les enregistrements où le nom d'utilisateur et le mot de passe ne correspondent pas à une chaîne vide. En d'autres termes : tous les enregistrements. Aïe !


Si cette base de données n'est pas chiffrée, l'attaquant pourrait alors voler les noms d'utilisateurs et les mots de passe de chaque utilisateur qui s'y trouve. Cela inclut les noms d'utilisateurs et les mots de passe des administrateurs, leur donnant un accès illimité à l'ensemble de la base de données.


Les attaquants essaient souvent de transmettre des valeurs qui sont toujours vraies. Une autre attaque courante consiste à injecter du code malveillant dans des propriétés qui sont définies comme des fonctions.

Pourquoi l'injection NoSQL est dangereuse ?


L'injection NoSQL est dangereuse surtout parce qu'elle n'a pas encore reçue l'attention qu'elle mérite de la part de la communauté de la cybersécurité.


Les impacts de l'injection NoSQL sont sensiblement les mêmes que ceux de l'injection SQL traditionnelle. Les données peuvent être volées, modifiées, voir supprimées si une commande d’effacement est lancée avec succès. Les comptes peuvent également être compromis par le vol de données.


En fin de compte, MongoDB et les autres moteurs de base de données NoSQL sont vulnérables aux attaques. “Pas de SQL” (No SQL) ne veut pas dire “Pas d’injections”.


Heureusement, certains membres de la communauté, y compris CyberSecura, en prenons note et faisons passer le mot. Davantage de développeurs doivent se former afin de pouvoir protéger leurs applications des attaques vicieuses peu connues qui peuvent devenir un énorme casse-tête si elles sont exploitées.

Défaire l'injection NoSQL


L'injection NoSQL peut être difficile à vaincre. Malheureusement, il n'y a pas la possibilité d'effectuer des requêtes paramétrées comme c'est le cas avec l'injection SQL. Il existe cependant quelques options pour vous aider :

  • L'approche la plus simple suffit parfois à être la plus efficace. Ici, la révision de code est votre alliée la plus solide.

  • ➡ Veillez à ce que la saisie de l'utilisateur soit conforme à sa classe légitime. S'il s'agit d'un nombre, utilisez un nombre, s'il s'agit d'une chaîne, utilisez une chaîne et ainsi de suite.

  • ➡ Tout objet passé par un "agresseur" ne doit pas être traité comme un objet, mais comme une chaine de caractères. Cela est faisable en utilisant des drivers tel que Mongoose qui permettent de définir un schéma pour votre base de données NoSQL. Si vous paramétrez Mongoose pour que vos entrées soient des chaînes de caractères, elles seront construites en tant que telles.

  • Renforcez la sécurité de votre base de données ! Créez des comptes d'utilisateurs à faibles privilèges, optimisez le temps d'exécution des requêtes et suivez toujours les meilleures pratiques de sécurité qui s'appliquent à votre organisation.

  • Chiffrez vos données dans vos bases NoSQL. Ainsi, même si elles ont été violées, elles resteront illisibles.

Un inconvénient de la facilité d'utilisation des bases de données NoSQL est la tendance des développeurs à les utiliser sans se soucier de la sécurité.


Il est essentiel d'apprendre à utiliser une base de données NoSQL en toute sécurité et ainsi à se protéger contre les injections de NoSQL.


Pour résumer, il faut :

  • Désinfecter votre entrée avant de l'utiliser dans une expression de requête NoSQL ;

  • Utiliser des plugins/drivers qui vous aident (comme Mongoose) ;

  • Effectuer des révisions de code qui examinent spécifiquement la manière dont les données d'entrée sont utilisées dans les requêtes ;

  • Adopter une politique d’audit automatique (mise en place possible par nos soins) pour essayer de trouver les vulnérabilités de votre code ;

  • L'application du "moindre privilège" qui peut être une bonne stratégie de Défense en profondeur (DDP) au cas où quelqu'un trouverait une vulnérabilité dans votre application.


Vous souhaitez être informé(e) de nos actualités, et recevoir nos derniers articles de blog directement dans votre boite mail ? Abonnez-vous à notre newsletter mensuelle !



Vous souhaitez discuter de vos difficultés, de vos besoins, de nos offres ? Demandez à être contacté, gratuitement et sans engagement, par l'un de nos expert en cybersécurité !



141 vues