MCP Security Lab
MCP Security Lab
Ein kleines, echtes, ausführbares Model Context Protocol-Setup mit sieben absichtlichen Schwachstellen – und deren Behebungen –, damit du jedes Risiko tatsächlich in Aktion sehen kannst, statt nur darüber zu lesen. Erstellt auf Basis der aktuellen offiziellen MCP-Spezifikation (2026-07-28) und ihres Dokuments zu Sicherheits-Best Practices, plus der OWASP MCP Top 10.
Alles läuft lokal. Nichts hier kommuniziert mit einem echten System, das dir wichtig ist.
Dokumentation
Alles unten ist direkt auf GitHub lesbar – kein Server nötig – und jedes Dokument verlinkt auf das nächste:
docs/owasp-mcp-top10.md – Feldreferenz für alle zehn OWASP-MCP-Top-10-Risikokategorien, was ein MCP-Server tatsächlich ist, der End-to-End-Anfragepfad und seine drei benannten Risikozonen, sowie ein Link von jeder Kategorie direkt zum Exploit-Skript, das sie demonstriert (oder das nächstgelegene).
docs/mcp-stateless-rewrite.md – Vorher/Nachher-Architekturdiagramme für die zustandslose Neufassung der Spezifikation von 2026-07-28, eine priorisierte Liste, welche OWASP-Kategorien dadurch jetzt kritischer sind, eine Tabelle, die jede Spezifikations-/Roadmap-Änderung einer bestimmten OWASP-Kategorie zuordnet, und fünf neue Schwachstellenmuster mit konkreten Fehlerszenarien.
Dieselben beiden Seiten existieren auch als live, interaktives HTML im Dashboard (guidelines.html und rewrite.html, siehe Dashboard unten) – der Inhalt ist identisch, die Dashboard-Version verlinkt nur direkt in den Live-Exploit-Runner statt in eine Quelldatei.
Related MCP server: Damn Vulnerable Model Context Protocol (DVMCP)
Was abgedeckt ist
Tool | Schwachstelle | Quelle |
| Command Injection | OWASP MCP05 |
| Tool-(Beschreibungs-)Vergiftung | OWASP MCP03 |
| State-Handle-Entführung | MCP Security Best Practices |
| Token-Durchreichung / Confused Deputy | MCP Security Best Practices |
| Unzureichende Authentifizierung + kein Audit-Trail | OWASP MCP07 / MCP08 |
| Privilegieneskalation durch Scope Creep | OWASP MCP02 |
| Client-Launch-Injection (Supply-Chain-RCE) | OWASP MCP04 · 2026 research |
servers/vulnerable_server.py enthält alle sieben, absichtlich kaputt.
servers/fixed_server.py enthält dieselben sieben Tools, gepatcht – führe denselben Exploit gegen beide aus und beobachte, wie sich das Ergebnis umkehrt.
Jede OWASP-MCP-Top-10-Kategorie verlinkt jetzt auf eine Demo (oder die nächstgelegene echte) von der Guidelines-Seite des Dashboards – einschließlich MCP09 (Shadow MCP Servers), das eher eine Governance-Lücke als ein einzelner Tool-Aufruf-Bug ist, daher wird es durch das Labor selbst veranschaulicht statt durch ein dediziertes Exploit-Skript.
Aktuell bleiben
MCP bewegt sich schnell – die Spezifikationsveröffentlichung von 2026-07-28 war die bisher größte Neufassung des Protokolls (sie wurde vollständig zustandslos), und eine neue Roadmap für die nächste Veröffentlichung wurde erst vor wenigen Tagen, am 2026-08-22, veröffentlicht. Zwei Orte verfolgen, was sich seit dem Bau dieses Labors geändert hat und wie sich das Risikobild verschiebt:
docs/owasp-mcp-top10.md – der Abschnitt „Was sich geändert hat“ oder die Live-Version unter
http://127.0.0.1:8000/guidelines.html#2026-updates.docs/mcp-stateless-rewrite.md – die vollständige Aufschlüsselung, einschließlich welche OWASP-Kategorien jetzt kritischer sind und warum, oder die Live-Version unter
http://127.0.0.1:8000/rewrite.html.
Einrichtung
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtVerifiziert mit dem
mcpSDK v1.26.0 – die Server importierenFastMCPausmcp.server.fastmcp(manche Tutorials zeigen den Import direkt ausmcp.serveroder verweisen auf eineMCPServer-Klasse aus einemmcp.server.mcpserver-Modul, das in dieser SDK-Linie nicht existiert; die API ist in beiden Fällen gleich). Falls deine installierte Version abweicht, führepip show mcpaus und prüfedir(mcp.server)auf den richtigen Klassennamen – alles andere (der.tool()-Dekorator,.run(transport="stdio")) ist unverändert.Der Command-Injection-Exploit funktioniert auch ohne ein echtes
ping-Binary auf deinem Rechner – es geht darum zu beweisen, dass das Shell-Metazeichen (;) überhaupt interpretiert wird, was die Markierungsdatei „PWNED“ bestätigt.
Setze die Schlüssel, die du verwenden möchtest, als Umgebungsvariablen – setze niemals einen echten Schlüssel in eine Datei, die du committen oder in einen Chat einfügen könntest:
export OPENAI_API_KEY="sk-..."
# and/or
export GEMINI_API_KEY="AI..."Die Exploits ausführen
Sechs der sieben benötigen überhaupt kein LLM – sie rufen den MCP-Server direkt auf, um zu beweisen, dass der Fehler im Server liegt, nicht im Modellverhalten:
# 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.pyTool-Poisoning benötigt ein echtes Modell, denn die Schwachstelle ist, ob das Modell versteckten Anweisungen in der eigenen Beschreibung eines Tools folgt:
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 openaiDashboard
Ein lokales Web-Dashboard zeigt alle 7 Schwachstellen als Karten, ermöglicht es dir, den Code-Diff zwischen verwundbar und behoben für jede anzuzeigen, und per Klick ein Skript auszuführen, das den echten Exploit gegen einen der beiden Server startet – die Ausgabe wird in ein Live-Terminal-Panel im Browser gestreamt und endet mit einem VULNERABLE/SAFE-Urteil.
pip install -r requirements.txt -r ui/requirements.txt
uvicorn ui.server:app --reload --port 8000Öffne dann http://127.0.0.1:8000. Setze OPENAI_API_KEY / GEMINI_API_KEY im Terminal, von dem aus du uvicorn startest, wenn du die Tool-Poisoning-Karte ausführen möchtest – das Dashboard fragt selbst nie nach einem Schlüssel, es liest einfach diejenigen dieser Umgebungsvariablen, die auf dem Rechner, auf dem es läuft, bereits gesetzt sind.
Sprich selbst damit
agent.py ist ein Allzweck-MCP-Client + Agenten-Schleife – richte es auf einen der beiden Server und einen der beiden Anbieter und chatte interaktiv mit ihm:
python agent.py servers/vulnerable_server.py openai
python agent.py servers/fixed_server.py geminiVersuche, es zu bitten, die Dokumentation zu durchsuchen, einen Warenkorb zu prüfen oder Diagnosen auf einem Host auszuführen, und beobachte die Zeilen [llm -> tool] / [tool -> llm], um genau zu sehen, was es aufzurufen beschlossen hat und was zurückkam.
Was hier NICHT vollständig abgedeckt ist
Zwei Dinge aus dem aktuellen MCP-Sicherheitsdokument sind real, aber in einem kleinen lokalen Labor schwerer zu demonstrieren – es lohnt sich, darüber zu lesen, auch wenn du sie nicht baust:
SSRF über OAuth-Discovery – ein bösartiger Server, der den Metadatenabruf eines Clients auf
169.254.169.254(Cloud-Instanz-Metadaten) richtet. Benötigt einen echten OAuth-Flow und ein Netzwerk, das angegriffen werden kann.Mix-up / Localhost-Redirect-URI-Imitation – benötigt ein echtes Multi-Autorisierungsserver-Setup, um es sinnvoll zu demonstrieren. Die Spezifikation von 2026-07-28 hat dafür eine konkrete Gegenmaßnahme hinzugefügt (Clients müssen jetzt den
iss-Parameter gemäß RFC 9207 validieren, bevor sie einen Auth-Code einlösen) – siehe den Abschnitt „2026 Updates“ auf der Guidelines-Seite.
Beide werden ausführlich beschrieben unter
https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices.
Dies erweitern
Füge ein weiteres verwundbares Tool und sein Exploit-Skript nach demselben Muster hinzu: Kommentiere den Fehler, schreibe den Exploit, schreibe die Behebung.
Versuche, denselben Exploit gegen einen echten Drittanbieter-MCP-Server auszuführen, den du installierst (mit Erlaubnis, auf Infrastruktur, die dir gehört) – die State-Hijack- und No-Auth-Muster tauchen ständig in schnell gebauten Servern auf.
Binde
AUDIT_LOGinfixed_server.pyin eine echte Log-Senke ein und baue eine kleine Erkennungsregel für die.denied-Ereignisse – das ist im Grunde MCP08 (Audit/Telemetrie) konkret umgesetzt.
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