Se rendre au contenu

Injection NoSQL : comprendre et se protéger

L'injection SQL est bien connue ; sa cousine NoSQL l'est beaucoup moins. Pourtant, avec l'essor des bases NoSQL (MongoDB et consorts), cette faille discrète constitue une menace réelle pour de nombreuses applications modernes.

Qu'est-ce qu'une injection NoSQL ?

Les bases NoSQL offrent souplesse et montée en charge, mais ne sont pas à l'abri des injections. Comme pour l'injection SQL, le principe est qu'une donnée utilisateur mal contrôlée vient modifier la requête envoyée à la base, sauf qu'ici, la requête n'est pas du SQL mais souvent une structure (objet JSON, opérateurs).

Le résultat peut être tout aussi grave : contournement d'authentification, extraction de données, altération de la base. La faille est d'autant plus dangereuse qu'elle est moins médiatisée et parfois négligée par les équipes habituées au seul risque SQL. C'est un sujet courant des tests d'intrusion.

Comment elle s'exploite

Contournement d'authentification

En injectant des opérateurs (par exemple « toujours vrai »), un attaquant peut se connecter sans mot de passe valide.

Injection d'opérateurs

Détourner les opérateurs propres au moteur NoSQL pour transformer la logique de la requête attendue.

Extraction de données

Récupérer progressivement des informations sensibles en jouant sur les conditions de la requête, un procédé qui rappelle l'injection SQL aveugle.

Injection côté code

Certains moteurs autorisent l'évaluation d'expressions, ouvrant la voie à des exploitations plus poussées si elles sont mal encadrées.

Un angle mort fréquent

Beaucoup d'équipes pensent « injection = SQL » et considèrent leur base NoSQL comme intrinsèquement sûre. C'est un angle mort : la flexibilité du format des requêtes NoSQL crée justement de nouvelles surfaces d'attaque, notamment lorsqu'on construit une requête directement à partir d'un corps de requête JSON non validé. La vigilance doit donc s'étendre à toutes les bases, dans une logique de sécurité applicative globale.

Le principe : valider et typer les entrées

La défense rejoint celle de l'injection SQL, adaptée au monde NoSQL : valider et typer strictement les données reçues (une chaîne attendue ne doit pas pouvoir devenir un objet ou un opérateur), utiliser les API sécurisées du pilote (plutôt que de construire des requêtes « à la main »), appliquer le moindre privilège sur la base, et désactiver l'évaluation de code lorsqu'elle n'est pas nécessaire. Autant de points vérifiés lors d'un test d'intrusion.

Se protéger, étape par étape

1

Valider & typer les entrées

Vérifier le type et le format attendus ; refuser qu'une chaîne devienne un objet ou un opérateur.

2

Utiliser les API du pilote

S'appuyer sur les méthodes paramétrées du moteur plutôt que de concaténer des requêtes.

3

Filtrer les opérateurs

Empêcher l'injection d'opérateurs réservés dans les données fournies par l'utilisateur.

4

Désactiver l'évaluation de code

Couper les fonctionnalités d'évaluation d'expressions inutiles et dangereuses.

5

Appliquer le moindre privilège

Limiter les droits du compte applicatif sur la base pour réduire l'impact d'une injection.

6

Tester régulièrement

Inclure l'injection NoSQL dans le périmètre des audits et pentests.

Pourquoi se faire accompagner par BCIT ?

Une couverture complète

Nous testons les injections SQL et NoSQL, sans angle mort selon votre pile technique.

Des correctifs adaptés

Des recommandations propres à votre moteur NoSQL et à vos frameworks.

Du conseil pragmatique

De la sécurité applicative aux audits, un accompagnement concret.

Pas encore prêt à échanger ? Découvrez notre diagnostic cybersécurité →

Vos bases NoSQL sont-elles vraiment protégées ?

Prenons 15 minutes pour évaluer l'exposition de vos applications aux injections NoSQL et définir les correctifs prioritaires.