
Initialement issu de : https://github.com/Marynk/JavaScript-vulnerability-detection/blob/main/minimist%20PoC.zip
npm run hack
Et vous verrez que la propriété done de n'importe quelle fonction est modifiée en true.
L'explication de la ligne de commande node index.js --_.concat.constructor.prototype.done true :
-- est le tiret normalement utilisé dans les arguments de ligne de commande._ est la clé intégrée de minimist : https://github.com/minimistjs/minimist/blob/v1.2.5/index.js#L37.concat.constructor.prototype.done true définira set _.concat.constructor.prototype.done sur true.
Comme _.concat.constructor est de type Function, le prototype de toutes les Function verra une propriété appelée done ajoutée.La raison pour laquelle la chaîne de prototypes est si longue est que, dans les correctifs précédents, le développeur a interdit __proto__, Arrary.prototype, Object.prototype, Number.prototype et String.prototype. Nous devons donc utiliser constructor, qui possède une propriété prototype et qui n'est pas sur liste noire.
Un autre exemple est :
npm run hack2
Cependant, dans les deux exemples ci-dessus, nous ne pouvons que modifier les valeurs, pas la définition des fonctions.
Dans le correctif de CVE-2020-7598 (1.2.2), et dans 1.2.3, le développeur avait déjà corrigé certaines vulnérabilités en vérifiant __proto__, Arrary.prototype, Object.prototype, Number.prototype, String.prototype,
mais il a oublié de vérifier Function.prototye. C'est pourquoi cette exploitation ne peut affecter que la propriété de Function.
Pour le correctif de cette CVE, le développeur a vérifié Function.prototype ainsi que constructor : https://github.com/minimistjs/minimist/blob/v1.2.6/index.js#L73