Bypass de l’authentification via injection d’opérateurs NoSQL
Exploiting NoSQL operator injection to bypass authentication
Contexte du laboratoire
La fonctionnalité de connexion de ce laboratoire repose sur une base de données MongoDB (NoSQL). Elle est vulnérable aux injections NoSQL via des opérateurs MongoDB.
Objectif :
Se connecter à l’application en tant que utilisateur administrator sans connaître son mot de passe.
Des identifiants valides sont fournis pour un utilisateur standard :
wiener : peter

Fonctionnement du formulaire de connexion
Un panneau de login est présent. La requête envoyée au serveur via POST est au format JSON :
Tentative d’injection avec opérateur $ne
Une première idée consiste à forcer l’authentification de l’administrateur en indiquant que son mot de passe est “différent de x” :
Cette tentative ne fonctionne pas dans ce cas précis.

Contournement avec l’opérateur $regex
L’injection est possible en utilisant l’opérateur $regex, qui permet de faire correspondre des motifs sur les champs.
Exemple fonctionnel avec l’utilisateur wiener
Cette requête correspond à tout utilisateur dont le nom commence par wie.
Accès en tant qu’administrateur sans mot de passe
Sans connaître le mot de passe de l’administrateur, on peut utiliser la combinaison suivante :
Interprétation logique :
« Donne-moi un utilisateur dont le nom commence par a et dont le mot de passe n’est pas égal à x »
Résultat
Le serveur accepte la requête et répond avec un 302 Found, indiquant une authentification réussie.
Un nouveau cookie de session est renvoyé :
Set-Cookie: session=1jnvdOe3aaWIAyrj3WzRRJA1X40Ma1QU

L’accès à l’application est désormais effectué en tant qu’administrator
Mis à jour