
Escanea un repositorio en busca de archivos de configuración de AI-IDE que puedan desencadenar RCE mediante hooks de Claude Code, reglas de Cursor, auto-registro de MCP. Detecta CVE-2025-59536, CVE-2026-21852, CVE-2026-30615 + patrones de Pillar Rules File Backdoor.
Analiza un repositorio en busca de archivos de configuración de AI-IDE que pueden desencadenar RCE, robo de credenciales o compromiso persistente de las máquinas de los desarrolladores cuando el repositorio se abre en Claude Code, Cursor, Windsurf, Continue o cualquier fork de VS Code.
Creado en respuesta a la oleada de divulgaciones de AI-IDE de abril de 2026:
SessionStart / PreToolUse / PostToolUse / UserPromptSubmit de settings.json de Claude Code ejecutan comandos arbitrarios del shell al abrir el espacio de trabajo..cursorrules / .windsurfrules / .github/copilot-instructions.md / .continue/*.md que ocultan directivas del atacante a un revisor humano.ANTHROPIC_BASE_URL / OPENAI_BASE_URL / OPENAI_API_BASE a endpoints controlados por el atacante (exfiltración de prompt + clave API).mcp.json / .mcp.json / .cursor/mcp.json / .claude/mcp.json con invocación stdio de command arbitrario..vscode/tasks.json al abrir el espacio de trabajo.Ejecútalo en cada repositorio de terceros que clones antes de abrirlo en un editor potenciado por IA.
Sin instalación — usa npx:
npx valtik-ai-ide-config-guard <ruta>
O instala globalmente:
npm i -g valtik-ai-ide-config-guard
ai-ide-config-guard <ruta>
Requiere Node 20+.
$ npx valtik-ai-ide-config-guard ./mi-repositorio-clonado
Con un umbral de fallo (para CI):
$ npx valtik-ai-ide-config-guard . --fail-on high
Salida JSON:
$ npx valtik-ai-ide-config-guard . --json > report.json
SARIF 2.1.0 (para el escaneo de código de GitHub):
$ npx valtik-ai-ide-config-guard . --sarif > report.sarif
Ejecutar un subconjunto de comprobaciones:
$ npx valtik-ai-ide-config-guard . --checks G1,G3,G5
Lista completa de opciones: npx valtik-ai-ide-config-guard --help.
Busca .claude/settings.json y analiza hooks.SessionStart / hooks.PostToolUse / hooks.PreToolUse / hooks.UserPromptSubmit (y eventos del ciclo de vida relacionados). Si alguna entrada establece una cadena command (o type: "command" dentro de la gramática agrupada), el hallazgo es CRÍTICO: abrir el repositorio en Claude Code ejecuta el comando bajo el shell del desarrollador con su entorno, claves SSH y tokens.
Escanea .cursorrules, .cursor/rules/*.md[c], .windsurfrules, .windsurf/rules/*.md[c], .github/copilot-instructions.md, .continue/*.md en busca de:
ignore previous, from now on, system:, etc.)Se ignoran texto puramente cirílico, emojis y BOM al inicio del archivo; solo marcamos lo que oculta contenido a un revisor humano.
Analiza mcp.json, .mcp.json, .claude/mcp.json, .cursor/mcp.json, .windsurf/mcp.json, .vscode/mcp.json, .continue/config.json. Para cada servidor registrado:
command coincide con src/fixtures/known-malicious-mcp.json → CRÍTICOcommand es un binario local → ALTOcommand es npx / uvx / pipx extrayendo un paquete no verificado → MEDIOurl no es https → MEDIOurl apunta a localhost / LAN → MEDIOMarca cualquier tarea con runOptions.runOn: "folderOpen". La gravedad aumenta si el comando usa interpolación de shell (curl | sh, wget | bash, eval, base64 -d, backticks, $(...)) o referencia una URL externa.
Escanea .env*, .claude/settings.json, .cursor/config.json, .vscode/settings.json y cualquier mcp.json en busca de:
ANTHROPIC_BASE_URL, ANTHROPIC_API_URLOPENAI_BASE_URL, OPENAI_API_BASE, OPENAI_API_URLSi el host no es el endpoint canónico del proveedor (api.anthropic.com / api.openai.com), el hallazgo es CRÍTICO — cada solicitud y clave API va al endpoint del atacante. Los hosts que no son en la nube (localhost, IPs de LAN) se marcan como ALTO.
Marca .vscode/settings.json que incluya security.workspace.trust.enabled: false (o el análogo de Cursor), lo que opta silenciosamente por no usar la puerta de enlace nativa que bloquea el comportamiento de ejecución automática.
En archivos .md / .mdc de reglas, escanea bloques de código delimitados que contengan curl | sh, wget | bash, rm -rf, eval, base64 -d, python -c, /dev/tcp, mkfifo de shell inverso, chmod +x. La gravedad aumenta cuando la prosa circundante es imperativa ("run this", "execute the following command").
Indicador informativo para scripts nombrados claude*, cursor*, windsurf*, mcp*, continue*, copilot*, aider*, cline*. ALTO si el mismo nombre colisiona con un hook del ciclo de vida de npm (preinstall, postinstall, etc.) — los hooks del ciclo de vida se ejecutan en npm install sin confirmación del usuario.
GitHub Actions:
- name: AI-IDE config guard
run: npx valtik-ai-ide-config-guard . --fail-on high
O carga 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/ es un objetivo de diseño: preferimos omitir un caso límite antes que enseñar a los usuarios a ignorarnos.npx, sin recuperación de URL).Esta herramienta es análisis estático. Un informe limpio significa "las 8 comprobaciones incluidas en esta versión no se activaron", no "este repositorio es seguro para abrir en un AI-IDE". Trata cada repositorio que no hayas creado como hostil y aplica confianza del espacio de trabajo, revisión de hooks y revisión de MCP manualmente.
Licencia MIT — Copyright (c) 2026 Valtik Studios LLC.
| ID | Gravedad | Qué detecta |
|---|
| G1 | CRÍTICO | Hook de Claude Code que ejecuta shell en eventos de sesión / uso de herramientas |
| G2 | ALTO / MEDIO | Caracteres Bidi / ancho cero / tag, homoglifos o patrones de anulación de rol en reglas |
| G3 | CRÍTICO / ALTO / MEDIO | Servidor MCP registrado con command o url riesgoso |
| G4 | ALTO / MEDIO | .vscode/tasks.json con runOn: folderOpen |
| G5 | CRÍTICO / ALTO | ANTHROPIC_BASE_URL / OPENAI_BASE_URL / OPENAI_API_BASE redirigido |
| G6 | ALTO / INFORMATIVO | Confianza del espacio de trabajo deshabilitada, task.autoDetect: on |
| G7 | ALTO / MEDIO | Patrones de shell peligrosos en bloques delimitados dentro de markdown de reglas |
| G8 | ALTO / INFORMATIVO | Scripts de package.json nombrados como agentes de IA (o agentes en hooks de instalación) |