🥡Prototype pollution
Description
La pollution de prototype est une vulnérabilité JavaScript qui permet à un attaquant d'ajouter des propriétés arbitraires aux prototypes d'objets globaux, qui peuvent ensuite être héritées par des objets définis par l'utilisateur.
Bien que la pollution prototype soit souvent inexploitable seule, elle permet à un attaquant de contrôler les propriétés d'objets qui seraient autrement inaccessibles. Si l'application gère ensuite une propriété contrôlée par un attaquant de manière non sécurisée, cela peut potentiellement être lié à d'autres vulnérabilités. En JavaScript côté client, cela conduit généralement à des DOM XSS.
Prérequis
Une source (URL, Entrée JSON, Message Web)
Sink (Une fonction Javascript ou un élément du DOM permettant une execution de code)
Un gadget exploitable (Une propriété passant par un sink sans filtration ou validation correcte)
Exemples d'exploitation
Côté client
Recherche de source
Automatique:
On peut utiliser l'extension de navigateur burp invader pour cela. Il suffit alors de se rendre dans l'extension, d'aller dans les paramètres et d'activer la fonction prototype pollution.
Si l'extension trouve des potentielles pollutions, on peut alors utiliser le bouton "Test" à côté des résultats pour que DOM invader propose un PoC.
Afin de vérifier le bon fonctionnement de ce PoC, on va alors se rendre dans la console du n'avigateur, créer un nouvel objet JavaScript (let myObject = {};
) puis confirmer que l'objet créé a bien hérité des propriété du PoC.
Manuel:
essayer de créer une propriété avec:
Dans url:
Dans JSON
Vérification dans console:
Recherche d'un gadget
DOM Invader permet également d'automatiser cette étape via le bouton "Scan for gadget" que l'on peut retrouver à côté du bouton "Test" dans les résultats.
Une fois le scan terminé, DOM Invader remontra alors tous les sink pouvant être accédé depuis la pollution de prototype.
Exploit
Finalement, si c'est possible, DOM Invader permet de créer un PoC d'exploitation afin de confirmer la vulnérabilité.
Bypass de filtre
Côté Serveur
Peut souvent entraîner un DoS.
Server-side prototype pollution scanner: https://portswigger.net/bappstore/c1d4bd60626d4178a54d36ee802cf7e8
DNS pingback (NodeJS)
Dernière mise à jour