
Claude Code 훅, Cursor 규칙, MCP 자동 등록을 통해 RCE를 유발할 수 있는 AI-IDE 구성 파일을 리포지토리에서 스캔합니다. CVE-2025-59536, CVE-2026-21852, CVE-2026-30615 및 Pillar Rules File 백도어 패턴을 탐지합니다.
저장소를 스캔하여 AI-IDE 구성 파일을 탐지합니다. 이 파일들은 저장소를 Claude Code, Cursor, Windsurf, Continue 또는 모든 VS Code 포크에서 열 때 RCE, 자격 증명 탈취, 개발자 머신의 지속적 침해를 유발할 수 있습니다.
2026년 4월 AI-IDE 공개(disclosure) 물결에 대응하여 제작되었습니다:
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을 통한 MCP 서버 자동 등록 — 임의의 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" 포함) 발견되면 CRITICAL로 판정합니다 — 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과 일치하면 → CRITICALcommand가 로컬 바이너리이면 → HIGHcommand가 검증되지 않은 패키지를 가져오는 npx / uvx / pipx이면 → MEDIUMurl이 https가 아니면 → MEDIUMurl이 localhost / LAN을 가리키면 → MEDIUMrunOptions.runOn: "folderOpen"이 설정된 모든 작업을 플래그합니다. 명령이 셸 인터폴레이션(curl | sh, wget | bash, eval, base64 -d, 백틱, $(...))을 사용하거나 외부 URL을 참조하면 심각도가 상향됩니다.
ANTHROPIC_BASE_URL, ANTHROPIC_API_URL / OPENAI_BASE_URL, OPENAI_API_BASE, OPENAI_API_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)가 아니면 CRITICAL로 판정합니다 — 모든 요청과 API 키가 공격자의 엔드포인트로 전송됩니다. 클라우드가 아닌 호스트(localhost, LAN IP)는 HIGH로 플래그됩니다.
security.workspace.trust.enabled: false(또는 Cursor의 유사 설정)가 포함된 .vscode/settings.json을 플래그합니다. 이 설정은 자동 실행 동작을 차단하는 기본 게이트를 조용히 해제합니다.
규칙 .md / .mdc 파일에서 curl | sh, wget | bash, rm -rf, eval, base64 -d, python -c, /dev/tcp, 리버스 셸 mkfifo, chmod +x를 포함하는 펜스 코드 블록을 검사합니다. 주변 문장이 명령형("run this", "execute the following command")이면 심각도가 상향됩니다.
claude*, cursor*, windsurf*, mcp*, continue*, copilot*, aider*, cline* 이름의 스크립트에 대한 정보성 플래그입니다. 동일한 이름이 npm 라이프사이클 훅(preinstall, postinstall 등)과 충돌하면 HIGH — 라이프사이클 훅은 사용자 확인 없이 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/에서 제로 false positive를 유지하는 것이 설계 목표입니다 — 애매한 사례를 놓치더라도 사용자가 도구를 무시하는 습관이 생기게 하지 않겠다는 뜻입니다.npx 드라이 런 없음, URL 요청 없음).이 도구는 정적 분석 도구입니다. 검사 결과가 깨끗하다는 것은 "이 버전에 포함된 8가지 검사가 발동하지 않았다"는 뜻이지 "이 저장소를 AI-IDE에서 열어도 안전하다"는 뜻이 아닙니다. 직접 작성하지 않은 모든 저장소를 적대적으로 취급하고 작업공간 신뢰(workspace-trust), 훅 검토, MCP 검토를 수동으로 적용하세요.
MIT License — Copyright (c) 2026 Valtik Studios LLC.
| ID | Severity | What it catches |
|---|
| G1 | CRITICAL | 세션 / 도구 사용 이벤트에서 셸을 실행하는 Claude Code 훅 |
| G2 | HIGH / MEDIUM | 규칙의 Bidi / 제로폭 / 태그 문자, 호모글리프 또는 역할 재정의 패턴 |
| G3 | CRITICAL / HIGH / MEDIUM | 위험한 command 또는 url로 등록된 MCP 서버 |
| G4 | HIGH / MEDIUM | runOn: folderOpen이 설정된 .vscode/tasks.json |
| G5 | CRITICAL / HIGH | 리다이렉션된 ANTHROPIC_BASE_URL / OPENAI_BASE_URL / OPENAI_API_BASE |
| G6 | HIGH / INFO | 작업공간 신뢰(workspace-trust) 비활성화, task.autoDetect: on |
| G7 | HIGH / MEDIUM | 규칙 마크다운 내 펜스 블록의 위험한 셸 패턴 |
| G8 | HIGH / INFO | AI 에이전트 이름을 딴 package.json 스크립트 (또는 설치 훅의 에이전트) |