
RCE в расширении NPM для VS Code
Исправлено 10 февраля 2021 года в https://github.com/microsoft/vscode-npm-scripts/commit/cdd5e507564e0cc0f60bcccf184822be3fd73e07
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26700
Уязвимость удаленного выполнения кода в расширении VSCode eg2.vscode-npm-script
(Протестировано на версии 0.3.13) означает, что вредоносный .vscode/settings.json в проекте может вызвать
удаленное выполнение кода при просмотре файла с именем package.json.
Эта уязвимость не подпадала ни под одну активную программу вознаграждений Microsoft за обнаружение ошибок, но была сообщена и обработана MSRC.
Без вредоносного файла .vscode/settings.json в репозитории, при просмотре файла package.json с установленным
расширением eg2.vscode-npm-script будет выполнена команда npm ls --depth 0 --json.
Установив ключ npm.bin в settings.json проекта, например, на ./payload.sh, просмотр package.json вместо этого
выполнит ./payload.sh ls --depth 0 --json из каталога, содержащего package.json.
Эта уязвимость нарушает предположение о том, что исходный код можно безопасно читать.
Пример того, как это может быть использовано злоумышленником:
package.jsonpayload.shЯ видел два способа смягчения вредоносного VSCode Workspace settings.json
Запретить установку настроек для каждой рабочей области. Это уже используется в VSCode для git.path, terminal.integrated.shell.linux и некоторых других настроек.
Это может нарушить совместимость для некоторых пользователей, но имеет прецедент.
Ссылка: https://vscode.readthedocs.io/en/latest/getstarted/settings/#settings-and-security
Если эта настройка установлена в рабочей области, предложить пользователю подтвердить настройку перед выполнением двоичного файла.
Это не нарушит существующую совместимость, и это путь, выбранный расширением ESLint начиная с версии 2.1.7.
eg2.vscode-npm-scriptlinux-poc как папку в VSCodepackage.json, чтобы просмотреть его/tmp/output.txt, чтобы продемонстрировать выполнениеeg2.vscode-npm-scriptwindows-poc как папку в VSCodepackage.json, чтобы просмотреть егоcalc.exeПримечание: я не смог использовать относительный путь для двоичного файла в Windows, однако это может быть связано с моим недостаточным знанием Windows