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.
Related MCP server: MCP Toolbox for Databases
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_sqlpermite 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_variablepermite 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_sqlyget_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.