
Prueba de concepto para CVE-2021-44906 que demuestra contaminación de prototipos en minimist a través de bypass de Function.prototype, con ejemplos ejecutables y análisis técnico detallado de la cadena de explotación.
Originalmente de: https://github.com/Marynk/JavaScript-vulnerability-detection/blob/main/minimist%20PoC.zip
npm run hack
Y verás que la propiedad done de cualquier función se cambia a true.
La explicación de la línea de comando node index.js --_.concat.constructor.prototype.done true:
-- es el guion normalmente usado en los argumentos de línea de comandos._ es la clave incorporada en minimist: https://github.com/minimistjs/minimist/blob/v1.2.5/index.js#L37.concat.constructor.prototype.done true establecerá _.concat.constructor.prototype.done a true.
Porque _.concat.constructor es de tipo Function, a todos los prototipos de Function se les añadirá una propiedad llamada done.La razón por la que la cadena del prototipo es tan larga es que en las correcciones anteriores, el desarrollador prohibió __proto__, Array.prototype, Object.prototype, Number.prototype y String.prototype. Por lo tanto, tuvimos que usar constructor que tiene una propiedad de prototipo y que no está en la lista negra.
Otro ejemplo es:
npm run hack2
Sin embargo, en los dos ejemplos anteriores, solo podemos manipular valores pero no la definición de funciones.
En la corrección para CVE-2020-7598 (1.2.2), y en 1.2.3 el desarrollador ya corrigió algunas vulnerabilidades comprobando __proto__, Array.prototype, Object.prototype, Number.prototype, String.prototype,
pero olvidaron comprobar Function.prototype. Es por esto que este exploit solo puede afectar la propiedad de Function.
Para la corrección de este CVE, el desarrollador comprobó Function.prototype así como constructor: https://github.com/minimistjs/minimist/blob/v1.2.6/index.js#L73