
RCE in der NPM-VSCode-Erweiterung
Behoben am 10. Februar 2021 in https://github.com/microsoft/vscode-npm-scripts/commit/cdd5e507564e0cc0f60bcccf184822be3fd73e07
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26700
Eine Schwachstelle zur Fernausführung von Code in der VSCode-Erweiterung eg2.vscode-npm-script (getestet mit Version 0.3.13) bedeutet, dass eine bösartige .vscode/settings.json in einem Projekt eine Fernausführung von Code verursachen kann, wenn eine Datei namens package.json angezeigt wird.
Diese Schwachstelle fiel unter kein aktives Microsoft Bug-Bounty-Programm, wurde jedoch an MSRC gemeldet und von diesem bearbeitet.
Ohne eine bösartige .vscode/settings.json-Datei in einem Repository wird beim Anzeigen einer package.json-Datei mit installierter Erweiterung eg2.vscode-npm-script der Befehl npm ls --depth 0 --json ausgeführt.
Durch Setzen des npm.bin-Schlüssels in der settings.json eines Projekts, z. B. auf ./payload.sh, wird beim Anzeigen der package.json stattdessen ./payload.sh ls --depth 0 --json aus dem Verzeichnis, das die package.json enthält, ausgeführt.
Diese Schwachstelle bricht die Annahme, dass Quellcode sicher gelesen werden kann.
package.json anpayload.sh wird ausgeführtIch habe zwei Möglichkeiten gesehen, bösartige VSCode-Arbeitsbereichs-settings.json zu entschärfen
Verbieten, dass die Einstellungen pro Arbeitsbereich festgelegt werden. Dies wird von VSCode bereits für git.path, terminal.integrated.shell.linux und einige andere Einstellungen verwendet.
Dies könnte die Kompatibilität für einige Benutzer beeinträchtigen, hat aber Präzedenzfall.
Referenz: https://vscode.readthedocs.io/en/latest/getstarted/settings/#settings-and-security
Wenn diese Einstellung in einem Arbeitsbereich festgelegt ist, fordern Sie den Benutzer auf, die Einstellung zu bestätigen, bevor die Binärdatei ausgeführt wird.
Dies wird die bestehende Kompatibilität nicht beeinträchtigen und ist der Weg, den die ESLint-Erweiterung ab Version 2.1.7 gewählt hat.
eg2.vscode-npm-scriptlinux-poc als Ordner in VSCodepackage.json, um sie anzuzeigen/tmp/output.txt wird erstellt, um die Ausführung zu demonstriereneg2.vscode-npm-scriptwindows-poc als Ordner in VSCodepackage.json, um sie anzuzeigencalc.exe wird geöffnetHinweis: Ich konnte keinen relativen Pfad für die Binärdatei unter Windows verwenden, was jedoch an meiner mangelnden Vertrautheit mit Windows liegen könnte.