Insecure MCP Demo

by kenhuangus
Verified

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

  1. 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.
  2. registros_de_consulta
    • Enumera todos los registros en la base de datos.
    • Vulnerabilidad: Expone todos los datos sin autenticación ni control de acceso.
  3. 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).
  4. 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

pip install -r requirements.txt

2. Iniciar el servidor y el buen cliente

En una terminal:

python good-mcp-client.py vuln-mcp.py

Siga las instrucciones para insertar o consultar registros de forma interactiva.

3. Ejecute el cliente de ataque

En otra terminal:

python attack-mcp-client.py vuln-mcp.py

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:

  1. 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))
  2. Restringir herramientas peligrosas:
    • Elimine o limite estrictamente herramientas como execute_sql y get_env_variable .
    • Exponer únicamente la funcionalidad necesaria.
  3. 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.
  4. 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.
  5. Limitar el acceso a las variables de entorno:
    • Permitir el acceso únicamente a variables no sensibles o eliminar esta herramienta por completo.
  6. Auditoría y monitoreo del uso:
    • Registre todas las invocaciones de herramientas y monitoree si hay comportamiento sospechoso o abusivo.
  7. 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.

-
security - not tested
F
license - not found
-
quality - not tested

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.

  1. Overview
    1. Project Structure
      1. Features & Vulnerabilities
        1. Exposed Server Tools
      2. How to Run
        1. 1. Install Dependencies
        2. 2. Start the Server and Good Client
        3. 3. Run the Attack Client
      3. Example Output
        1. Vulnerabilities Demonstrated
          1. Mitigation Strategies
            1. Disclaimer
              ID: fib5wotluq