CyberGlossary

Vulnerabilidades

Contaminación de prototipos

También conocido como: Contaminación de Object.prototype, Inyección de __proto__

Definición

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.

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

  • Enviar {"__proto__":{"isAdmin":true}} a un endpoint que hace merge JSON y ganar privilegios admin globales.
  • Contaminar el prototipo para alterar las opciones de render de plantillas y disparar RCE.

Términos relacionados