
Сканировать репозиторий на наличие конфигурационных файлов AI-IDE, которые могут вызвать удаленное выполнение кода (RCE) через хуки Claude Code, правила Cursor, авторегистрацию MCP. Обнаруживает CVE-2025-59536, CVE-2026-21852, CVE-2026-30615 + паттерны Pillar Rules File Backdoor.
Сканирует репозиторий на наличие файлов конфигурации AI-IDE, которые могут вызвать RCE, кражу учетных данных или постоянный взлом машин разработчика, когда репозиторий открывается в Claude Code, Cursor, Windsurf, Continue или любой fork VS Code.
Создано в ответ на волну разоблачений AI-IDE в апреле 2026 года:
settings.json SessionStart / PreToolUse / PostToolUse / UserPromptSubmit выполняют произвольные команды оболочки при открытии рабочей области..cursorrules / .windsurfrules / .github/copilot-instructions.md / .continue/*.md, которые скрывают директивы злоумышленника от человека, проверяющего код.ANTHROPIC_BASE_URL / OPENAI_BASE_URL / OPENAI_API_BASE — перенаправление на конечные точки, контролируемые злоумышленником (перехват промптов и API-ключей).mcp.json / .mcp.json / .cursor/mcp.json / .claude/mcp.json с произвольным вызовом command через stdio..vscode/tasks.json при открытии рабочей области.Запускайте его для каждого стороннего репозитория, который вы клонировали, перед тем как открыть его в AI-редакторе.
Установка не требуется — используйте npx:
npx valtik-ai-ide-config-guard <path>
Или установите глобально:
npm i -g valtik-ai-ide-config-guard
ai-ide-config-guard <path>
Требуется 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.
Находит .claude/settings.json и парсит hooks.SessionStart / hooks.PostToolUse / hooks.PreToolUse / hooks.UserPromptSubmit (и связанные события жизненного цикла). Если какая-либо запись устанавливает строку command (или type: "command" внутри группированной грамматики), результат — КРИТИЧЕСКИЙ — открытие репозитория в Claude Code выполняет команду в оболочке разработчика с его окружением, SSH-ключами и токенами.
Сканирует .cursorrules, .cursor/rules/*.md[c], .windsurfrules, .windsurf/rules/*.md[c], .github/copilot-instructions.md, .continue/*.md на предмет:
ignore previous, from now on, system: и т.д.)Чисто кириллический текст, эмодзи и BOM в начале файла игнорируются — мы помечаем только то, что скрывает содержимое от проверяющего человека.
Парсит 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 → КРИТИЧЕСКИЙcommand — локальный бинарник → ВЫСОКИЙcommand — npx / uvx / pipx, загружающий непроверенный пакет → СРЕДНИЙurl не использует https → СРЕДНИЙurl указывает на localhost / LAN → СРЕДНИЙПомечает любую задачу с runOptions.runOn: "folderOpen". Серьезность повышается, если команда использует интерполяцию оболочки (curl | sh, wget | bash, eval, base64 -d, обратные кавычки, $(...)) или ссылается на внешний URL.
Сканирует .env*, .claude/settings.json, .cursor/config.json, .vscode/settings.json и любые mcp.json для:
ANTHROPIC_BASE_URL, ANTHROPIC_API_URLOPENAI_BASE_URL, OPENAI_API_BASE, OPENAI_API_URLЕсли хост не является канонической конечной точкой поставщика (api.anthropic.com / api.openai.com), результат КРИТИЧЕСКИЙ — каждый запрос и API-ключ отправляется на конечную точку злоумышленника. Хосты не из облака (localhost, LAN IP) помечаются как ВЫСОКИЙ.
Помечает .vscode/settings.json, который поставляется с security.workspace.trust.enabled: false (или аналогом Cursor), что молча отключает нативный шлюз, блокирующий автозапуск.
В файлах правил .md / .mdc сканирует блоки кода, содержащие curl | sh, wget | bash, rm -rf, eval, base64 -d, python -c, /dev/tcp, reverse-shell mkfifo, chmod +x. Серьезность повышается, когда окружающий текст является императивным («запусти это», «выполни следующую команду»).
Информационный флаг для скриптов с именами claude*, cursor*, windsurf*, mcp*, continue*, copilot*, aider*, cline*. ВЫСОКИЙ, если такое же имя совпадает с хуком жизненного цикла npm (preinstall, postinstall и т.д.) — хуки жизненного цикла выполняются при npm install без подтверждения пользователем.
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/ — это цель дизайна: мы скорее пропустим граничный случай, чем научим пользователей игнорировать нас.Этот инструмент — статический анализ. Чистый отчет означает «8 проверок, включенных в эту версию, не сработали», а не «этот репозиторий безопасно открывать в AI-IDE». Относитесь к каждому репозиторию, который вы не создавали, как к враждебному и применяйте доверие к рабочей области, проверку хуков и проверку MCP вручную.
Лицензия MIT — Copyright (c) 2026 Valtik Studios LLC.
| ID | Серьезность | Что обнаруживает |
|---|
| G1 | КРИТИЧЕСКИЙ | Хук Claude Code, запускающий оболочку при событиях сессии/использования инструментов |
| G2 | ВЫСОКИЙ / СРЕДНИЙ | Двунаправленные/нулевой ширины/теговые символы, homoglyphs или паттерны переопределения ролей в правилах |
| G3 | КРИТИЧЕСКИЙ / ВЫСОКИЙ / СРЕДНИЙ | MCP-сервер зарегистрирован с опасными command или url |
| G4 | ВЫСОКИЙ / СРЕДНИЙ | .vscode/tasks.json с runOn: folderOpen |
| G5 | КРИТИЧЕСКИЙ / ВЫСОКИЙ | ANTHROPIC_BASE_URL / OPENAI_BASE_URL / OPENAI_API_BASE перенаправлены |
| G6 | ВЫСОКИЙ / ИНФО | Отключено доверие к рабочей области, task.autoDetect: on |
| G7 | ВЫСОКИЙ / СРЕДНИЙ | Опасные паттерны оболочки в блоках кода внутри правил markdown |
| G8 | ВЫСОКИЙ / ИНФО | Скрипты package.json, названные в честь AI-агентов (или агентов в хуках установки) |