Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Prototype Pollution

hacking

Définition

La Prototype Pollution est une vulnérabilité spécifique à JavaScript qui permet à un attaquant d'injecter ou de modifier des propriétés sur le prototype global Object.prototype, via des clés spéciales comme __proto__, constructor.prototype ou prototype dans des structures de données manipulées sans validation, typiquement lors d'un merge, d'un clone profond ou d'un parsing JSON récursif. Une fois le prototype pollué, toutes les instances d'objets héritant de ce prototype se voient attribuer la propriété injectée, ce qui peut altérer la logique applicative, contourner des vérifications d'autorisation, provoquer un déni de service, ou dans les cas les plus graves conduire à une exécution de code à distance (RCE) côté serveur Node.js, notamment lorsque la propriété polluée est ensuite utilisée dans un template engine ou un appel de commande. Des bibliothèques populaires comme lodash (CVE-2019-10744, fonction merge/defaultsDeep) ou jQuery ont été historiquement vulnérables avant correction. La technique s'inscrit dans le tactique MITRE ATT&CK d'exploitation d'application. La remédiation repose sur l'usage de Object.freeze(Object.prototype), la validation stricte des clés d'entrée (rejet de __proto__, constructor, prototype), l'utilisation de Map plutôt que d'objets littéraux pour stocker des données non fiables, et la mise à jour des dépendances npm concernées identifiées via des scans SCA.

Description

Le Prototype Pollution modifie le prototype global Object en JavaScript via des propriétés spéciales comme __proto__, constructor.prototype ou Object.prototype. Cette manipulation affecte tous les objets héritant de Object.prototype, causant des comportements inattendus ou une RCE dans Node.js.

Exploitation

Un payload comme {"__proto__": {"admin": true}} dans une fonction de fusion d'objets propage la propriété admin à tous les objets. Dans des contextes Node.js, des gadgets spécifiques permettent d'escalader vers une exécution de code arbitraire.

Défense

  • Utiliser Object.create(null) pour créer des objets sans prototype lors du traitement de données non fiables
  • Valider les clés des objets et rejeter __proto__, constructor et prototype comme clés valides
  • Utiliser des bibliothèques de fusion d'objets récentes qui corrigent ce vecteur d'attaque

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis