625 words
3 minutes
關於 .vscode 的資料夾 RCE 的筆記
AI 摘要

`.vscode` 資料夾中的 `tasks.json` 設定檔可能被惡意利用,在使用者開啟專案時自動執行任意 Shell 指令,導致遠端程式碼執行 (RCE)。儘管 VS Code 設有 Workspace Trust 功能以限制此類風險,但許多開發者可能在不了解潛在威脅的情況下,無意識地信任了惡意程式碼庫。這項漏洞將 `.vscode` 為方便專案初始化的功能,轉變為執行惡意程式碼的途徑。

在今年一月的時候(2026/01)那時候大家應該還會熱衷用 VS Code 等相關的 fork 打開 repo 於是那時候就有爆出,有部分開發者在面試的時候被要求看代碼,結果被不起眼的 .vscode 資料夾給騙了

CleanShot 2026-05-28 at 15.01.14@2x

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

CleanShot 2026-05-28 at 15.03.33@2x

.vscode 原本是幹嘛的#

.vscode 是 VS Code 放「工作區設定」的資料夾,然後可以定義很多東西

常見檔案包括這些:

  • settings.json:只套用在這個專案的 VS Code 設定
  • extensions.json:建議其他開發者安裝哪些 extensions
  • launch.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 的關鍵是這幾個條件串在一起:

  1. GitHub repo 裡面有 .vscode 資料夾,然後你 clone 下來並且 Trust
  2. tasks.json 可以定義 shellprocess 任務
  3. shell 任務可以執行任意 shell command
  4. runOptions.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

原文:https://www.threads.com/@haocherhong/post/DTPM7njkY-T

關於 .vscode 的資料夾 RCE 的筆記
https://blog.ichika.tw/posts/vscode-folder-rce/
Author
Eric / e0pwr
Published at
2026-05-28
License
CC BY-NC-SA 4.0