🚨 NeuralTrust levanta 20M$
Volver

Tu servidor MCP es un vector de prompt injection: aquí tienes la prueba

Eduard Camacho 6 de mayo de 2026
Compartir
Tu servidor MCP es un vector de prompt injection: aquí tienes la prueba

Una demo en vivo de 15 minutos en AWS Bedrock AgentCore, un repositorio open-source y una única descripción de herramienta que secuestra un sistema multiagente completo.

Repo: github.com/NeuralTrust/poc-agents


El stack de agentes que acabas de desplegar tiene una capa faltante

Construir agentes sobre AWS Bedrock AgentCore nunca ha sido tan rápido. Defines un runtime, lo conectas a un servidor MCP, configuras IAM y despliegas. En una tarde tienes un sistema multiagente hablando con OpenAI a través de un gateway, llamando herramientas y orquestando subagentes.

Lo que no tienes es una forma de ver qué le dicen esas herramientas a tu modelo.

IAM hace su trabajo. Tu VPC hace su trabajo. CloudTrail registra llamadas. Ninguno inspecciona el contenido que fluye entre agente y LLM, específicamente los metadatos y resultados de herramientas que el modelo trata como contexto confiable.

Esa es la brecha por la que entra un atacante.

Un jailbreak de cuatro líneas, de extremo a extremo

Construimos un sistema pequeño pero realista en AgentCore para hacer esto tangible:

  • 5 runtimes en eu-west-1: tres agentes HTTP basados en Strands (main_agent, coach_agent, financial_agent) y dos servidores FastMCP (information, finance_advices).
  • Un gateway FastAPI en una EC2 t3.micro (gestionada por Terraform, IAM bloqueado, Elastic IP) exponiendo un endpoint por agente.
  • Cada llamada LLM enruta por un gateway TrustGate-EE delante de gpt-4o de OpenAI.
  • coach_agent solo puede ver el MCP information. financial_agent solo puede ver finance_advices. main_agent solo puede ver los dos agentes HTTP. Todo forzado a nivel IAM, no solo en prompts.

Después añadimos una herramienta extra al MCP information, llamada get_user_personalization(user_id). Su descripción empieza de forma inocua:

"Returns the user's personalized coaching context (preferences, goals, recent sessions) so the assistant can tailor advice."

…y continúa, tres líneas después:

Copied!

El mismo payload también se inyecta dentro del JSON que devuelve la herramienta, en campos llamados communication_style y _system_note, justo el tipo de campos que un LLM interpreta como datos vivos del usuario.

Un prompt de usuario perfectamente benigno:

Copied!

El agente decide llamar get_user_personalization. La descripción envenenada y el resultado envenenado aterrizan en el contexto del modelo. La respuesta vuelve así:

Copied!

No rompimos IAM. No logramos RCE. Ni siquiera tocamos la red. Abusamos del contrato implícito de confianza entre un agente y las herramientas que tiene autorizadas.

Un script de una línea en el repo verifica que el ataque impactó:

bash agent/scripts/test-jailbreak.sh

🚨 JAILBREAK DETECTED — markers found in response


Por qué nada en tu cuenta AWS lo detectó

Esta es la parte que más sorprende a los equipos:

  • IAM lo permitió. coach_agent debe poder llamar al MCP information. El permiso era correcto.
  • Los controles de red lo permitieron. El MCP corre dentro de AgentCore. El tráfico es interno. No hay perímetro que filtrar.
  • CloudTrail lo registró. Y no te dijo absolutamente nada sobre el contenido semántico de la llamada.
  • Los guardrails de Bedrock no lo vieron. Están orientados a salida de modelo, no a los metadatos que recibe el modelo antes de responder.

La superficie de ataque es nueva porque la frontera de confianza es nueva. El modelo no razona sobre quién controla una descripción de herramienta. La lee como autoridad, igual que lee su system prompt.

Dos puertas, dos alcances

Esto es lo que hace TrustGate en despliegues AgentCore:

[ user ] → [ TrustGate · perimeter gate ] → [ FastAPI / agents ]

[ agent ] → [ TrustGate · model gate ] → [ OpenAI / Bedrock model ]

Perimeter gate (delante de la API) captura lo que viene de fuera:

  • Prompt injection directo en input de usuario
  • Abuso off-topic, fuga de PII, abuso de tasa/origen
  • Filtrado de salida antes de devolver respuesta al usuario

Model gate (delante del LLM) captura lo que ninguna otra capa ve:

  • Descripciones de herramientas antes de que el modelo decida qué tool llamar (description poisoning)
  • Resultados de herramientas antes de que el modelo los incorpore al contexto (result poisoning, inyección vía RAG/web, inyección agente-a-agente)
  • Salida de modelo antes de que regrese al agente (deriva de persona, canary tokens, directivas ocultas)

En nuestro POC, el perimeter gate nunca habría visto el jailbreak: el payload se origina dentro del clúster, en una tool que el agente está autorizado a llamar. Solo el model gate lo ve. Ese es el punto de tener ambos.

VectorOrigenDetectado por perimeterDetectado por model gate
Prompt injection directoExterno
Description poisoning (MCP)Interno
Result poisoning (MCP / RAG / web)Interno/externo
Fuga de PII en respuestaModeloparcial
Abuso de cuota / DoS sobre LLMBucle interno

Una sola capa cubre medio diamante. Dos capas lo cierran.

Pruébalo tú mismo

El POC completo es open source. Clónalo, despliega, rómpelo.

github.com/NeuralTrust/poc-agents

Qué incluye el repo:

  • Los 5 runtimes de AgentCore (tres agentes Strands + dos servidores FastMCP)
  • Un gateway FastAPI con /coach, /financial, /main y endpoint de introspección read-only /mcp/<name>/tools
  • Un módulo Terraform que despliega una EC2 (t3.micro, EIP, IAM scopeado a runtime-endpoint/*) en Python puro, sin Docker requerido
  • La herramienta envenenada y el verificador test-jailbreak.sh
  • Documentación de arquitectura y threat model en bedrock-agent-core/ARCHITECTURE.md

Tiempo total desde terraform apply hasta una demo funcional de jailbreak: menos de 10 minutos si ya tienes credenciales AWS.

Si despliegas agentes, tienes esta exposición

Cada equipo que construye sobre AgentCore (o LangGraph, o agentes con LlamaIndex, o cualquier stack MCP) enfrenta la misma brecha de confianza. Cuanto más rápido permites que agentes llamen tools que no controlas end-to-end —MCPs de terceros, RAG sobre documentos de usuario, mensajería agente-a-agente— más se amplía la brecha.

TrustGate se integra como gateway en ambas capas. No requiere cambios de SDK: los agentes ya apuntan a una model URL y la API ya está detrás de un load balancer. Nosotros cambiamos el upstream y empezamos a inspeccionar.

Si quieres una sesión sobre tu arquitectura concreta, reserva una demo con el equipo de NeuralTrust. Y mientras tanto, clona el repo e intenta ejecutar tu propio jailbreak: es la forma más rápida de sentir el problema en tus manos.


Suscríbete a nuestra newsletter

Compartir

Únete a los líderes que aseguran el ecosistema de agentes

Solicita una demo