Le JavaScript côté serveur exécute des valeurs atteignables par l'attaquant dans Node.js, et deux classes de failles comptent ici. L'une est l'évaluation directe, où une entrée atteint une construction qui compile et exécute du JavaScript. L'autre est la prototype pollution, qui n'évalue jamais directement le code de l'attaquant mais corrompt l'Object.prototype partagé de sorte que les propriétés que l'application lit plus tard prennent les valeurs choisies par l'attaquant. La seconde est l'exposition côté serveur la plus subtile et la plus courante, parce que la requête de pollution et le point où le dommage se réalise sont généralement éloignés l'un de l'autre dans le code.
- Prototype pollution couvre le cas Node côté serveur : les puits de deep-merge et d'assignation récursive, les payloads de pollution
__proto__etconstructor.prototype, et l'escalade des valeurs par défaut empoisonnées vers le contournement d'autorisation et l'exécution de commande pilotée par gadgets.
La prototype pollution côté navigateur dans le DOM partage la cause racine mais a une surface de puits et un jeu de gadgets différents, et est traitée séparément.
Outils#
- Burp Suite : Repeater pour envoyer du JSON de pollution et sonder les gadgets en aval.
- Server-Side Prototype Pollution Scanner : extension Burp de PortSwigger détectant la pollution côté serveur.