
Preuve de concept pour CVE-2021-26700 : exécution de code à distance dans l'extension VSCode npm-script via un settings.json d'espace de travail malveillant, avec des conseils détaillés d'exploitation et de remédiation.
Corrigé le 10 février 2021 dans https://github.com/microsoft/vscode-npm-scripts/commit/cdd5e507564e0cc0f60bcccf184822be3fd73e07
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26700
La vulnérabilité d'exécution de code à distance dans l'extension VSCode eg2.vscode-npm-script
(testée sur la version 0.3.13) signifie qu'un fichier .vscode/settings.json malveillant dans un projet peut provoquer
une exécution de code à distance lorsqu'un fichier nommé package.json est consulté.
Cette vulnérabilité n'était couverte par aucun programme actif de bug bounty de Microsoft, mais a été signalée et traitée par le MSRC.
Sans fichier .vscode/settings.json malveillant dans un dépôt, lors de la consultation d'un fichier package.json, avec l'extension
installée, la commande sera exécutée.
eg2.vscode-npm-scriptnpm ls --depth 0 --jsonEn définissant la clé npm.bin dans un fichier settings.json d'un projet, par exemple à ./payload.sh, la consultation du package.json exécutera
à la place ./payload.sh ls --depth 0 --json depuis le répertoire contenant le package.json.
Cette vulnérabilité brise l'hypothèse selon laquelle le code source peut être consulté en toute sécurité.
package.jsonpayload.sh est exécutéJ'ai vu deux façons de limiter les fichiers settings.json d'espace de travail VSCode malveillants
Interdire que ces paramètres soient définis par espace de travail. C'est déjà utilisé par VSCode pour git.path, terminal.integrated.shell.linux et quelques autres paramètres.
Cela pourrait rompre la compatibilité pour certains utilisateurs, mais a un précédent.
Référence: https://vscode.readthedocs.io/en/latest/getstarted/settings/#settings-and-security
Si ce paramètre est défini dans un espace de travail, demander à l'utilisateur de confirmer le paramètre avant d'exécuter le binaire.
Cela ne rompt pas la compatibilité existante, et c'est la voie prise par l'extension ESLint à partir de la version 2.1.7.
eg2.vscode-npm-scriptlinux-poc comme dossier dans VSCodepackage.json pour le consulter/tmp/output.txt sera créé pour démontrer l'exécutioneg2.vscode-npm-scriptwindows-poc comme dossier dans VSCodepackage.json pour le consultercalc.exe sera ouvertNote : Je n'ai pas réussi à utiliser un chemin relatif pour le binaire sous Windows, mais cela peut être dû à mon manque de familiarité avec Windows.