
Prova de conceito para CVE-2021-26700: execução remota de código na extensão npm-script do VSCode por meio de um settings.json malicioso no workspace, com orientação detalhada de exploração e remediação.
Corrigido em 10 de fevereiro de 2021 em https://github.com/microsoft/vscode-npm-scripts/commit/cdd5e507564e0cc0f60bcccf184822be3fd73e07
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26700
Vulnerabilidade de execução remota de código na extensão do VSCode eg2.vscode-npm-script (testada na versão 0.3.13) significa que um .vscode/settings.json malicioso em um projeto pode causar execução remota de código quando um arquivo chamado package.json é visualizado.
Esta vulnerabilidade não se enquadrava em nenhum programa ativo de recompensa por bugs da Microsoft, mas foi reportada e tratada pela MSRC.
Sem um arquivo .vscode/settings.json malicioso em um repositório, ao visualizar um arquivo package.json, com a extensão instalada, o comando será executado.
eg2.vscode-npm-scriptnpm ls --depth 0 --jsonAo definir a chave npm.bin no settings.json de um projeto, por exemplo, para ./payload.sh, visualizar o package.json executará ./payload.sh ls --depth 0 --json a partir do diretório que contém o package.json.
Esta vulnerabilidade quebra a suposição de que o código-fonte pode ser lido com segurança.
Um exemplo de como isso poderia ser usado por um atacante é:
package.jsonpayload.sh é executadoVi duas formas de mitigar settings.json malicioso do Workspace do VSCode
Proibir que as configurações sejam definidas por workspace. Isso já é usado pelo VSCode para git.path, terminal.integrated.shell.linux e algumas outras configurações.
Isso pode quebrar a compatibilidade para alguns usuários, mas tem precedentes.
Referência: https://vscode.readthedocs.io/en/latest/getstarted/settings/#settings-and-security
Se essa configuração estiver definida em um workspace, solicite ao usuário que confirme a configuração antes de executar o binário.
Isso não quebrará a compatibilidade existente e é o caminho adotado pela Extensão ESLint a partir da versão 2.1.7.
eg2.vscode-npm-script do VSCodelinux-poc como uma pasta no VSCodepackage.json para visualizá-lo/tmp/output.txt será criado para demonstrar a execuçãoeg2.vscode-npm-script do VSCodewindows-poc como uma pasta no VSCodepackage.json para visualizá-localc.exe será abertoNota: Não consegui usar um caminho relativo para o binário no Windows, no entanto isso pode ser devido à minha falta de familiaridade com o Windows