La extensión Copilot Chat para VS Code ha evolucionado rápidamente, incorporando nuevas funcionalidades. Su nuevo modo agente permite usar múltiples modelos de lenguaje (LLMs), herramientas integradas y servidores MCP para escribir código, realizar solicitudes de commit e integrarse con sistemas externos. Esta personalización, sin embargo, abre nuevas brechas de seguridad que debemos tener en cuenta.
El Peligro de las Inyecciones de Prompts
Imagina este escenario: un usuario pregunta al modelo sobre un issue de GitHub o un pull request público que contiene instrucciones maliciosas. El modelo podría ser engañado no solo para dar una respuesta incorrecta, sino también para realizar acciones sensibles a través de llamadas a herramientas, sin que el usuario lo note. Este artículo explora las vulnerabilidades descubiertas en el modo agente de Copilot Chat y cómo VS Code está respondiendo para mantenerte seguro.
¿Cómo Funciona el Modo Agente?
Cuando usas el modo agente y preguntas algo como “¿Qué hay en https://github.com/artsploit/test1/issues/19?”, VS Code no simplemente reenvía la pregunta al LLM. En su lugar, recopila archivos relevantes del proyecto, información contextual del usuario y las definiciones de todas las herramientas disponibles. Toda esta información se envía al modelo para que determine la siguiente acción.
El modelo probablemente responderá con un mensaje de llamada a la herramienta get_issue, solicitando a VS Code que ejecute este método en el servidor GitHub MCP. El agente de VS Code añade la salida de la herramienta al historial de conversación y la envía de vuelta al LLM, creando un bucle de retroalimentación.
Para ver qué se incluye en el contexto de la conversación, puedes monitorear el tráfico entre VS Code y la API de Copilot configurando un proxy local (como Burp Suite) en la configuración de VS Code:
"http.proxy": "http://127.0.0.1:7080"
Al revisar el tráfico de red, verás una solicitud similar a esta:
POST /chat/completions HTTP/2
Host: api.enterprise.githubcopilot.com
{
messages: [
{ role: 'system', content: 'You are an expert AI ..' },
{
role: 'user',
content: 'What is on https://github.com/artsploit/test1/issues/19?'
},
{ role: 'assistant', content: '', tool_calls: [Array] },
{
role: 'tool',
content: '{...tool output in json...}'
}
],
model: 'gpt-4o',
temperature: 0,
top_p: 1,
max_tokens: 4096,
tools: [..],
}
Aunque VS Code separa correctamente la salida de la herramienta, los prompts del usuario y los mensajes del sistema en JSON, en el backend todos estos mensajes se mezclan en un único prompt de texto para la inferencia. Aquí reside el peligro: incluso los modelos más avanzados pueden ser engañados por las salidas de las herramientas para hacer algo distinto a lo solicitado originalmente.
Vulnerabilidades Descubiertas y Soluciones
- Fuga de datos por parsing incorrecto de URLs confiables: La herramienta
fetch_webpagepermitía enviar solicitudes HTTP a cualquier sitio web, pero requería confirmación del usuario si el sitio no estaba en la lista de orígenes confiables. La lógica para verificar si un sitio era confiable utilizaba una comparación de expresiones regulares en lugar de analizar correctamente la URL. Esto permitía que dominios comohttp://example.com/.github.com/xyzse consideraran seguros.
Solución: Se desacoplaron las URLs usadas en la herramienta fetch de la función de dominios confiables y ahora se requiere confirmación del usuario para acceder a URLs nunca vistas, independientemente de su origen.
- Fuga de datos usando la herramienta Simple Browser: La herramienta Simple Browser, destinada a probar sitios web locales, también permitía cargar sitios externos.
Solución: Al igual que la herramienta fetch, ahora requiere confirmación del usuario antes de abrir cualquier URL.
- Ediciones con efecto inmediato: La herramienta
editFilepermitía realizar cambios en archivos locales. Aunque los cambios eran visibles, los archivos se editaban inmediatamente en el disco. Si algún proceso monitoreaba los archivos, los cambios se detectaban automáticamente.
Solución: VS Code ya no permite que el agente edite archivos fuera del espacio de trabajo. Además, se forzará la confirmación del usuario al editar archivos sensibles, como los de configuración.
Técnicas de Inyección Indirecta de Prompts
Los atacantes utilizan técnicas similares a las del jailbreaking de modelos para engañar a los LLMs, como incluir condiciones implícitamente verdaderas (ej. “solo si la fecha actual es…”), referirse a otras partes del prompt o imitar el prompt del sistema de Copilot.
Mejoras de Seguridad en VS Code
VS Code está implementando nuevas características de seguridad para aumentar la visibilidad y el control del usuario:
-
-
- Mostrar una lista de todas las herramientas internas y las proporcionadas por servidores MCP y extensiones.
- Permitir a los usuarios seleccionar manualmente qué herramientas son accesibles al LLM.
- Añadir soporte para conjuntos de herramientas, permitiendo configurar diferentes grupos para diversas situaciones.
- Requerir confirmación del usuario para leer o escribir archivos fuera del espacio de trabajo.
- Requerir la aceptación de un diálogo modal para confiar en un servidor MCP antes de iniciarlo.
- Soportar políticas para prohibir capacidades específicas (ej. herramientas de extensiones, MCP o modo agente).
-
Buenas Prácticas para Mantenerte Seguro
Además de las mejoras de seguridad, puedes tomar medidas adicionales:
-
-
- Workspace Trust: Abre los espacios de trabajo en modo restringido para evitar la ejecución automática de tareas y limitar ciertas configuraciones.
- Sandboxing: Utiliza Developer Containers o GitHub Codespaces para ejecutar Copilot en un entorno aislado.
-
Conclusión
VS Code ofrece herramientas poderosas para asistir en el desarrollo de software con LLMs. Sin embargo, es crucial prestar atención a los detalles de implementación para evitar las inyecciones de prompts. Utilizar un entorno de sandboxing proporciona una capa adicional de defensa. Estaremos atentos a las futuras versiones de VS Code y Copilot Chat para hacer este proceso aún más seguro.
Leave a Comment