Labs de Prototype Pollution
Prototype Pollution
¿Qué es Prototype Pollution?
El Prototype Pollution es una vulnerabilidad de JavaScript en la que el atacante inyecta propiedades en Object.prototype a través de claves como __proto__ o constructor.prototype. Contamina todos los objetos del runtime y, con el gadget adecuado, escala a XSS en cliente o a RCE en Node.js.
¿Por qué practicar Prototype Pollution?
Es una clase moderna y poco entendida que afecta a librerías ultra-populares (lodash, jQuery, query parsers). Encadenada con un gadget, pasa de 'propiedad rara' a XSS o RCE real. Encontrarla requiere leer JS y entender el runtime, así que hay menos competencia y bounties de $1,000-$20,000.
¿Qué aprenderás con los labs de Prototype Pollution?
Aprenderás a detectar funciones de merge/clone/extend que copian recursivamente input del usuario, inyectar __proto__/constructor.prototype vía JSON o query string, confirmar la contaminación, y buscar gadgets explotables tanto en cliente (sinks DOM) como en servidor (child_process, template engines).
Tipos de Prototype Pollution que cubrimos
- Client-side
Polución en JS de navegador (query string, postMessage) que un gadget convierte en DOM XSS.
- Server-side (Node.js)
Polución en una API Node que, con gadget (spawn, require, render), escala a RCE.
- Vía query string parser
Parsers como qs interpretan a[__proto__][x]=y y contaminan el prototipo sin que envíes JSON.
¿Cómo encontrar y explotar Prototype Pollution?
Playbook práctico — del recon a la prueba de concepto.
- 1
Encontrar el merge recursivo
Busca en el JS funciones que copian objetos en profundidad (merge, extend, clone, defaultsDeep) alimentadas por input del usuario.
merge(target, JSON.parse(req.body)) · lodash.merge, $.extend(true, ...) - 2
Inyectar __proto__
Manda un payload con __proto__ o constructor.prototype para añadir una propiedad al prototipo global.
{"__proto__":{"polluted":"yes"}} - 3
Confirmar la contaminación
Comprueba que un objeto recién creado hereda tu propiedad. En cliente, desde consola; en servidor, por una respuesta que la refleje.
({}).polluted → "yes" (la polución funcionó) - 4
Inyectar vía query string
Si el backend usa qs/Express, contamina sin JSON usando notación de corchetes en la URL.
?__proto__[polluted]=yes · ?constructor[prototype][polluted]=yes - 5
Encadenar con un gadget
Busca un gadget que lea una propiedad heredada: en cliente puede activar un sink DOM (XSS); en Node, opciones de spawn/render para RCE.
Cliente: __proto__.src → XSS · Node: __proto__.shell + child_process → RCE
Aprende la teoría
Academy: Técnicas Avanzadas
Cargando labs...
Ver en catálogo completo →Preguntas frecuentes
¿Qué es el Prototype Pollution?
Es una vulnerabilidad de JavaScript en la que se inyectan propiedades en Object.prototype mediante claves como __proto__ o constructor.prototype. Como todos los objetos heredan del prototipo, la contaminación afecta a todo el runtime y puede escalar a XSS o RCE con el gadget adecuado.
¿Cómo se explota el Prototype Pollution?
Se envía un payload con __proto__ a una función que hace merge/clone recursivo del input (lodash.merge, $.extend). Tras contaminar el prototipo, se busca un gadget que lea esa propiedad heredada: en cliente activa un sink DOM (XSS), en Node opciones de spawn/render (RCE).
¿Cómo encontrar Prototype Pollution en bug bounty?
Lee el JavaScript en busca de merges profundos de objetos controlados por el usuario, e inyecta __proto__ vía JSON o query string (?__proto__[x]=y). Confirma con ({}).x y luego invierte tiempo en encontrar un gadget que convierta la polución en impacto.
¿Cómo prevenir el Prototype Pollution?
Rechaza claves __proto__/constructor/prototype al parsear, usa Object.create(null) o Map para datos sin prototipo, congela Object.prototype (Object.freeze), valida con esquemas estrictos y mantén actualizadas las librerías de merge/clone.
¿Por qué el Prototype Pollution suele necesitar un gadget?
Porque contaminar el prototipo por sí solo no hace nada visible: añade una propiedad heredada. El impacto llega cuando otro trozo de código lee esa propiedad sin esperarlo (un 'gadget') y la usa en un sink peligroso, transformando la polución en XSS o RCE.
Otras categorías relacionadas
hunters entrenando
labs de reportes reales
completaciones
en bounties practicados
Practica Prototype Pollution en labs reales
Cada lab de Prototype Pollution replica un reporte real de bug bounty que se pagó. Crea tu cuenta gratis, empieza por la Academy y pasa a los labs cuando quieras.
Sin tarjeta · Academy gratis · cancela cuando quieras