Skip to main content
Glama
ibrahimsaleem

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

run_diagnostics

Inyección de comandos

OWASP MCP05

search_docs / get_secret_config

Envenenamiento de (descripción de) herramienta

OWASP MCP03

get_cart

Secuestro de identificador de estado

Mejores prácticas de seguridad MCP

proxy_fetch_data

Paso de tokens / Diputado confundido

Mejores prácticas de seguridad MCP

read_user_file

Autenticación insuficiente + sin registro de auditoría

OWASP MCP07 / MCP08

read_calendar_events

Escalada de privilegios mediante expansión de alcance

OWASP MCP02

launch_from_config

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

Verificado contra el SDK mcp v1.26.0 — los servidores importan FastMCP desde mcp.server.fastmcp (algunos tutoriales lo muestran importado directamente desde mcp.server, o hacen referencia a una clase MCPServer de un módulo mcp.server.mcpserver que no existe en esta línea de SDK; la API es la misma de cualquier manera). Si tu versión instalada difiere, pip show mcp y comprueba dir(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 ping real 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.py

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

Panel 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 8000

Luego 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 gemini

Intenta 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_LOG en fixed_server.py a 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.

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