Express Prototype Pollution Gadgets
Servir des réponses XSS
Pour plus de détails consultez la recherche originale
Changer le type de contenu JSON en HTML
Dans une application Express utilisant une réponse de type de contenu JSON et reflétant un JSON:
Dans ces cas, XSS n'est généralement pas possible avec un type de contenu JSON. Cependant, avec la pollution de prototype, nous pouvons confondre Express pour servir une réponse HTML. Cette vulnérabilité repose sur l'application utilisant res.send(obj)
et utilisant le body parser avec le type de contenu application/json.
En polluant les propriétés body
et _body
, il est possible de provoquer Express pour servir le type de contenu HTML et de refléter la propriété _body
, ce qui entraîne un XSS stocké.
Rendu UTF7
Il est possible de faire en sorte qu'express rende le contenu UTF-7 avec:
Techniques de numérisation sécurisées
Espaces JSON
Le PP suivant fera en sorte que les attributs à l'intérieur d'un JSON aient un espace supplémentaire qui ne cassera pas la fonctionnalité :
Ensuite, un JSON réfléchi ressemblera à :
En-têtes Exposés
Le gadget PP suivant fera en sorte que le serveur renvoie l'en-tête HTTP : Access-Control-Expose_headers: foo
Il est nécessaire que le module CORS soit installé
Méthode OPTIONS
Avec la charge utile suivante, il est possible de cacher une méthode d'une réponse OPTIONS:
Statut
Il est possible de changer le code de statut retourné en utilisant la charge utile PP suivante :
Erreur
Lorsque vous attribuez à un prototype une valeur primitive telle qu'une chaîne de caractères, cela produit une opération no-op car le prototype doit être un objet. Si vous essayez d'attribuer un objet prototype à Object.prototype
lui-même, cela va lever une exception. Nous pouvons utiliser ces deux comportements pour détecter si la pollution du prototype a réussi :
Valeur Réfléchie
Lorsqu'une application inclut un objet dans sa réponse, la création d'un attribut avec un nom inhabituel aux côtés de __proto__
peut être instructive. En particulier, si seul l'attribut inhabituel est renvoyé dans la réponse, cela pourrait indiquer la vulnérabilité de l'application :
De plus, dans les scénarios où une bibliothèque comme Lodash est utilisée, définir une propriété à la fois via la pollution de prototype (PP) et directement à l'intérieur de l'objet offre une autre approche diagnostique. Si une telle propriété est omise de la réponse, cela suggère que Lodash vérifie l'existence de la propriété dans l'objet cible avant la fusion :
Divers
Autoriser les points
Il existe une option dans Express qui vous permet de créer des objets à partir des paramètres de la chaîne de requête. Vous pourriez certainement l'utiliser dans une chaîne de bugs pour exploiter une vulnérabilité de pollution de prototype.
?foo.bar=baz
crée un objet dans Node.
Références
Last updated