Skip to main content
Glama
ibrahimsaleem

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

run_diagnostics

Command Injection

OWASP MCP05

search_docs / get_secret_config

Tool-(Beschreibungs-)Vergiftung

OWASP MCP03

get_cart

State-Handle-Entführung

MCP Security Best Practices

proxy_fetch_data

Token-Durchreichung / Confused Deputy

MCP Security Best Practices

read_user_file

Unzureichende Authentifizierung + kein Audit-Trail

OWASP MCP07 / MCP08

read_calendar_events

Privilegieneskalation durch Scope Creep

OWASP MCP02

launch_from_config

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.txt

Verifiziert mit dem mcp SDK v1.26.0 – die Server importieren FastMCP aus mcp.server.fastmcp (manche Tutorials zeigen den Import direkt aus mcp.server oder verweisen auf eine MCPServer-Klasse aus einem mcp.server.mcpserver-Modul, das in dieser SDK-Linie nicht existiert; die API ist in beiden Fällen gleich). Falls deine installierte Version abweicht, führe pip show mcp aus und prüfe dir(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.py

Tool-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 openai

Dashboard

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 gemini

Versuche, 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_LOG in fixed_server.py in eine echte Log-Senke ein und baue eine kleine Erkennungsregel für die .denied-Ereignisse – das ist im Grunde MCP08 (Audit/Telemetrie) konkret umgesetzt.

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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