nuk

OWASP MCP Top 10 기반 정적 보안 분석기. 소스코드 레벨에서 MCP 서버의 보안 위협을 탐지한다. 완전 로컬, LLM API 불필요.

5
Analysis Layers
7.6K
Lines of Rust
12
YAML Rules
42
Unit Tests

분석 아키텍처

5개 레이어가 순차적으로 동작한다. Layer 1~4는 LLM 없이 즉시 실행되고, Layer 5는 --llm 플래그로 로컬 Ollama를 통해 활성화된다.

Layer 1Regex
YAML 패턴 매칭 + 시크릿 탐지
12개 YAML 룰 (OWASP MCP01~MCP11), negative_pattern 지원, 인코딩 우회 탐지 (base64/hex/URL 3-pass normalization)
Layer 2AST
tree-sitter 구문 분석
TypeScript, Python, Rust 지원. 구문 트리 기반 위험 패턴 탐지, confidence 레벨 (Confirmed/High/Medium/Low)
Layer 3Taint
데이터 흐름 추적 (Taint Tracking)
사용자 입력 → 위험 함수 흐름 추적. sink 3-tier 분류 (Critical: eval/exec, High: SQL/FS write, Medium: read/execute). word boundary 매칭으로 FP 감소
Layer 4Cross-file
파일 간 호출 그래프
import resolution 기반 cross-file taint flow. CrossFileConfidence 4단계 (ImportResolved → QualifiedMatch → NameOnly → MethodGuess)
Layer 5LLM
시맨틱 분석 (로컬 Gemma4)
tool description 독 분석, description↔code alignment 검증, taint flow 의도 분류. Semaphore(4) 병렬 처리. Ollama 로컬 실행, API 키 불필요

탐지 정확도

annotation 기반 Ground Truth 벤치마크 (12개 테스트 케이스: 취약 TS 서버 + 취약 Python 서버 + 안전한 서버) 결과.

Ground Truth Benchmark
90.9
F1 Score
True Positive: 10건 (정확히 탐지)
False Negative: 2건 (미탐지)
False Positive: 0건
Precision · Recall · F1
Precision
100%
Recall
83.3%
F1 Score
90.9%

* LLM 없이 Layer 1~4만으로 측정. FP 0건 = 보고한 모든 findings가 실제 위협.

실제 서버 스캔 결과

Anthropic 공식 MCP 서버 7개, 커뮤니티 인기 서버 3개, Snyk 취약 데모서버 1개에 대한 스캔 결과. 전부 실제 프로덕션 코드.

Tier 2 벤치마크 — 11개 실제 MCP 서버
Server소속GradeScoreLOCDensityCriticalHighMedium
fetchAnthropic 공식A1003180.0000
gitAnthropic 공식A1006160.0000
timeAnthropic 공식A1002420.0000
memoryAnthropic 공식B945016.0003
filesystemAnthropic 공식B951,4845.4014
everythingAnthropic 공식B943,7745.6045
mcp-playwright커뮤니티 (4.5K★)B846,00316.02748
tavily-mcp커뮤니티 (1.8K★)A989122.2002
supabase-mcp커뮤니티 (1.2K★)A9917,8100.6017
snyk-demoserverSnyk (의도적 취약)F089236.0201

* Density = weighted findings per 1,000 LOC. Low/Info는 Grade 계산에서 제외.

LOC 대비 Density 분포
supabase
0.6
tavily
2.2
filesystem
5.4
everything
5.6
memory
6.0
playwright
16.0
snyk-demo
236

* fetch, git, time은 density 0.0 (findings 없음)이므로 생략

경쟁 도구 비교

동일한 poisoned tool description 4건에 대해 nuk과 Cisco MCP Scanner (YARA 모드)를 비교했다. Cisco의 behavioral 모드(LLM 기반)는 OpenAI API 키가 필수여서 YARA만 비교 가능.

nuk Local

탐지율4/4 (100%)
FP0
소스코드 분석가능
LLM 필요선택 (로컬)
API 비용무료
오프라인가능

Cisco MCP Scanner YARA

탐지율2/4 (50%)
FP0
소스코드 분석LLM 필수
LLM 필요필수 (GPT-4o)
API 비용유료
오프라인불가

Snyk agent-scan Cloud

탐지율
FP
소스코드 분석미지원
LLM 필요필수 (Cloud)
API 비용유료
오프라인불가

* 테스트 대상: Snyk demoserver의 poisoned tool descriptions 4건 (hidden injection, credential harvesting, instruction override, concealment). Cisco YARA 모드(v4.6.0)만 로컬 실행 가능하여 비교. Snyk은 API 토큰 필수 + 서버 실행 필요하여 동일 조건 비교 불가.

등급 시스템

LOC(Lines of Code) 기반 density grading. 소규모 프로젝트(14줄)에서 Critical 3건은 대규모 프로젝트(200줄)에서 11건보다 높은 density를 가진다.

등급 기준 (Weighted Density per 1,000 LOC)
A (< 5)
Clean
B (5~20)
Low
C (20~60)
Review
D (60~150)
Risk
F (150+)
Critical

* Weighted: Critical ×10, High ×4, Medium ×1. Low/Info는 제외.

사용법

# 소스코드 분석 (Layer 1~4)
nuk analyze -p ./my-mcp-server -r ./rules

# JSON 출력
nuk analyze -p ./my-mcp-server -r ./rules -f json > scan.json

# Layer 5 LLM 시맨틱 분석 활성화 (로컬 Ollama 필요)
nuk analyze -p ./my-mcp-server -r ./rules --llm

# 다른 모델 사용
nuk analyze -p ./my-mcp-server -r ./rules --llm --llm-model gemma4:latest

# PDF 리포트 생성
nuk analyze -p ./my-mcp-server -r ./rules -f json > scan.json
python3 tools/nuk-report.py scan.json -o security-report.pdf

알려진 한계

지원 언어: TypeScript, Python, Rust (3개). Go, Java, C# 등 미지원.
Runtime 분석: 정적 분석만 수행. 런타임 rug-pull, 실시간 injection 차단은 범위 밖.
Toxic Flow: read+send 조합을 INFO로 표시하지만, 실제 데이터 흐름 chain 분석은 미구현.
Template SQL: template literal 내 SQL injection 패턴의 일부 미탐지 (Recall 83.3%의 원인).
LLM 모드 속도: tool 30개 이상 서버에서 ~5분 소요 (gemma4:e2b, 4-concurrent).

nuk v0.1.0 · Built with Rust · 7,614 LOC · 42 tests
벤치마크 데이터: 2026-05-09 기준