CyberGlossary

Vulnérabilités

Pollution de prototype

Aussi appelé: Pollution d'Object.prototype, Injection __proto__

Définition

Vulnérabilité JavaScript où une entrée non fiable modifie Object.prototype, injectant des propriétés dans tous les objets et altérant le comportement de l'application, voire menant à un RCE.

La pollution de prototype exploite la chaîne de prototypes de JavaScript : en posant des clés comme __proto__, constructor.prototype ou prototype lors d'opérations merge/clone/assign, un attaquant mute Object.prototype et tous les objets héritent de ces propriétés. Elle se trouve souvent dans des utilitaires de merge récursifs, des fonctions de deep clone, des parseurs de query string ou des moteurs de templates qui acceptent du JSON contrôlé par l'utilisateur. Les conséquences vont du déni de service au contournement d'authentification, jusqu'au RCE quand les propriétés polluées influencent des décisions de sécurité (isAdmin, sandbox, options de rendu). CVE marquants : lodash CVE-2019-10744 et de nombreux Node.js. Mitigations : rejeter les clés __proto__/constructor, utiliser Map ou Object.create(null) pour les données non fiables, geler le prototype, adopter des bibliothèques sûres.

Exemples

  • Envoyer {"__proto__":{"isAdmin":true}} à un endpoint qui merge du JSON et devenir admin partout.
  • Polluer le prototype pour altérer des options de rendu de template et déclencher un RCE.

Termes liés