MCP Security Lab
Laboratorio de Seguridad MCP
Una configuración pequeña, real y ejecutable del Model Context Protocol con siete vulnerabilidades deliberadas — y sus correcciones — para que puedas ver cada riesgo funcionando de verdad en lugar de solo leer sobre él. Construido según la especificación oficial actual de MCP (2026-07-28) y su documento de mejores prácticas de seguridad, además del OWASP MCP Top 10.
Todo se ejecuta localmente. Nada de esto habla con un sistema real que te importe.
Documentación
Todo lo que aparece a continuación se puede leer directamente en GitHub — no se necesita servidor — y cada documento enlaza con el siguiente:
docs/owasp-mcp-top10.md — referencia de campo para las diez categorías de riesgo del OWASP MCP Top 10, qué es realmente un servidor MCP, la ruta de solicitud de extremo a extremo y sus tres zonas de riesgo nombradas, y un enlace desde cada categoría directamente al script de exploit que la demuestra (o el más cercano).
docs/mcp-stateless-rewrite.md — diagramas de arquitectura antes/después para la reescritura sin estado de la especificación 2026-07-28, una lista priorizada de qué categorías OWASP son ahora más críticas debido a ello, una tabla que mapea cada cambio de especificación/hoja de ruta a una categoría OWASP específica, y cinco nuevos patrones de vulnerabilidad con escenarios de fallo concretos.
Las mismas dos páginas también existen como HTML vivo e interactivo dentro del panel de control (guidelines.html y rewrite.html, ver Panel de control más abajo) — el contenido es idéntico, la versión del panel simplemente enlaza directamente al ejecutor de exploits en vivo en lugar de a un archivo fuente.
Related MCP server: Damn Vulnerable Model Context Protocol (DVMCP)
Qué se cubre
Herramienta de archivo | Vulnerabilidad | Fuente |
| Inyección de comandos | OWASP MCP05 |
| Envenenamiento de (descripción de) herramienta | OWASP MCP03 |
| Secuestro de identificador de estado | Mejores prácticas de seguridad MCP |
| Paso de tokens / Diputado confundido | Mejores prácticas de seguridad MCP |
| Autenticación insuficiente + sin registro de auditoría | OWASP MCP07 / MCP08 |
| Escalada de privilegios mediante expansión de alcance | OWASP MCP02 |
| Inyección de lanzamiento de cliente (RCE en cadena de suministro) | OWASP MCP04 · investigación 2026 |
servers/vulnerable_server.py tiene las siete, rotas a propósito.
servers/fixed_server.py tiene las mismas siete herramientas, parcheadas — ejecuta el mismo
exploit contra ambas y observa cómo cambia el resultado.
Cada categoría del OWASP MCP Top 10 ahora enlaza a una demo (o la más cercana real) desde la página de pautas del panel — incluyendo MCP09 (Servidores MCP sombra), que es una brecha de gobernanza más que un error de una sola llamada a herramienta, por lo que se ilustra con el propio laboratorio en lugar de un script de exploit dedicado.
Mantenerse al día
MCP avanza rápido — el lanzamiento de la especificación 2026-07-28 fue la mayor reescritura del protocolo hasta la fecha (se volvió completamente sin estado), y una nueva hoja de ruta que cubre la próxima versión se publicó hace solo unos días, el 2026-08-22. Dos lugares rastrean qué ha cambiado desde que se construyó este laboratorio y cómo afecta al panorama de riesgos:
docs/owasp-mcp-top10.md — la sección "Qué ha cambiado", o la versión en vivo en
http://127.0.0.1:8000/guidelines.html#2026-updates.docs/mcp-stateless-rewrite.md — el desglose completo, incluyendo qué categorías OWASP son ahora más críticas y por qué, o la versión en vivo en
http://127.0.0.1:8000/rewrite.html.
Configuración
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtVerificado contra el SDK
mcpv1.26.0 — los servidores importanFastMCPdesdemcp.server.fastmcp(algunos tutoriales lo muestran importado directamente desdemcp.server, o hacen referencia a una claseMCPServerde un módulomcp.server.mcpserverque no existe en esta línea de SDK; la API es la misma de cualquier manera). Si tu versión instalada difiere,pip show mcpy compruebadir(mcp.server)para el nombre de clase correcto — todo lo demás (el decorador.tool(),.run(transport="stdio")) no cambia.El exploit de inyección de comandos funciona incluso sin un binario
pingreal en tu máquina — el punto es demostrar que el metacarácter de shell (;) se interpreta en absoluto, lo que confirma el archivo marcador "PWNED".
Establece la(s) clave(s) que quieras usar como variables de entorno — nunca pongas una clave real en un archivo que puedas enviar a un repositorio o pegar en un chat:
export OPENAI_API_KEY="sk-..."
# and/or
export GEMINI_API_KEY="AI..."Ejecutar los exploits
Seis de los siete no necesitan un LLM en absoluto — llaman al servidor MCP directamente para demostrar que la falla vive en el servidor, no en el comportamiento del modelo:
# 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.pyEl envenenamiento de herramientas necesita un modelo real, porque la vulnerabilidad es si el modelo sigue instrucciones ocultas en la descripción de la propia herramienta:
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 openaiPanel de control
Un panel web local muestra las 7 vulnerabilidades como tarjetas, te permite ver la diferencia de código vulnerable vs. corregido para cada una, y hacer clic en un botón para ejecutar el script de exploit real contra cualquiera de los servidores — la salida se transmite a un panel de terminal en vivo en el navegador y termina con un veredicto VULNERABLE/SEGURO.
pip install -r requirements.txt -r ui/requirements.txt
uvicorn ui.server:app --reload --port 8000Luego abre http://127.0.0.1:8000. Establece OPENAI_API_KEY / GEMINI_API_KEY
en la terminal desde la que lances uvicorn si quieres ejecutar la tarjeta de envenenamiento
de herramientas — el panel nunca pide una clave por sí mismo, solo lee cualquiera
de esas variables de entorno que ya estén establecidas en la máquina que lo ejecuta.
Habla con él tú mismo
agent.py es un cliente MCP de propósito general + bucle de agente — apúntalo a cualquiera
de los servidores y a cualquiera de los proveedores y chatea con él de forma interactiva:
python agent.py servers/vulnerable_server.py openai
python agent.py servers/fixed_server.py geminiIntenta pedirle que busque en los documentos, revise un carrito o ejecute diagnósticos en un
host, y observa las líneas [llm -> tool] / [tool -> llm] para ver exactamente
qué decidió llamar y qué devolvió.
Qué NO está completamente cubierto aquí
Dos cosas del documento de seguridad MCP actual son reales pero más difíciles de demostrar en un laboratorio local pequeño, y vale la pena leer sobre ellas incluso si no las construyes:
SSRF mediante descubrimiento OAuth — un servidor malicioso que apunta la obtención de metadatos de un cliente a
169.254.169.254(metadatos de instancia en la nube). Necesita un flujo OAuth real y una red que atacar.Impersonación de URI de redirección de localhost / mix-up — necesita una configuración real de múltiples servidores de autorización para demostrarse de manera significativa. La especificación 2026-07-28 añadió una mitigación concreta para esto (los clientes ahora deben validar el parámetro
iss, RFC 9207, antes de canjear un código de autorización) — consulta la sección "Actualizaciones 2026" de la página de pautas.
Ambos se describen en detalle en
https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices.
Extender esto
Añade otra herramienta vulnerable y su script de exploit siguiendo el mismo patrón: comenta la falla, escribe el exploit, escribe la corrección.
Intenta ejecutar el mismo exploit contra un servidor MCP de terceros real que instales (con permiso, en infraestructura que poseas) — los patrones de secuestro de estado y sin autenticación aparecen constantemente en servidores construidos rápidamente.
Conecta
AUDIT_LOGenfixed_server.pya un sumidero de registros real y construye una pequeña regla de detección para los eventos.denied— eso es básicamente MCP08 (auditoría/telemetría) hecho concreto.
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