flawopen.com/Incidents/deadbugz-mcp-delayed-metadata-supply-chain-campaign-august-2026
Deadbugz: los metadatos MCP cambian tras la aprobación
Pillar Security documentó una campaña de cadena de suministro MCP que cambiaba metadatos tras tres llamadas normales. Su revisión no encontró pull requests fusionados por el mecanismo de PR de GitHub; el informe no documentó una intrusión posterior. Cloud Security Alliance señala que la visibilidad sobre ejecuciones locales independientes era limitada.[1], [3]
Imagina aprobar a un contratista porque su credencial indica tareas inofensivas. Tras tres entregas rutinarias, la credencial cambia en secreto y pide acceso a salas cerradas. El peligro es que el edificio siga confiando en la aprobación anterior. Un cliente MCP debe detectar si el servidor cambia las instrucciones de las herramientas aprobadas.[1]
Conceptos Clave y Términos
MCP- Protocolo mediante el que una aplicación de IA descubre y llama herramientas ofrecidas por un servidor.[5]
Metadatos de herramienta- Nombre, descripción y esquema de entrada que el cliente puede incluir en el contexto del modelo.[5], [1]
Cambio condicionado en tiempo de ejecución- Comportamiento aplazado hasta alcanzar un umbral de interacciones; Pillar informó de un contador de tres llamadas.[1]
Distribución de cadena de suministro- Introducir una dependencia o configuración mediante un flujo de desarrollo confiable, como un pull request.[1]
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-829
Cronología del Incidente
Pillar identificó 23 pull requests relacionados en 74 minutos; en ese momento, ninguno se había fusionado mediante el mecanismo de PR de GitHub.[1]
Pillar publicó su análisis técnico del cambio de metadatos tras tres llamadas y los indicadores.[1]
El proyecto OWASP GenAI incluyó Deadbugz en su resumen del tercer trimestre; esto acredita atención, no intrusión ni volumen de búsquedas.[2]
Flujo de Ataque Paso a Paso
Se propone una configuración
Un pull request añade la configuración de un servidor MCP remoto o local a un proyecto de IA. Pillar revisó 17 cambios con endpoint remoto, cuatro referencias a un script local oculto y dos envíos de listados.[1]
La revisión inicial ve herramientas normales
Al principio, el servidor presenta herramientas de formato y resumen de texto. Según Pillar, las pruebas breves pueden recibir estos metadatos benignos.[1]
Código Fuente: Vulnerable vs. Seguro
El informe describe envenenamiento de metadatos y distribución mediante pull requests, no una CVE de la especificación MCP. El riesgo aparece cuando el cliente sigue confiando en descripciones mutables del servidor después de la aprobación inicial. Pillar atribuye la campaña a una cuenta pública de GitHub; aquí se presenta como una atribución de Pillar, no como identidad real verificada. Pillar indicó que los PR revisados no se habían fusionado mediante el flujo de GitHub en ese momento y no acreditó una intrusión posterior. El repositorio enlazado actualmente devuelve 404, por lo que los detalles se basan en el análisis técnico publicado por Pillar, no en una nueva inspección independiente del árbol de código. El ejemplo Python es una política ilustrativa del cliente, no código listo para sustituir una biblioteca MCP. CWE-829 es una clasificación editorial; no hay CVE ni CVSS. El adaptador debe actualizar los datos tras notificaciones de cambio MCP e incluir tools/list y prompts/get; metadata_snapshot es un método ilustrativo del adaptador, no una API de un SDK MCP. Genere approved_digest solo tras la revisión del operador. La captura debe incluir todos los metadatos relevantes del servidor: definiciones de tools/list y el contenido completo de prompts/get de los prompts aprobados. Vuelva a consultarla antes de ejecutar y detenga la acción si difiere; esta comprobación no detecta cambios de comportamiento del servidor ni cambios entre la verificación y el uso, por lo que siguen siendo necesarias restricciones independientes.[1], [4], [5]
def agent_metadata(session):
# El adaptador devuelve las herramientas y los prompts actuales del servidor como datos JSON.
return session.metadata_snapshot()
import hashlib
import hmac
import json
def fingerprint(snapshot):
normalized = dict(snapshot)
for key in ("tools", "prompts"):
normalized[key] = sorted(
snapshot[key],
key=lambda item: json.dumps(item, sort_keys=True, separators=(",", ":")),
)
canonical = json.dumps(normalized, sort_keys=True, separators=(",", ":"))
return hashlib.sha256(canonical.encode()).hexdigest()
def agent_metadata(session, approved_digest):
current = session.metadata_snapshot()
if not hmac.compare_digest(fingerprint(current), approved_digest):
raise PermissionError("MCP metadata changed; require operator approval")
return current
Lista de Verificación de Seguridad para Ingeniería
- ✓Guarda una huella canónica de los nombres, descripciones y esquemas de entrada de las herramientas MCP aprobadas.[1], [4]
- ✓Pausa las herramientas y exige revisión del operador si
tools/listoprompts/getcambia tras la aprobación.[1], [5], [4] - ✓Aplica permisos de archivos, credenciales, procesos y red saliente fuera de las instrucciones del modelo y sus metadatos.[1], [4]
- ✓Revisa cambios del repositorio que añadan endpoints MCP o scripts locales; verifica su procedencia antes de habilitarlos.[1]
- ✓Conserva los registros del cliente y compara los cambios de herramientas con las acciones del agente ante un comportamiento inesperado.[1], [3]
Fuentes
- Pillar Security — Deadbugz: Currently Active MCP Supply-Chain Campaign (12 August 2026)
- OWASP GenAI Security Project — GenAI and Agentic AI Exploit Roundup Q3 2026 (8 October 2026)
- Cloud Security Alliance — Deadbugz: Runtime-Gated MCP Metadata Poisoning as Supply-Chain Attack
- OWASP MCP Security Cheat Sheet
- MCP specification: Tools