Prototype Pollution
hackingDé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
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h