
Originariamente da: https://github.com/Marynk/JavaScript-vulnerability-detection/blob/main/minimist%20PoC.zip
npm run hack
E vedrai che la proprietà done di qualsiasi funzione viene cambiata in true.
La spiegazione del comando node index.js --_.concat.constructor.prototype.done true:
-- è il segno di trattino normalmente usato negli argomenti della riga di comando._ è la chiave incorporata in minimist: https://github.com/minimistjs/minimist/blob/v1.2.5/index.js#L37.concat.constructor.prototype.done true imposterà _.concat.constructor.prototype.done a true.
Poiché _.concat.constructor è di tipo Function, a tutti i prototipi di Function verrà aggiunta una proprietà chiamata done.Il motivo per cui la catena dei prototipi è così lunga è che nelle correzioni precedenti lo sviluppatore ha bandito __proto__, Arrary.prototype, Object.prototype, Number.prototype e String.prototype. Quindi dobbiamo usare constructor, che ha una proprietà prototype e non è nella lista nera.
Un altro esempio è:
npm run hack2
Tuttavia, nei due esempi precedenti, possiamo solo alterare i valori ma non le definizioni delle funzioni.
Nella correzione per CVE-2020-7598 (1.2.2), e nella 1.2.3, lo sviluppatore aveva già risolto alcune vulnerabilità controllando __proto__, Arrary.prototype, Object.prototype, Number.prototype, String.prototype,
ma si è dimenticato di controllare Function.prototye. Questo è il motivo per cui questo exploit può colpire solo la proprietà di Function.
Per la correzione di questa CVE, lo sviluppatore ha controllato Function.prototype oltre a constructor: https://github.com/minimistjs/minimist/blob/v1.2.6/index.js#L73