ExpertiDict

JavaScript · Avançado · Inglês · Técnico

prototype pollution

/ˈpɹoʊtətaɪp pəˈluʃən/substantivo

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); // 1

Exemplos

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

Veja também

Todos os termos de JavaScript