Demostración de MCP inseguro
Descripción general
Este proyecto demuestra un servidor MCP vulnerable y varios clientes, incluyendo un cliente de prueba de concepto para ataques y un cliente en buen estado. Está diseñado con fines educativos para mostrar posibles vulnerabilidades de seguridad en el servidor MCP.
Estructura del proyecto
vuln-mcp.py
: Servidor MCP vulnerable que expone herramientas inseguras.good-mcp-client.py
: Cliente bueno normal para interacciones normales (insertar/consultar registros).attack-mcp-client.py
: Cliente de ataque automatizado que demuestra la explotación de vulnerabilidades del servidor.requirements.txt
: Dependencias de Python para el proyecto.
Características y vulnerabilidades
Herramientas de servidor expuestas
insertar_registro
Inserta un registro de nombre/dirección en la base de datos.
Vulnerabilidad: Propenso a la inyección de SQL debido a la interpolación directa de cadenas de entrada del usuario en consultas SQL.
registros_de_consulta
Enumera todos los registros en la base de datos.
Vulnerabilidad: Expone todos los datos sin autenticación ni control de acceso.
ejecutar_sql
Ejecuta consultas SQL arbitrarias proporcionadas por el cliente.
Vulnerabilidad: Permite cualquier comando SQL, incluidos los destructivos (por ejemplo, exfiltración de datos, cambios de esquema).
obtener_variable_env
Devuelve el valor de cualquier variable de entorno solicitada.
Vulnerabilidad: Fugas de variables de entorno sensibles (por ejemplo, secretos, claves API).
Cómo correr
1. Instalar dependencias
2. Iniciar el servidor y el buen cliente
En una terminal:
Siga las instrucciones para insertar o consultar registros de forma interactiva.
3. Ejecute el cliente de ataque
En otra terminal:
Esto automáticamente:
Intentos de ataques de inyección SQL
Ejecutar consultas SQL arbitrarias
Intente leer varias variables de entorno comunes
Ejemplo de salida
El cliente de ataque mostrará qué cargas útiles tienen éxito o fallan e imprimirá los contenidos de la base de datos y los valores de las variables de entorno si son accesibles.
Vulnerabilidades demostradas
Inyección SQL: la entrada del usuario no está saneada, lo que permite a los atacantes manipular la lógica SQL e insertar datos arbitrarios.
Ejecución de código arbitrario: la herramienta
execute_sql
permite a los atacantes ejecutar cualquier comando SQL, incluido el robo o la destrucción de datos.Exposición de datos confidenciales: la herramienta
get_env_variable
permite a los atacantes leer secretos y valores de configuración.Falta de control de acceso: cualquiera puede ejecutar todas las herramientas y acceder a todos los datos sin autenticación.
Estrategias de mitigación
Para proteger un servidor MCP del mundo real, debes:
Utilice consultas parametrizadas:
Utilice siempre la sustitución de parámetros en lugar de la interpolación de cadenas para consultas SQL para evitar la inyección.
Ejemplo (seguro):
cursor.execute("INSERT INTO records (name, address) VALUES (?, ?)", (name, address))
Restringir herramientas peligrosas:
Elimine o limite estrictamente herramientas como
execute_sql
yget_env_variable
.Exponer únicamente la funcionalidad necesaria.
Implementar autenticación y autorización:
Exigir que los usuarios se autentiquen y verifiquen los permisos antes de permitir el acceso a herramientas o datos confidenciales.
Validar y desinfectar la entrada:
Verifique y desinfecte todas las entradas del usuario, especialmente aquellas que interactúan con la base de datos o el sistema.
Limitar el acceso a las variables de entorno:
Permitir el acceso únicamente a variables no sensibles o eliminar esta herramienta por completo.
Auditoría y monitoreo del uso:
Registre todas las invocaciones de herramientas y monitoree si hay comportamiento sospechoso o abusivo.
Principio del Mínimo Privilegio:
Ejecute el servidor con privilegios mínimos y restrinja el acceso a la base de datos y al sistema operativo tanto como sea posible.
Descargo de responsabilidad
Este proyecto es solo para fines educativos y de demostración. No lo implemente en entornos de producción.
Si tiene preguntas o desea realizar más mejoras, abra un problema o comuníquese con el responsable del proyecto.
This server cannot be installed
local-only server
The server can only run on the client's local machine because it depends on local resources.
Un servidor MCP deliberadamente vulnerable que permite a los clientes interactuar con una base de datos con fines educativos, demostrando vulnerabilidades de seguridad que incluyen inyección SQL, ejecución de código arbitrario y exposición de datos confidenciales.
Related MCP Servers
- -securityAlicense-qualityOpen source MCP server specializing in easy, fast, and secure tools for Databases.Last updated -10,444Apache 2.0
- AsecurityAlicenseAqualityA vulnerable MCP server implementation that demonstrates how poor coding practices can lead to security issues like Remote Code Execution, designed for educational purposes to add numbers.Last updated -12MIT License
- -securityFlicense-qualityIntentionally vulnerable Model Context Protocol (MCP) server designed for security research that processes natural language queries through an LLM to execute SQL queries or shell commands without restrictions.Last updated -3