Procura em um repositório por arquivos de configuração de AI-IDE que podem desencadear RCE via hooks do Claude Code, regras do Cursor, auto-registro MCP. Detecta CVE-2025-59536, CVE-2026-21852, CVE-2026-30615 + padrões de backdoor Pillar Rules File.
Digitaliza um repositório à procura de ficheiros de configuração de AI-IDE que podem desencadear RCE, roubo de credenciais ou compromisso persistente de máquinas de programadores quando o repositório é aberto no Claude Code, Cursor, Windsurf, Continue ou qualquer fork do VS Code.
Criado em resposta à vaga de divulgação de AI-IDE de abril de 2026:
SessionStart / PreToolUse / PostToolUse / UserPromptSubmit do settings.json do Claude Code executam comandos arbitrários na shell ao abrir o espaço de trabalho..cursorrules / .windsurfrules / .github/copilot-instructions.md / que escondem diretivas do atacante de um revisor humano..continue/*.mdANTHROPIC_BASE_URL / OPENAI_BASE_URL / OPENAI_API_BASE para endpoints controlados pelo atacante (exfiltração de prompt + chave de API).mcp.json / .mcp.json / .cursor/mcp.json / .claude/mcp.json com invocação command stdio arbitrária..vscode/tasks.json execução automática ao abrir o espaço de trabalho.Execute-o em cada repositório de terceiros que clonar antes de o abrir num editor alimentado por IA.
Sem instalação — use npx:
npx valtik-ai-ide-config-guard <caminho>
Ou instale globalmente:
npm i -g valtik-ai-ide-config-guard
ai-ide-config-guard <caminho>
Requer Node 20+.
$ npx valtik-ai-ide-config-guard ./meu-repositorio-clonado
Com um limiar de falha (para CI):
$ npx valtik-ai-ide-config-guard . --fail-on high
Saída JSON:
$ npx valtik-ai-ide-config-guard . --json > report.json
SARIF 2.1.0 (para verificação de código no GitHub):
$ npx valtik-ai-ide-config-guard . --sarif > report.sarif
Executar um subconjunto de verificações:
$ npx valtik-ai-ide-config-guard . --checks G1,G3,G5
Lista completa de flags: npx valtik-ai-ide-config-guard --help.
| ID | Severidade | O que deteta |
|---|---|---|
| G1 | CRÍTICO | Hook do Claude Code que executa shell em eventos de sessão/uso de ferramenta |
| G2 | ALTO / MÉDIO | Caracteres bidi / largura-zero / tag, homóglifos ou padrões de substituição de função em regras |
| G3 | CRÍTICO / ALTO / MÉDIO | Servidor MCP registado com command ou url arriscado |
| G4 | ALTO / MÉDIO | .vscode/tasks.json com runOn: folderOpen |
| G5 | CRÍTICO / ALTO | ANTHROPIC_BASE_URL / OPENAI_BASE_URL / OPENAI_API_BASE redirecionados |
| G6 | ALTO / INFO | Confiança do espaço de trabalho desativada, task.autoDetect: on |
| G7 | ALTO / MÉDIO | Padrões de shell perigosos em blocos de código dentro de markdown de regras |
| G8 | ALTO / INFO | Scripts package.json com nomes de agentes de IA (ou agentes em hooks de instalação) |
Encontra .claude/settings.json e analisa hooks.SessionStart / hooks.PostToolUse / hooks.PreToolUse / hooks.UserPromptSubmit (e eventos de ciclo de vida relacionados). Se alguma entrada definir uma string command (ou type: "command" dentro da gramática agrupada), a descoberta é CRÍTICA — abrir o repositório no Claude Code executa o comando na shell do programador com o seu ambiente, chaves SSH e tokens.
Digitaliza .cursorrules, .cursor/rules/*.md[c], .windsurfrules, .windsurf/rules/*.md[c], .github/copilot-instructions.md, .continue/*.md para:
ignore previous, from now on, system:, etc.)Texto puramente cirílico, emoji e BOMs no início do ficheiro são ignorados — apenas sinalizamos o que esconde conteúdo de um revisor humano.
Analisa mcp.json, .mcp.json, .claude/mcp.json, .cursor/mcp.json, .windsurf/mcp.json, .vscode/mcp.json, .continue/config.json. Para cada servidor registado:
command corresponde a src/fixtures/known-malicious-mcp.json → CRÍTICOcommand é um binário local → ALTOcommand é npx / uvx / pipx a obter um pacote não verificado → MÉDIOurl não é https → MÉDIOurl aponta para localhost / LAN → MÉDIOSinaliza qualquer tarefa com runOptions.runOn: "folderOpen". A severidade sobe se o comando usar interpolação de shell (curl | sh, wget | bash, eval, base64 -d, backticks, $(...)) ou referenciar um URL externo.
Digitaliza .env*, .claude/settings.json, .cursor/config.json, .vscode/settings.json e qualquer mcp.json para:
ANTHROPIC_BASE_URL, ANTHROPIC_API_URLOPENAI_BASE_URL, OPENAI_API_BASE, OPENAI_API_URLSe o anfitrião não for o endpoint canónico do fornecedor (api.anthropic.com / api.openai.com), a descoberta é CRÍTICA — cada pedido e chave de API vão para o endpoint do atacante. Anfitriões não cloud (localhost, IPs de LAN) são sinalizados como ALTO.
Sinaliza .vscode/settings.json que vem com security.workspace.trust.enabled: false (ou o análogo do Cursor), que opta silenciosamente pela exclusão do bloqueio nativo que impede comportamentos de execução automática.
Em ficheiros .md / .mdc de regras, digitaliza blocos de código cercados que contêm curl | sh, wget | bash, rm -rf, eval, base64 -d, python -c, /dev/tcp, reverse-shell mkfifo, chmod +x. A severidade aumenta quando o texto circundante é imperativo ("run this", "execute the following command").
Sinalização informativa para scripts com nomes claude*, cursor*, windsurf*, mcp*, continue*, copilot*, aider*, cline*. ALTO se o mesmo nome colidir com um hook de ciclo de vida npm (preinstall, postinstall, etc.) — hooks de ciclo de vida são executados em npm install sem confirmação do utilizador.
GitHub Actions:
- name: AI-IDE config guard
run: npx valtik-ai-ide-config-guard . --fail-on high
Ou upload 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/ é um objetivo de design — preferimos falhar um caso limite do que ensinar os utilizadores a ignorar-nos.npx, sem buscas de URL).Esta ferramenta é análise estática. Um relatório limpo significa "as 8 verificações fornecidas nesta versão não dispararam", não "este repositório é seguro para abrir numa AI-IDE". Trate todos os repositórios que não criou como hostis e aplique confiança do espaço de trabalho, revisão de hooks e revisão MCP manualmente.
Licença MIT — Copyright (c) 2026 Valtik Studios LLC.