
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á a .
Porque es de tipo , a todos los prototipos de se les añadirá una propiedad llamada ._.concat.constructor.prototype.donetrue_.concat.constructorFunctionFunctiondoneLa 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