
CVE-2021-26700の概念実証:悪意のあるワークスペースsettings.jsonを介したVSCode npm-script拡張機能のリモートコード実行。詳細な悪用と修復ガイダンス付き。
2021 年 2 月 10 日に修正: 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 というファイルを表示したときにリモートコード実行が引き起こされる可能性があります。
この脆弱性は、マイクロソフトのアクティブなバグ報奨金プログラムの対象ではありませんでしたが、MSRC に報告され、対応されました。
リポジトリ内に悪意のある .vscode/settings.json ファイルがない場合、eg2.vscode-npm-script 拡張機能をインストールした状態で package.json ファイルを表示すると、コマンド npm ls --depth 0 --json が実行されます。
プロジェクトの settings.json の npm.bin キーを、たとえば ./payload.sh に設定すると、package.json を表示したときに、package.json があるディレクトリから ./payload.sh ls --depth 0 --json が代わりに実行されます。
この脆弱性は、ソースコードを安全に読めるという前提を覆すものです。
攻撃者による悪用方法の例は次のとおりです。
package.json を表示しますpayload.sh が実行されます悪意のある VSCode ワークスペースの settings.json を緩和する方法として、次の 2 つがあります。
ワークスペースごとに設定されることを禁止します。これはすでに 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-script の脆弱性のあるバージョン (0.3.13 以前) をインストールしますlinux-poc ディレクトリをフォルダーとして開きますpackage.json ファイルをクリックして表示します/tmp/output.txt ファイルが作成されますeg2.vscode-npm-script の脆弱性のあるバージョン (0.3.13 以前) をインストールしますwindows-poc ディレクトリをフォルダーとして開きますpackage.json ファイルをクリックして表示しますcalc.exe が開かれます注: Windows ではバイナリに相対パスを使用できませんでしたが、これは Windows に精通していないためかもしれません。