Problema 5264
GitHub MCP Explotado: Acceso a repositorios privados mediante MCP
Mostramos una vulnerabilidad crítica en el servidor oficial de GitHub MCP, que permite a atacantes acceder a datos de repositorios privados. Esta vulnerabilidad es una de las primeras descubiertas por el analizador de seguridad de Invariant para detectar flujos de agentes tóxicos.
Invariant ha descubierto una vulnerabilidad crítica que afecta a la integración de GitHub MCP, ampliamente utilizada (14 000 estrellas en GitHub). Esta vulnerabilidad permite a un atacante secuestrar el agente de un usuario mediante una incidencia maliciosa de GitHub y obligarlo a filtrar datos de repositorios privados.
Esta incidencia es una de las primeras descubiertas por los escáneres de seguridad automatizados de Invariant para detectar los llamados flujos de agentes tóxicos. En este caso, un agente es manipulado para realizar acciones no deseadas, como filtrar datos o ejecutar código malicioso. Para más información, consulte a continuación.
Es fundamental concienciar sobre este problema en este momento, ya que la industria se apresura a implementar ampliamente agentes de programación e IDE, lo que podría exponer a los usuarios a ataques similares contra herramientas críticas de desarrollo de software.
Configuración del ataque
En esta configuración de ataque, el usuario utiliza un cliente MCP como Claude Desktop con el servidor MCP de GitHub conectado a su cuenta.
Suponemos que el usuario ha creado dos repositorios:
<usuario>/public-repo: Un repositorio de acceso público que permite a todos en GitHub crear informes de incidencias e informes de errores.
<usuario>/private-repo: Un repositorio privado, por ejemplo, con código propietario o datos privados de la empresa.
Según las reglas estándar de GitHub, un atacante puede crear una incidencia maliciosa en el repositorio público, que contiene una inyección de avisos a la espera de la interacción del agente.
El ataque se activa en cuanto el usuario y propietario de la cuenta de GitHub consulta a su agente con una solicitud benigna, como "Echa un vistazo a los problemas abiertos en <user>/public-repo", lo que provoca que el agente obtenga los problemas del repositorio público y los inyecte.
Como se muestra aquí, en cuanto el agente detecta el problema malicioso de GitHub, puede ser obligado a extraer datos del repositorio privado para contextualizarlos y filtrarlos en una solicitud de solicitud (PR) creada de forma autónoma en el repositorio público, de libre acceso para el atacante o cualquier otra persona.
Flujos tóxicos: A este uso de la inyección indirecta de solicitudes para activar una secuencia de uso de herramientas maliciosas lo denominamos flujo de agente tóxico. Descubrimos esta vulnerabilidad aplicando el analizador de seguridad de Invariant a GitHub MCP, lo que nos permite automatizar el proceso de descubrimiento del flujo en tiempo real. ## Demostración del Ataque
Para ilustrarlo de forma más concreta, implementamos este ataque de forma práctica utilizando un conjunto de repositorios de demostración:
- ukend0464/pacman: Un repositorio público con una implementación simple de un juego de Pacman (disponible aquí)
- Múltiples repositorios privados que contienen proyectos personales e información confidencial del usuario.
Inyección de "Acerca del Autor": Ahora, colocamos una incidencia maliciosa en el repositorio público, accesible para el atacante. La incidencia contiene una carga útil que el agente ejecutará en cuanto consulte la lista de incidencias del repositorio público.
Interacción del Usuario: Para activar el ataque, el usuario simplemente solicita a Claude 4 Opus: "¡Consulta las incidencias en mi repositorio de código abierto de Pacman y resuélvelas!".
Claude utiliza la integración de GitHub MCP para seguir las instrucciones. Durante este proceso, Claude Desktop requiere por defecto que el usuario confirme las llamadas individuales a la herramienta. Sin embargo, muchos usuarios ya optan por la política de confirmación "Permitir Siempre" al usar agentes y dejan de supervisar acciones individuales.
Despliegue del ataque: El agente revisa la lista de problemas hasta encontrar la carga útil del ataque. Intencionalmente, extrae datos privados del repositorio y los filtra en una solicitud de extracción del repositorio pacman, al que el atacante puede acceder libremente, ya que es público.
Claude utiliza la integración de GitHub MCP para seguir las instrucciones. Durante este proceso, Claude Desktop requiere, por defecto, que el usuario confirme las llamadas a herramientas individuales. Sin embargo, muchos usuarios ya optan por la política de confirmación "Permitir siempre" al usar agentes y dejan de supervisar acciones individuales.
Despliegue del ataque: El agente revisa la lista de problemas hasta encontrar la carga útil del ataque. Intencionalmente, extrae datos privados del repositorio y los filtra en una solicitud de extracción del repositorio pacman, al que el atacante puede acceder libremente, ya que es público.
Detección de flujos de agentes tóxicos
A diferencia de los ataques de envenenamiento de herramientas con MCP descubiertos previamente, esta vulnerabilidad no requiere que las herramientas de MCP se vean comprometidas. En cambio, el problema surge incluso con herramientas de plena confianza, ya que los agentes pueden quedar expuestos a información no confiable al conectarse a plataformas externas como GitHub.
Comprender, analizar y mitigar estos problemas en sistemas de agentes es una tarea muy compleja, difícil de realizar manualmente y a gran escala. Para abordar este desafío, Invariant ha desarrollado métodos automatizados para detectar flujos de agentes tóxicos, lo que permite a las organizaciones identificar y modelar amenazas potenciales antes de que puedan ser explotadas por actores maliciosos.
...
Alcance y Mitigaciones
Si bien nuestros experimentos se centraron en Claude Desktop, la vulnerabilidad no es específica de ningún agente o cliente MCP en particular. Afecta a cualquier agente que utilice el servidor MCP de GitHub, independientemente del modelo o la implementación subyacente.
Es importante destacar que no se trata de una falla en el código del servidor MCP de GitHub, sino de un problema arquitectónico fundamental que debe abordarse a nivel del sistema del agente. Esto significa que GitHub por sí solo no puede resolver esta vulnerabilidad mediante parches del lado del servidor.
Por lo tanto, recomendamos las siguientes dos estrategias clave de mitigación para prevenir estos ataques y fortalecer la seguridad de sus sistemas de agentes.
1. Implementar controles de permisos granulares
Al utilizar integraciones de MCP como las de GitHub, es fundamental limitar el acceso del agente únicamente a los repositorios con los que necesita interactuar, siguiendo el principio del mínimo privilegio. Si bien los permisos tradicionales basados en tokens ofrecen cierta protección, a menudo imponen restricciones estrictas que limitan la funcionalidad del agente.
...
2. Realizar una monitorización continua de la seguridad
Además de las medidas preventivas, implemente soluciones de monitorización robustas para detectar y responder a posibles amenazas de seguridad en tiempo real. Recomendamos implementar escáneres de seguridad especializados, como MCP-scan de Invariant, para auditar continuamente las interacciones entre los agentes y los sistemas MCP.
...
Conclusión
En esta entrada de blog, mostramos una vulnerabilidad crítica que afecta al servidor MCP de GitHub, lo que permite a los atacantes secuestrar el agente de un usuario mediante una incidencia maliciosa en GitHub y obligarlo a filtrar datos de repositorios privados. Esta vulnerabilidad es una de las primeras descubiertas por el analizador de seguridad de Invariant para detectar flujos de agentes tóxicos.
...