JavaScript · Avançado · Inglês · Técnico
prototype pollution
Vulnerabilidade em que a entrada do usuário altera Object.prototype, via chaves como __proto__ em merges recursivos. Todos os objetos passam a herdar propriedades injetadas.
Onde usar
Aparece em code review de funções de merge, clone profundo e leitura de JSON. Pode virar bypass de autenticação, por exemplo quando isAdmin passa a existir em todo objeto.
Em código
const txt = '{"__proto__":{"x":1}}';
const ent = JSON.parse(txt);
const alvo = {};
for (const k in ent) {
Object.assign(alvo[k], ent[k]);
}
console.log({}.x); // 1Exemplos
That merge function is open to prototype pollution via the __proto__ key.
Essa função de merge é vulnerável a prototype pollution pela chave __proto__.
Block __proto__ and constructor before copying user input.
Bloqueie __proto__ e constructor antes de copiar a entrada do usuário.
Cuidado
Copiar chaves de entrada externa sem bloquear __proto__, constructor e prototype.
Sinônimos
poluição de protótipo