MCP Security Lab
MCP Security Lab
실행 가능한 작은 실제 Model Context Protocol 설정으로, 일곱 가지 의도적인 취약점과 그 수정 사항을 포함하여 각 위험이 실제로 작동하는 모습을 문서로 읽는 대신 직접 확인할 수 있습니다. 현재 공식 MCP 사양(2026-07-28)과 보안 모범 사례 문서, 그리고 OWASP MCP Top 10을 기반으로 구축되었습니다.
모든 것은 로컬에서 실행됩니다. 여기 있는 어떤 것도 실제로 중요한 시스템과 통신하지 않습니다.
문서
아래의 모든 내용은 GitHub에서 바로 읽을 수 있습니다 — 서버가 필요 없습니다 — 그리고 각 문서는 다음 문서로 연결됩니다:
docs/owasp-mcp-top10.md — OWASP MCP Top 10의 모든 위험 범주에 대한 필드 참조, MCP 서버가 실제로 무엇인지, 종단 간 요청 경로와 그 세 가지 명명된 위험 영역, 그리고 각 범주에서 해당 취약점을 시연하는 익스플로잇 스크립트(또는 가장 가까운 것)로의 링크.
docs/mcp-stateless-rewrite.md — 2026-07-28 사양의 무상태 재작성에 대한 전후 아키텍처 다이어그램, 이로 인해 이제 더 중요해진 OWASP 범주의 우선순위 목록, 모든 사양/로드맵 변경을 특정 OWASP 범주에 매핑하는 표, 그리고 구체적인 실패 시나리오가 있는 다섯 가지 새로운 취약점 패턴.
동일한 두 페이지는 대시보드 내에서 라이브 대화형 HTML로도 존재합니다(guidelines.html 및 rewrite.html, 아래 대시보드 참조) — 내용은 동일하며, 대시보드 버전은 소스 파일 대신 라이브 익스플로잇 실행기에 직접 연결됩니다.
Related MCP server: Damn Vulnerable Model Context Protocol (DVMCP)
다루는 내용
파일 도구 | 취약점 | 출처 |
| 명령 주입 | OWASP MCP05 |
| 도구(설명) 중독 | OWASP MCP03 |
| 상태 핸들 하이재킹 | MCP 보안 모범 사례 |
| 토큰 전달 / 혼동된 대리자 | MCP 보안 모범 사례 |
| 불충분한 인증 + 감사 추적 없음 | OWASP MCP07 / MCP08 |
| 범위 확장을 통한 권한 상승 | OWASP MCP02 |
| 클라이언트 실행 주입 (공급망 RCE) | OWASP MCP04 · 2026 연구 |
servers/vulnerable_server.py에는 일곱 가지 모두가 의도적으로 손상된 상태로 있습니다.
servers/fixed_server.py에는 동일한 일곱 가지 도구가 패치된 상태로 있습니다 — 동일한 익스플로잇을 두 서버에 실행하고 결과가 뒤집히는 것을 확인하세요.
모든 OWASP MCP Top 10 범주는 이제 대시보드의 가이드라인 페이지에서 데모(또는 가장 가까운 실제 데모)로 연결됩니다 — MCP09(섀도우 MCP 서버)를 포함하여, 이는 단일 도구 호출 버그가 아닌 거버넌스 공백이므로 전용 익스플로잇 스크립트 대신 랩 자체로 설명됩니다.
최신 상태 유지
MCP는 빠르게 변화합니다 — 2026-07-28 사양 릴리스는 프로토콜의 가장 큰 재작성이었으며(완전히 무상태로 전환됨), 다음 릴리스를 다루는 새로운 로드맵이 불과 며칠 전인 2026-08-22에 게시되었습니다. 이 랩이 구축된 이후 변경된 사항과 그것이 위험 그림을 어떻게 바꾸는지 추적하는 두 곳이 있습니다:
docs/owasp-mcp-top10.md — "변경된 사항" 섹션, 또는 라이브 버전
http://127.0.0.1:8000/guidelines.html#2026-updates.docs/mcp-stateless-rewrite.md — 전체 분석, 어떤 OWASP 범주가 이제 더 중요해졌는지와 그 이유를 포함, 또는 라이브 버전
http://127.0.0.1:8000/rewrite.html.
설정
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
mcpSDK v1.26.0에 대해 검증됨 — 서버는mcp.server.fastmcp에서FastMCP를 가져옵니다(일부 튜토리얼은mcp.server에서 직접 가져오거나, 이 SDK 라인에 존재하지 않는mcp.server.mcpserver모듈의MCPServer클래스를 참조하지만, API는 동일합니다). 설치된 버전이 다르면pip show mcp를 실행하고dir(mcp.server)에서 올바른 클래스 이름을 확인하세요 — 나머지(.tool()데코레이터,.run(transport="stdio"))는 변경되지 않았습니다.명령 주입 익스플로잇은 실제
ping바이너리가 없어도 작동합니다 — 핵심은 셸 메타문자(;)가 해석된다는 것을 증명하는 것이며, "PWNED" 마커 파일이 이를 확인합니다.
사용하려는 키를 환경 변수로 설정하세요 — 절대 커밋하거나 채팅에 붙여넣을 수 있는 파일에 실제 키를 넣지 마세요:
export OPENAI_API_KEY="sk-..."
# and/or
export GEMINI_API_KEY="AI..."익스플로잇 실행
일곱 가지 중 여섯 가지는 LLM이 전혀 필요 없습니다 — 결함이 모델 동작이 아닌 서버에 있음을 증명하기 위해 MCP 서버를 직접 호출합니다:
# Command injection
python exploits/exploit_cmd_injection.py servers/vulnerable_server.py
python exploits/exploit_cmd_injection.py servers/fixed_server.py
# State handle hijacking (guessing another user's cart ID)
python exploits/exploit_state_hijack.py servers/vulnerable_server.py
python exploits/exploit_state_hijack.py servers/fixed_server.py
# Token passthrough / confused deputy
python exploits/exploit_token_passthrough.py servers/vulnerable_server.py
python exploits/exploit_token_passthrough.py servers/fixed_server.py
# Insufficient auth + no audit trail (reading another user's file by ID)
python exploits/exploit_auth_audit.py servers/vulnerable_server.py
python exploits/exploit_auth_audit.py servers/fixed_server.py
# Privilege escalation via scope creep (redirecting a read-only tool's token)
python exploits/exploit_scope_creep.py servers/vulnerable_server.py
python exploits/exploit_scope_creep.py servers/fixed_server.py
# Client launch injection / supply chain RCE (untrusted config picks command/args)
python exploits/exploit_launch_injection.py servers/vulnerable_server.py
python exploits/exploit_launch_injection.py servers/fixed_server.py도구 중독은 실제 모델이 필요합니다. 취약점은 모델이 도구 자체 설명의 숨겨진 지침을 따르는지 여부이기 때문입니다:
python exploits/exploit_tool_poisoning.py servers/vulnerable_server.py openai
python exploits/exploit_tool_poisoning.py servers/vulnerable_server.py gemini
python exploits/exploit_tool_poisoning.py servers/fixed_server.py openai대시보드
로컬 웹 대시보드는 7가지 취약점을 카드로 표시하고, 각각에 대해 취약한 버전과 수정된 버전의 코드 차이를 볼 수 있으며, 버튼을 클릭하여 실제 익스플로잇 스크립트를 두 서버 중 하나에 실행할 수 있습니다 — 출력은 브라우저의 라이브 터미널 패널로 스트리밍되고 VULNERABLE/SAFE 판정으로 끝납니다.
pip install -r requirements.txt -r ui/requirements.txt
uvicorn ui.server:app --reload --port 8000그런 다음 http://127.0.0.1:8000을 엽니다. 도구 중독 카드를 실행하려면 uvicorn을 시작하는 터미널에서 OPENAI_API_KEY / GEMINI_API_KEY를 설정하세요 — 대시보드는 자체적으로 키를 요청하지 않으며, 실행 중인 머신에 이미 설정된 환경 변수만 읽습니다.
직접 대화해 보기
agent.py는 범용 MCP 클라이언트 + 에이전트 루프입니다 — 두 서버 중 하나와 두 공급자 중 하나를 지정하고 대화형으로 채팅할 수 있습니다:
python agent.py servers/vulnerable_server.py openai
python agent.py servers/fixed_server.py gemini문서 검색, 장바구니 확인, 호스트 진단 실행 등을 요청해 보고, [llm -> tool] / [tool -> llm] 줄을 관찰하여 무엇을 호출하기로 결정했는지와 무엇이 반환되었는지 정확히 확인하세요.
여기서 완전히 다루지 않는 것
현재 MCP 보안 문서의 두 가지 사항은 실제이지만 작은 로컬 랩에서 데모하기 어렵습니다. 구축하지 않더라도 읽어볼 가치가 있습니다:
OAuth 검색을 통한 SSRF — 악성 서버가 클라이언트의 메타데이터 가져오기를
169.254.169.254(클라우드 인스턴스 메타데이터)로 지정합니다. 실제 OAuth 흐름과 공격할 네트워크가 필요합니다.혼동 / localhost 리디렉션 URI 가장 — 의미 있게 시연하려면 실제 다중 인증 서버 설정이 필요합니다. 2026-07-28 사양은 이에 대한 구체적인 완화 조치를 추가했습니다(클라이언트는 이제 인증 코드를 교환하기 전에
iss매개변수, RFC 9207을 검증해야 함) — 가이드라인 페이지의 "2026 업데이트" 섹션을 참조하세요.
둘 다 https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices에서 자세히 설명되어 있습니다.
확장하기
동일한 패턴으로 다른 취약한 도구와 그 익스플로잇 스크립트를 추가하세요: 결함을 주석으로 달고, 익스플로잇을 작성하고, 수정 사항을 작성하세요.
설치한 실제 타사 MCP 서버(허가를 받고 소유한 인프라에서)에 동일한 익스플로잇을 실행해 보세요 — 상태 하이재킹 및 인증 없음 패턴은 빠르게 구축된 서버에서 끊임없이 나타납니다.
fixed_server.py의AUDIT_LOG를 실제 로그 싱크에 연결하고.denied이벤트에 대한 작은 탐지 규칙을 구축하세요 — 이는 기본적으로 MCP08(감사/원격 측정)을 구체화한 것입니다.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceAn educational project that deliberately implements vulnerable MCP servers to demonstrate various security risks like prompt injection, tool poisoning, and code execution for training security researchers and AI safety professionals.1,334
- FlicenseNot gradedqualityCmaintenanceA deliberately insecure MCP server designed as a pentest lab to demonstrate common vulnerabilities in MCP deployments.
- FlicenseNot gradedqualityDmaintenanceA vulnerable MCP server designed for educational CTF challenges. It demonstrates various MCP security vulnerabilities in a controlled environment.8
Related MCP Connectors
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
MEOK MCP Hardening MCP — automated security red-team for any MCP server. Maps OWASP LLM Top 10
Scans MCP servers for tool poisoning, prompt injection and supply chain risks.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ibrahimsaleem/mcp-security-lab'
If you have feedback or need assistance with the MCP directory API, please join our Discord server