
Originalmente de: https://github.com/Marynk/JavaScript-vulnerability-detection/blob/main/minimist%20PoC.zip
npm run hack
E você verá que a propriedade done de qualquer função é alterada para true.
A explicação da linha de comando node index.js --_.concat.constructor.prototype.done true:
-- é o sinal de hífen normalmente usado em argumentos de linha de comando._ é a chave interna do minimist: https://github.com/minimistjs/minimist/blob/v1.2.5/index.js#L37.concat.constructor.prototype.done true definirá _.concat.constructor.prototype.done como true.
Como _.concat.constructor é do tipo Function, uma propriedade chamada done será adicionada ao protótipo de todas as Function.A razão pela qual a cadeia de protótipos é tão longa é que, nas correções anteriores, o desenvolvedor bloqueou __proto__, Arrary.prototype, Object.prototype, Number.prototype e String.prototype. Portanto, temos que usar constructor, que tem a propriedade prototype e não está na lista negra.
Outro exemplo é:
npm run hack2
No entanto, nos dois exemplos acima, só podemos manipular valores, mas não a definição de funções.
Na correção para CVE-2020-7598 (1.2.2), e na versão 1.2.3, o desenvolvedor já havia corrigido algumas vulnerabilidades ao verificar __proto__, Arrary.prototype, Object.prototype, Number.prototype, String.prototype,
mas se esqueceu de verificar Function.prototye. É por isso que esta exploração só pode afetar a propriedade de Function.
Para a correção deste CVE, o desenvolvedor verificou tanto Function.prototype quanto constructor: https://github.com/minimistjs/minimist/blob/v1.2.6/index.js#L73