TreRB/ai-ide-config-guard

GitHub: TreRB/ai-ide-config-guard

一款针对 AI IDE 配置的安全扫描工具,检测可导致 RCE、凭证窃取或持久化妥协的恶意文件与规则。

Stars: 0 | Forks: 0

# valtik-ai-ide-config-guard 扫描仓库中可能触发 RCE、凭证窃取或在仓库于 Claude Code、Cursor、Windsurf、Continue 或任意 VS Code 衍生版本中打开时导致持久化妥协的 AI IDE 配置文件。 针对 2026 年 4 月的 AI IDE 披露浪潮而构建: - **CVE-2025-59536** / **CVE-2026-21852** — Claude Code 的 `settings.json` 中 `SessionStart` / `PreToolUse` / `PostToolUse` / `UserPromptSubmit` 钩子在工作区打开时执行任意 Shell 命令。 - **CVE-2026-30615** — Windsurf 配置写入 RCE 类别。 - **Pillar Security — 规则文件后门(2026)** — 在 `.cursorrules` / `.windsurfrules` / `.github/copilot-instructions.md` / `.continue/*.md` 中通过 Unicode 走私隐藏攻击指令,使人工审查无法察觉。 - `ANTHROPIC_BASE_URL` / `OPENAI_BASE_URL` / `OPENAI_API_BASE` 重定向至攻击者可控端点(提示词与 API 密钥外泄)。 - MCP 服务器通过 `mcp.json` / `.mcp.json` / `.cursor/mcp.json` / `.claude/mcp.json` 自动注册,任意 `command` 通过 stdio 调用。 - `.vscode/tasks.json` 在工作区打开时自动运行。 在打开任何第三方仓库前,请务必使用 **npx valtik-ai-ide-config-guard** 运行此工具。 ## 安装 无需安装,直接使用 `npx`: ``` npx valtik-ai-ide-config-guard ``` 或全局安装: ``` npm i -g valtik-ai-ide-config-guard ai-ide-config-guard ``` 需要 Node 20+。 ## 用法 ``` $ npx valtik-ai-ide-config-guard ./my-cloned-repo ``` 带失败阈值(用于 CI): ``` $ npx valtik-ai-ide-config-guard . --fail-on high ``` JSON 输出: ``` $ npx valtik-ai-ide-config-guard . --json > report.json ``` SARIF 2.1.0(用于 GitHub 代码扫描): ``` $ npx valtik-ai-ide-config-guard . --sarif > report.sarif ``` 运行部分检查: ``` $ npx valtik-ai-ide-config-guard . --checks G1,G3,G5 ``` 完整参数列表:`npx valtik-ai-ide-config-guard --help`。 ## 检查项 | ID | 严重性 | 检测内容 | | --- | --------------- | ------------------------------------------------------------------------------- | | G1 | CRITICAL | Claude Code 钩子在会话或工具使用时执行 Shell | | G2 | HIGH / MEDIUM | 规则文件中的双向覆盖/嵌入/隔离字符、同形异义字或角色覆盖模式 | | G3 | CRITICAL / HIGH / MEDIUM | MCP 服务器注册时使用高风险的 `command` 或 `url` | | G4 | HIGH / MEDIUM | `.vscode/tasks.json` 中 `runOn: folderOpen` | | G5 | CRITICAL / HIGH | `ANTHROPIC_BASE_URL` / `OPENAI_BASE_URL` / `OPENAI_API_BASE` 重定向 | | G6 | HIGH / INFO | 工作区信任被禁用,`task.autoDetect: on` | | G7 | HIGH / MEDIUM | 规则 Markdown 中的围栏代码块包含危险 Shell 模式 | | G8 | HIGH / INFO | `package.json` 脚本命名为 AI 代理(或在安装钩子中出现代理) | ### G1 — Claude Code 钩子执行 Shell 查找 `.claude/settings.json` 并解析 `hooks.SessionStart` / `hooks.PostToolUse` / `hooks.PreToolUse` / `hooks.UserPromptSubmit`(及相关生命周期事件)。如果任意条目设置 `command` 字符串(或分组语法中的 `type: "command"`),则判定为 CRITICAL —— 在 Claude Code 中打开仓库会在开发者的 Shell 环境中执行命令,暴露其环境变量、SSH 密钥与令牌。 ### G2 — 规则文件 Unicode 走私 扫描 `.cursorrules`、`.cursor/rules/*.md[c]`、`.windsurfrules`、`.windsurf/rules/*.md[c]`、`.github/copilot-instructions.md`、`.continue/*.md`,检测以下特征: - 双向覆盖/嵌入/隔离字符(U+202A–U+202E、U+2066–U+2069) - 零宽字符(U+200B、U+200C、U+200D、U+2060、U+FEFF、U+180E、U+00AD) - Unicode 标签块(U+E0000–U+E007F)——人类无法察觉的隐形标记走私空间 - Cyrillic 同形异义字(а/е/о/р/с/х/у/…)混入纯 ASCII 单词 - 强制角色覆盖模式(`ignore previous`、`from now on`、`system:` 等) 纯 Cyrillic 文本、Emoji 及文件开头的 BOM 被忽略 —— 仅标记那些用于向人工审查隐藏内容的特征。 ### G3 — MCP 自动注册 解析 `mcp.json`、`.mcp.json`、`.claude/mcp.json`、`.cursor/mcp.json`、`.windsurf/mcp.json`、`.vscode/mcp.json`、`.continue/config.json`。对每个注册服务器: - `command` 匹配 `src/fixtures/known-malicious-mcp.json` → **CRITICAL** - `command` 为本地二进制文件 → **HIGH** - `command` 为 `npx` / `uvx` / `pipx` 拉取未经验证的包 → **MEDIUM** - `url` 非 HTTPS → **MEDIUM** - `url` 指向本地主机 / 局域网 → **MEDIUM** ### G4 — VS Code 任务自动运行 标记任何 `runOptions.runOn: "folderOpen"` 的任务。若命令包含 Shell 插值(`curl | sh`、`wget | bash`、`eval`、`base64 -d`、反引号、`$(...)`)或引用外部 URL,则严重性升级。 ### G5 — API 基础 URL 重定向 扫描 `.env*`、`.claude/settings.json`、`.cursor/config.json`、`.vscode/settings.json` 以及所有 `mcp.json`,检测: - `ANTHROPIC_BASE_URL`、`ANTHROPIC_API_URL` - `OPENAI_BASE_URL`、`OPENAI_API_BASE`、`OPENAI_API_URL` 若主机不是官方端点(`api.anthropic.com` / `api.openai.com`),则判定为 **CRITICAL** —— 所有请求与 API 密钥都将流向攻击者端点。本地主机或局域网 IP 标记为 **HIGH**。 ### G6 — 工作区信任 标记 `.vscode/settings.json` 中包含 `security.workspace.trust.enabled: false`(或 Cursor 等效配置),这会静默关闭阻止自动运行的内置安全门。 ### G7 — 规则 Markdown 中内嵌 Shell 在 `.md` / `.mdc` 规则文件中,扫描围栏代码块是否包含 `curl | sh`、`wget | bash`、`rm -rf`、`eval`、`base64 -d`、`python -c`、`/dev/tcp`、反向 Shell 的 `mkfifo`、`chmod +x`。若周围说明文字为命令式语气("运行此命令"、"执行以下命令"),则严重性提升。 ### G8 — package.json 代理脚本 信息性标记:脚本名称匹配 `claude*`、`cursor*`、`windsurf*`、`mcp*`、`continue*`、`copilot*`、`aider*`、`cline*`。**HIGH** 若与 npm 生命周期钩子(`preinstall`、`postinstall` 等)同名 —— 生命周期钩子在 `npm install` 时自动执行且无需用户确认。 ## CI 集成 GitHub Actions: ``` - name: AI-IDE config guard run: npx valtik-ai-ide-config-guard . --fail-on high ``` 或上传 SARIF: ``` - run: npx valtik-ai-ide-config-guard . --sarif > ai-ide.sarif - uses: github/codeql-action/upload-sarif@v3 with: sarif_file: ai-ide.sarif ``` ## 限制 - 静态、基于签名且保守。混淆载荷或新型向量可能无法检测。设计目标是在 `test/fixtures/safe/ 中零误报 —— 宁可漏报也不愿误报。 - 不执行或解析任何内容(不运行 `npx` 干运行,不获取 URL)。 - 文件读取限制为每文件 2 MB 以防止 DoS。 ## 参考 - CVE-2025-59536(Claude Code 钩子) - CVE-2026-21852(Claude Code PostToolUse 钩子) - CVE-2026-30615(Windsurf 配置写入 RCE) - Pillar Security — “规则文件后门”(2026) - Valtik Studios — [AI-IDE Security 2026](https://valtikstudios.com/blog/ai-ide-security-2026)(即将发布) ## 免责声明 本工具为静态分析。干净报告仅表示“当前版本未触发 8 项检查”,并不代表仓库绝对安全。请将每个非自研仓库视为敌对环境,并手动执行工作区信任、钩子审查与 MCP 审查。 MIT License — Copyright (c) 2026 Valtik Studios LLC。
标签:AI IDE, ANTHROPIC_BASE_URL, Claude Code, Continue, Cursor, .cursorrules, CVE-2025-59536, CVE-2026-21852, CVE-2026-30615, GitHub Copilot Instructions, GNU通用公共许可证, Homebrew安装, LNA, MCP, mcp.json, MITM代理, Node.js, OPENAI_API_BASE, OPENAI_BASE_URL, Pillar Rules File Backdoor, RCE, SARIF, Windsurf, .windsurfrules, 子域名暴力破解, 安全扫描, 开发者安全, 恶意代码分析, 数据展示, 文档结构分析, 时序注入, 红队, 自动化检测, 自定义脚本, 配置文件