
RCE nell'estensione NPM per VSCode
Risolto il 10 febbraio 2021 in https://github.com/microsoft/vscode-npm-scripts/commit/cdd5e507564e0cc0f60bcccf184822be3fd73e07
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26700
Una vulnerabilità di esecuzione remota di codice nell'estensione VSCode eg2.vscode-npm-script
(testata sulla versione 0.3.13) fa sì che un file .vscode/settings.json malevolo in un progetto possa causare l'esecuzione remota di codice quando viene visualizzato un file chiamato package.json.
Questa vulnerabilità non rientrava in nessun programma attivo di bug bounty Microsoft, ma è stata segnalata e gestita da MSRC.
Senza un file .vscode/settings.json malevolo in un repository, visualizzando un file package.json, con l'estensione eg2.vscode-npm-script installata, verrà eseguito il comando npm ls --depth 0 --json.
Impostando la chiave npm.bin in un settings.json del progetto, ad esempio a ./payload.sh, visualizzando package.json verrà invece eseguito ./payload.sh ls --depth 0 --json dalla directory che contiene package.json.
Questa vulnerabilità infrange l'assunzione che il codice sorgente possa essere letto in sicurezza.
Un esempio di come questo potrebbe essere usato da un attaccante è:
package.jsonpayload.sh viene eseguitoHo visto due modi per mitigare un settings.json malevolo dell'area di lavoro di VSCode
Vietare che le impostazioni vengano impostate per area di lavoro. Questo è già usato da VSCode per git.path, terminal.integrated.shell.linux e alcune altre impostazioni.
Questo potrebbe rompere la compatibilità per alcuni utenti, ma ha un precedente.
Riferimento: https://vscode.readthedocs.io/en/latest/getstarted/settings/#settings-and-security
Se questa impostazione è impostata in un'area di lavoro, chiedere all'utente di confermare l'impostazione prima di eseguire il binario.
Questo non romperà la compatibilità esistente ed è la strada intrapresa dall'estensione ESLint a partire dalla versione 2.1.7.
eg2.vscode-npm-scriptlinux-poc come cartella in VSCodepackage.json per visualizzarlo/tmp/output.txt verrà creato per dimostrare l'esecuzioneeg2.vscode-npm-scriptwindows-poc come cartella in VSCodepackage.json per visualizzarlocalc.exe verrà apertoNota: non sono riuscito a usare un percorso relativo per il binario in Windows, tuttavia ciò potrebbe essere dovuto alla mia scarsa familiarità con Windows