TL;DR
VSCode のグローバル設定ファイルに "extensions.allowed"
を追加します。
"extensions.allowed"
が設定されている場合、VSCode は指定外の拡張機能を問答無用で無効 or インストール拒否するようになります。
設定例
"extensions.allowed": {
"davidanson.vscode-markdownlint": ["0.60.0"],
"ms-python.black-formatter": ["2025.2.0"],
"ms-python.debugpy": ["2025.10.0"],
"ms-python.isort": ["2025.0.0"],
"ms-python.python": ["2025.12.0"],
"ms-python.vscode-pylance": ["2025.7.1"],
"ms-python.vscode-python-envs": ["1.2.0"]
}
なんで extensions.allowed
を設定する必要があるの?
拡張機能の自動更新を無効化 ( "extensions.autoUpdate": false
) したので安心という人をちらほら見かけますが、そうとはいえません。この設定は VSCode が 拡張機能を更新する処理を行わないというだけのものだからです。
ユーザが手動で更新することはもちろん、Shai-Hulud のような攻撃プログラムが更新したり不正な拡張機能をインストールすることを防ぐことはできない設定なのです。
"extensions.allowed"
を設定するとどうなるの?
指定された拡張機能の指定されたバージョンを除いてインストールおよび実行できなくなります。インストールしようとした場合は拒否されます。
ファイルを強引に置き換える・書き換えるなどの方法で指定されたバージョンとは違うものにされたり、指定されていない拡張機能が突っ込まれた場合は、その拡張機能が問答無用で無効化されます。
どうやって設定するの?
VSCode のグローバル設定ファイルに "extensions.allowed"
を追加します。
OS ごとのグローバル設定ファイルは下記の通り
- Windows の場合
%APPDATA%\Code\User\settings.json
- Linux の場合
${HOME}/.config/Code/User/settings.json
設定前のファイルが下記の場合
{
"editor.renderWhitespace": "boundary",
"editor.wordWrap": "on",
"editor.codeLens": true,
"editor.folding": true,
"editor.fontFamily": "'Intel One Mono', 'Zx Proto', 'Noto Sans Mono', monospace, 'Droid Sans Fallback'",
"editor.fontLigatures": false,
"editor.fontSize": 14,
"editor.inlineSuggest.enabled": true,
"editor.matchBrackets": "always",
"editor.minimap.showSlider": "always",
"explorer.fileNesting.enabled": true,
"files.eol": "\n",
"window.restoreFullscreen": false,
"window.restoreWindows": "none",
"workbench.editor.enablePreview": false,
"workbench.tree.indent": 24,
"workbench.tree.renderIndentGuides": "always",
"workbench.colorTheme": "Default Dark Modern",
"aws.suppressPrompts": {
"regionAddAutomatically": true
},
"firedbg.showWelcome": false,
"workbench.startupEditor": "none",
"files.saveConflictResolution": "overwriteFileOnDisk",
"github.copilot.editor.enableAutoCompletions": true,
"github.copilot.nextEditSuggestions.enabled": true,
"diffEditor.hideUnchangedRegions.enabled": true,
"remote.defaultExtensionsIfInstalledLocally": [
"GitHub.copilot",
"GitHub.copilot-chat",
"GitHub.vscode-pull-request-github"
],
"python.defaultInterpreterPath": "/opt/python-3.13",
}
わたしが使用している VSCode 拡張機能を "extensions.allowed" に指定する settings.json の変更は下記のようになりました
--- settings.json.orig 2025-09-19 17:00:19.242401486 +0900
+++ settings.json 2025-09-19 16:48:59.935165856 +0900
@@ -32,5 +32,57 @@
"GitHub.copilot-chat",
"GitHub.vscode-pull-request-github"
],
- "python.defaultInterpreterPath": "/opt/python-3.13"
+ "python.defaultInterpreterPath": "/opt/python-3.13",
+ "extensions.allowed": {
+ "amazonwebservices.amazon-q-vscode": ["1.94.0"],
+ "amazonwebservices.aws-toolkit-vscode": ["3.74.0"],
+ "davidanson.vscode-markdownlint": ["0.60.0"],
+ "docker.docker": ["0.16.0"],
+ "george-alisson.html-preview-vscode": ["0.2.5"],
+ "github.copilot": ["1.372.0"],
+ "github.copilot-chat": ["0.31.0"],
+ "github.vscode-github-actions": ["0.27.2"],
+ "gitlab.gitlab-workflow": ["6.43.2"],
+ "golang.go": ["0.50.0"],
+ "google.geminicodeassist": ["2.49.0"],
+ "googlecloudtools.cloudcode": ["2.36.0"],
+ "hashicorp.terraform": ["2.36.3"],
+ "maelvalais.autoconf": ["0.2.0"],
+ "modular-mojotools.vscode-mojo": ["25.5.0"],
+ "ms-azuretools.vscode-containers": ["2.1.0"],
+ "ms-azuretools.vscode-docker": ["2.0.0"],
+ "ms-playwright.playwright": ["1.1.15"],
+ "ms-python.black-formatter": ["2025.2.0"],
+ "ms-python.debugpy": ["2025.10.0"],
+ "ms-python.isort": ["2025.0.0"],
+ "ms-python.python": ["2025.14.0"],
+ "ms-python.vscode-pylance": ["2025.8.1"],
+ "ms-python.vscode-python-envs": ["1.8.0"],
+ "ms-toolsai.jupyter": ["2025.8.0"],
+ "ms-toolsai.jupyter-keymap": ["1.1.2"],
+ "ms-toolsai.jupyter-renderers": ["1.3.0"],
+ "ms-toolsai.vscode-jupyter-cell-tags": ["0.1.9"],
+ "ms-toolsai.vscode-jupyter-slideshow": ["0.1.6"],
+ "ms-vscode-remote.remote-containers": ["0.427.0"],
+ "ms-vscode-remote.remote-ssh": ["0.120.0"],
+ "ms-vscode-remote.remote-ssh-edit": ["0.87.0"],
+ "ms-vscode.cmake-tools": ["1.21.36"],
+ "ms-vscode.cpptools": ["1.26.5"],
+ "ms-vscode.cpptools-extension-pack": ["1.3.1"],
+ "ms-vscode.cpptools-themes": ["2.0.0"],
+ "ms-vscode.live-server": ["0.4.16"],
+ "ms-vscode.makefile-tools": ["0.12.17"],
+ "ms-vscode.remote-explorer": ["0.5.0"],
+ "ms-vscode.vscode-typescript-next": ["6.0.20250916"],
+ "ms-vsliveshare.vsliveshare": ["1.0.5959"],
+ "ritwickdey.liveserver": ["5.7.9"],
+ "rust-lang.rust-analyzer": ["0.3.2593"],
+ "seaql.firedbg-rust": ["0.1.14"],
+ "tamasfe.even-better-toml": ["0.21.2"],
+ "twxs.cmake": ["0.0.17"],
+ "unifiedjs.vscode-mdx": ["1.8.17"],
+ "visualstudioexptteam.intellicode-api-usage-examples": ["0.2.9"],
+ "visualstudioexptteam.vscodeintellicode": ["1.3.2"],
+ "yzane.markdown-pdf": ["1.5.0"]
+ }
}
Linux ユーザの場合は settings.json ファイルの編集が終わったら所有者と permission を変更し、権限昇格の脆弱性を付いた別の攻撃を受けない限りは変更されないようにしましょう
sudo chown root:root ${HOME}/.config/Code/User/settings.json
sudo chmod 644 ${HOME}/.config/Code/User/settings.json
拡張機能の UID とバージョン情報を調べるのが面倒
簡単にリストアップする方法があります。
こちら をご覧ください。
Top comments (0)