`.vscode` 資料夾中的 `tasks.json` 設定檔可能被惡意利用,在使用者開啟專案時自動執行任意 Shell 指令,導致遠端程式碼執行 (RCE)。儘管 VS Code 設有 Workspace Trust 功能以限制此類風險,但許多開發者可能在不了解潛在威脅的情況下,無意識地信任了惡意程式碼庫。這項漏洞將 `.vscode` 為方便專案初始化的功能,轉變為執行惡意程式碼的途徑。
在今年一月的時候(2026/01)那時候大家應該還會熱衷用 VS Code 等相關的 fork 打開 repo 於是那時候就有爆出,有部分開發者在面試的時候被要求看代碼,結果被不起眼的 .vscode 資料夾給騙了

當時候看到這篇就覺得很神奇,到底是怎麼在 .vscode 裡面的資料夾定義馬上打開就可以實現的。後來才發現,.vscode 本來就是開發工具為了方便專案初始化、建置、測試而留下的東西,大致上就是 tasks.json 跟 settings.json 這兩個檔案

.vscode 原本是幹嘛的
.vscode 是 VS Code 放「工作區設定」的資料夾,然後可以定義很多東西
常見檔案包括這些:
settings.json:只套用在這個專案的 VS Code 設定extensions.json:建議其他開發者安裝哪些 extensionslaunch.json:Debug 設定,例如要怎麼啟動程式、傳哪些參數tasks.json:定義專案任務,例如 build、test、lint、啟動 dev server。
所以 .vscode 的設計目標其實很合理:團隊希望新成員 clone repo 之後,不用重新設定編譯器、測試指令、debug flow,就可以直接在 VS Code 裡按快捷鍵或選單完成常見開發流程
tasks.json 原本的用途
tasks.json 是 VS Code 的 Task Runner 設定檔。它的用途是把原本要在 terminal 手動輸入的指令包成 VS Code 任務
例如:
{ "version": "2.0.0", "tasks": [ { "label": "Run tests", "type": "shell", "command": "npm test", "group": "test", "problemMatcher": [] } ]}這個設定的意思是:VS Code 裡會出現一個叫 Run tests 的任務,執行時會在 shell 裡跑 npm test
為什麼 tasks 會變成 RCE
RCE 的關鍵是這幾個條件串在一起:
- GitHub repo 裡面有
.vscode資料夾,然後你 clone 下來並且 Trust tasks.json可以定義shell或process任務shell任務可以執行任意 shell commandrunOptions.runOn可以設定成folderOpen,讓任務在資料夾被打開時自動執行
Workspace Trust?
VS Code 其實知道這類功能有風險,所以有 Workspace Trust,當 workspace 處於 Restricted Mode 時,VS Code 會限制可能自動執行程式碼的功能,例如 tasks、debug、部分 workspace settings 和 extensions
也就是說,不信任的 repo 理論上不應該直接執行 tasks,但大家感覺都忽略了 .vscode 有可能會被自動執行,所以部分人都直接無腦點 Trust
DEMO
參考資料
poc : https://github.com/evilcos/vscode_tasks_command_execute_poc