Contaminación de prototipos
¿Qué es Contaminación de prototipos?
Contaminación de prototiposVulnerabilidad de JavaScript en la que una entrada no confiable modifica Object.prototype, inyectando propiedades en todos los objetos y alterando el comportamiento o llegando a RCE.
La contaminación de prototipos abusa de la cadena de prototipos de JavaScript: al establecer claves como proto, constructor.prototype o prototype durante operaciones de merge/clone/assign, el atacante muta Object.prototype y todos los objetos heredan esas propiedades. Suele aparecer en utilidades de merge recursivo, deep clone, parsers de query string o motores de plantillas que reciben JSON controlado por el usuario. Las consecuencias van de DoS y bypass de autenticación a RCE cuando las propiedades contaminadas influyen en comprobaciones de seguridad (isAdmin, sandbox, opciones de render). CVE relevantes: lodash CVE-2019-10744 y muchas otras en librerías Node.js. Mitigaciones: rechazar claves proto/constructor, usar Map u Object.create(null) para datos no confiables, congelar el prototipo y adoptar librerías más seguras.
● Ejemplos
- 01
Enviar {"__proto__":{"isAdmin":true}} a un endpoint que hace merge JSON y ganar privilegios admin globales.
- 02
Contaminar el prototipo para alterar las opciones de render de plantillas y disparar RCE.
● Preguntas frecuentes
¿Qué es Contaminación de prototipos?
Vulnerabilidad de JavaScript en la que una entrada no confiable modifica Object.prototype, inyectando propiedades en todos los objetos y alterando el comportamiento o llegando a RCE. Pertenece a la categoría de Vulnerabilidades en ciberseguridad.
¿Qué significa Contaminación de prototipos?
Vulnerabilidad de JavaScript en la que una entrada no confiable modifica Object.prototype, inyectando propiedades en todos los objetos y alterando el comportamiento o llegando a RCE.
¿Cómo defenderse de Contaminación de prototipos?
Las defensas contra Contaminación de prototipos combinan habitualmente controles técnicos y prácticas operativas, como se detalla en la definición.
¿Cuáles son otros nombres para Contaminación de prototipos?
Nombres alternativos comunes: Contaminación de Object.prototype, Inyección de __proto__.