Server-Side JavaScript Injection

Injection JavaScript côté serveur (Server-Side JavaScript Injection)

Théorie

Définition

L'injection JavaScript côté serveur est une forme spécifique d'injection liée aux bases de données NoSQL. Elle se produit lorsqu'un attaquant parvient à faire exécuter du code JavaScript arbitraire par le serveur dans le contexte de la base de données.


Scénarios d'injection

  • Injection en bande (in-band) : L'attaquant voit immĂ©diatement les rĂ©sultats de son injection.

  • Injection aveugle (blind) : L'attaquant ne voit pas directement les rĂ©sultats mais peut effectuer des dĂ©ductions.

  • Injection hors bande (out-of-band) : Exploitation indirecte, souvent en envoyant les rĂ©sultats de l’injection vers un canal externe.


Exemple concret

Un serveur utilise une requête avec $where pour vérifier un couple username/password :

.find({
  $where: "this.username == \"" + req.body['username'] + "\" && this.password == \"" + req.body['password'] + "\""
});

La méthode find()

2. L'opérateur $where

3. Explication de la condition JavaScript

La condition est divisée en plusieurs parties :

4. L'ordre des opérations

L'expression complète devient :

this.username == "" || true && this.password == "" || true

5. Effet de la condition

Last updated