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):Copy
- Restringir herramientas peligrosas:
- Elimine o limite estrictamente herramientas como
execute_sql
yget_env_variable
. - Exponer únicamente la funcionalidad necesaria.
- Elimine o limite estrictamente herramientas como
- 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
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.