Volver al blog

¿Qué envía su asistente de IA al exterior? Auditoría de tráfico con mitmproxy

Análisis del tráfico de GitHub Copilot mostró: el cliente recopila hasta 20 archivos de contexto, diffs de cambios y el contenido del .env abierto; todo se envía al servidor como texto normal, y el historial local del chat se almacena sin cifrado. Instrucciones paso a paso sobre cómo levantar mitmproxy en modo local, capturar la canaria en el cuerpo de la solicitud y por qué la exclusión de contenido estándar no ayuda en modo agente.

📅15 de agosto de 2026
¿Qué envía su asistente de IA al exterior? Auditoría de tráfico con mitmproxy
```html

El 11 de agosto de 2026, un análisis que vale la pena leer se difundió en Hacker News para todos aquellos que utilizan un asistente de IA en su IDE: un investigador configuró VS Code con GitHub Copilot detrás de un proxy interceptador y observó qué datos se enviaban a los servidores. Se descubrió que la solicitud contenía mucho más que la línea que estás escribiendo, incluyendo el contenido del archivo .env en texto plano.

La buena noticia: cualquier persona puede verificar esto, no solo con Copilot. A continuación, se presenta una guía práctica sobre cómo auditar el tráfico de tu asistente en 20-30 minutos, qué buscar en las solicitudes interceptadas y cuáles son las limitaciones de los mecanismos estándar de exclusión de archivos.

Por qué hacerlo uno mismo

La documentación del proveedor describe la política, no el comportamiento real del cliente. Hay un abismo entre "no usamos tu código para entrenar" y "el cliente no envía tu código al servidor": para generar una sugerencia, el modelo necesita obtener contexto, y la cuestión es cuán ampliamente el cliente recopila este contexto.

La auditoría es necesaria si:

  • trabajas bajo un NDA o con datos personales de clientes y necesitas saber qué sale del perímetro;
  • almacenas secretos, configuraciones de entornos, direcciones internas y tokens en el repositorio;
  • eres responsable del cumplimiento en el equipo y necesitas un registro real de las solicitudes, no solo una captura de pantalla de la configuración;
  • simplemente quieres entender por qué el asistente "sabe" de repente sobre un archivo que no has abierto.

Qué se encontró en el tráfico de Copilot

El análisis mencionado se basó en el clásico mitmproxy: se dirigió VS Code a un proxy local en el puerto 8080 y se desactivó la verificación estricta del certificado. Hallazgos clave:

  • El contexto es más amplio que un solo archivo. En las sugerencias en línea, el cliente recopila hasta 20 archivos, 8 resúmenes de las últimas ediciones y 3 líneas de contexto alrededor de cada cambio, además del texto completo del archivo actual y archivos recientemente editados en forma de diffs.
  • Los secretos no están enmascarados. En el cuerpo de la solicitud, el campo prompt contenía una cadena del tipo TEST_ENV_VAR_SECRET="mysecretenvvar" — es decir, las variables de entorno del archivo abierto se enviaban como texto normal.
  • La base de datos local también está abierta. El archivo session-store.db almacena user_message y assistant_response sin cifrado ni edición: en él se acumulaban tokens, claves de proveedores de nube y contraseñas de cadenas de conexión que alguna vez pegaste en el chat.
  • Llamadas de servicio. Además de las sugerencias en sí, el cliente solicita /models, /agents/swe/models, /models/session/intent y endpoints de OAuth de GitHub — a través de ellos se puede ver claramente cómo el asistente clasifica tu solicitud incluso antes de generar una respuesta.

Es importante recordar: el cliente envía al servidor la URL del repositorio actual para obtener la política de exclusiones aplicable. Este hecho por sí solo no es dañino, pero significa que la composición de tu árbol de trabajo también es una señal.

Paso a paso: configurando la interceptación

  1. Instala mitmproxy y ejecútalo. Con el interfaz web es suficiente: mitmweb. Por defecto, el proxy escucha en el puerto 8080, y la consola se abre en el navegador. Para CI y sesiones largas, es más conveniente usar mitmdump.
  2. Instala el certificado raíz. En el primer inicio, mitmproxy crea una CA en el directorio ~/.mitmproxy (archivo mitmproxy-ca-cert.cer). Debes añadirlo a los certificados de confianza; de lo contrario, el cliente interrumpirá la conexión TLS. Durante la auditoría, es suficiente con la confianza a nivel de usuario; después, elimina el certificado, no dejes un CA ajeno en el sistema "por si acaso".
  3. Selecciona el modo de interceptación. Hay tres, y elegir correctamente ahorra una hora de trabajo:
    • regular — proxy normal, el cliente se configura explícitamente. La opción más predecible.
    • local — interceptación transparente de aplicaciones en la misma máquina, sin modificar la configuración del programa: mitmproxy --mode local:Code solo capturará el proceso de VS Code, --mode local:42 — el proceso con el PID especificado, --mode local:!curl — todo excepto curl. Esta es la mejor manera de escuchar al asistente que no tiene configuración de proxy.
    • upstream — cadena, cuando detrás de mitmproxy está tu propio proxy: mitmdump --mode upstream:http://host:8081, y el usuario y la contraseña se establecen con la opción --set upstream_auth=user:pass.
  4. Dirige el IDE al proxy (para el modo regular). En VS Code en settings.json:
    • "http.proxy": "http://127.0.0.1:8080"
    • "http.proxySupport": "override"
    • "http.proxyStrictSSL": false — solo durante la auditoría. Esta bandera desactiva completamente la verificación de certificados, y no se debe dejar en la configuración de trabajo.
  5. Resuelve el problema del certificado de manera adecuada. La extensión Copilot funciona en Node, por lo que el camino correcto es no desactivar la verificación, sino reunir un PEM con las CA raíz más el certificado de mitmproxy y especificarlo a través de la variable de entorno NODE_EXTRA_CA_CERTS. Es necesario reiniciar el IDE: la variable se lee al iniciar el proceso.
  6. Escribe el flujo en un archivo. Mirar en tiempo real es inútil — hay decenas de solicitudes por minuto. Activa --set save_stream_file=flows.dump, y para no recopilar todo, limita la muestra a través de --set save_stream_filter=.... Luego, el archivo se puede analizar tranquilamente sin conexión.
  7. Busca en el cuerpo de la solicitud, no en la URL. Un truco práctico: coloca en un repositorio de prueba un archivo canario con una cadena única (por ejemplo, CANARY_9f3c_DO_NOT_SEND), ábrelo en el editor, trabaja en un archivo vecino — y busca el canario en los cuerpos interceptados. Así verás no el alcance teórico, sino el alcance real de la recopilación de contexto en tu versión del cliente.

Trampas

La licencia puede bloquear la interceptación. En los planes corporativos, Copilot devuelve un error del tipo "Tu licencia actual de Copilot no admite conexiones proxy con certificados autofirmados". Esto no es un error del proxy — el cliente se niega intencionadamente a trabajar a través de un CA autofirmado. Se soluciona con un certificado de confianza a nivel de sistema o construyendo un PEM para Node; si la política de la organización lo prohíbe, la auditoría deberá ser aprobada por el administrador, no eludida.

Pinning y QUIC. Algunos clientes utilizan HTTP/3 sobre QUIC, que un proxy normal no verá. Si después de activar la interceptación la aplicación "funciona, pero el registro está vacío" — casi siempre la razón es esta: bloquea UDP/443 para el proceso de prueba, y el cliente volverá a HTTP/2.

La telemetría y la carga útil van por caminos diferentes. No saques la conclusión "nada se envía" basándote en un solo endpoint: observa toda la lista de hosts a los que accede el proceso, no solo el que se menciona en la documentación.

Marco legal. Se puede interceptar el tráfico en tu propia máquina y en tu propia cuenta. Escuchar el portátil de trabajo de otra persona sin el conocimiento del propietario es otra historia, y ninguna "seguridad" la justifica.

Qué hacer con los resultados

Si la auditoría mostró que se envían archivos innecesarios en las solicitudes, los medios estándar se ven así — y cada uno tiene una limitación notable.

  • Exclusión de contenido. Mecanismo oficial de GitHub que prohíbe a Copilot utilizar las rutas especificadas. Solo está disponible en los planes Business y Enterprise, se configura por el administrador en la configuración de Copilot, y es compatible con VS Code, Visual Studio y JetBrains; en Xcode, Eclipse y Vim/Neovim — solo para sugerencias en línea.
  • El principal agujero — modo agente. La documentación dice claramente que las exclusiones no se admiten en los modos Edit y Agent en Copilot Chat, así como en Copilot CLI. Es decir, exactamente donde el asistente navega por los archivos, lee configuraciones y ejecuta comandos, la filtración de la plataforma no se aplica. Si confías en la exclusión de contenido como la única barrera — en modo agente no hay barrera.
  • .gitignore no protege. Un mito común: la exclusión del índice de Git no significa que se excluya del contexto del asistente.
  • Mínimo organizacional. Los secretos deben ir al gestor de secretos, no al .env junto al código; el chat del asistente no es un lugar para insertar cadenas de conexión; la base local de historial debe limpiarse igual que limpias el historial de shell.

Dónde está el proxy y por qué lo necesitas

La interceptación tiene una continuación práctica. Primero, el modo upstream permite pasar todo el tráfico del asistente a través de un nodo de salida controlado: ves simultáneamente las solicitudes y gestionas desde qué dirección se envían. Esto es necesario cuando la API del asistente no está disponible en tu región o cuando la política corporativa requiere una IP de salida fija — para tal escenario, son adecuados los proxies de centro de datos con dirección constante.

En segundo lugar, el mismo entorno será útil para depurar la automatización: cuando el agente de IA navega por sitios web, la interceptación muestra qué encabezados realmente envía y en qué lo atrapan las protecciones. Analizamos esta conexión en un artículo sobre proxies para agentes de IA en Playwright y MCP — allí se habla sobre la elección del tipo de dirección para escenarios de agente, donde se necesita una IP residencial, no una de servidor.

Si nunca has levantado mitmproxy, comienza con la configuración básica de interceptación HTTPS — está detalladamente descrita en nuestra guía de interceptación de tráfico a través de mitmproxy, y sobre ella puedes construir los modos local y upstream.

Conclusión

La auditoría del tráfico del asistente de IA no es paranoia, sino una higiene ingenieril normal que toma una noche y se hace una vez. El análisis de Copilot mostró una imagen clara: el cliente recopila contexto de manera amplia, los secretos entran en este contexto junto con el código, el historial local se almacena en texto claro, y las exclusiones estándar no funcionan precisamente en el modo más peligroso — el modo agente.

Verifica no la documentación, sino el tráfico. Levanta mitmproxy en modo local, coloca un canario en el repositorio, recopila el flujo en un archivo y observa con tus propios ojos qué sale de tu máquina. Luego, la decisión es simple: o aceptas conscientemente este volumen de transmisión, o sacas los secretos fuera del árbol de trabajo antes de que un servidor ajeno los vea.

```