Análisis wire-level de Grok Build CLI: envía archivos .env y el repositorio completo a xAI sin redactar

Fuentes: What xAI Grok Build CLI actually sends to xAI - a wire-level analysis (grok 0.2.93)

Un análisis forense reproducible sobre la CLI oficial de xAI, Grok Build (versión 0.2.93, macOS arm64, julio de 2026), revela que la herramienta transmite a los servidores de xAI el contenido íntegro de los archivos que lee —incluidos ficheros .env con credenciales— y, además, vuelca la totalidad del repositorio, incluyendo el historial de git, sin aplicar ningún mecanismo de redacción. La investigación se realizó interceptando el tráfico HTTPS con mitmproxy y mediante la inspección de artefactos locales generados por el binario, sin afectar a sistemas de terceros ni exponer secretos reales.

El estudio documenta dos canales de exfiltración paralelos. En el primero, un turno de modelo enviado a POST cli-chat-proxy.grok.com/v1/responses contiene el contenido literal del archivo .env del usuario, con sus claves API_KEY y DB_PASSWORD, tal como fueron leídas. En el segundo, un archivo session_state se archiva y se sube mediante POST /v1/storage a un bucket de Google Cloud Storage llamado grok-code-session-traces, verificado tanto en las constantes del binario (crates/codegen/xai-data-collector/src/gcs.rs) como en una captura metadata.json. La CLI no aplica certificate pinning, lo que permite la inspección del tráfico.

La parte más relevante del hallazgo es de escala: con un repositorio sintético de 12 GiB de archivos que el agente nunca leyó, la ruta /v1/storage transfirió 5,10 GiB antes de quedar truncada por un corte de stream, mientras que la ruta de modelo solo movió 192 KiB. Esa ratio de 27.800:1 demuestra que la subida está ligada al tamaño del repositorio y no al contenido efectivamente leído. En una prueba controlada con el prompt "responde OK, no leas ningún archivo", Grok subió igualmente el repositorio completo como git bundle, del que se recuperó un archivo no leído con su marcador único intacto. Ninguna de las subidas a almacenamiento devolvió error 4xx/5xx por tamaño; los únicos no-200 fueron cuotas 402/429 del modelo.

El autor aclara que la prueba demuestra transmisión, aceptación HTTP 200 y almacenamiento en GCS, pero no que esos datos se usen para entrenar modelos —una cuestión de política que aborda en otra sección. El envío del repositorio está activo por defecto, no aparece documentado en el quickstart de instalación y no se desactiva al apagar la opción "Improve the model" en /v1/settings, que mantiene trace_upload_enabled: true. El análisis cierra con un apéndice de evidencias que incluye SHA-256 de los artefactos y una lista de lo que el estudio no ha podido demostrar.