ZCode subió espacios de trabajo completos, con su historial de Git, a la nube de Z.ai. Z.ai dice que está corregido. Rota tus secretos de todos modos
- Qué pasó
- A researcher found ZCode 3.12.3 silently uploading whole workspaces, full .git history included, to Aliyun OSS, encrypted with a key only Z.ai holds; Z.ai says it's fixed and 3.14.x has no upload code.
- Por qué importa
- The in-app toggles never stopped it, already-uploaded data can't be independently verified as deleted, and Git history keeps secrets you thought you removed.
- Qué hacer
- Update ZCode to 3.14.0 or later and rotate every credential ever committed to a repo you opened in it before the fix.
Si ejecutaste ZCode sobre un repositorio antes de la corrección, da por hecho que el historial completo de Git de ese repositorio salió de tu máquina. Eso incluye los secretos que subiste a un commit una sola vez y borraste después. Actualiza ZCode y luego rota esos secretos. Z.ai dice que la subida ya no existe, y el investigador que la encontró está de acuerdo. Lo que ya se subió está fuera de tu control.
Nuestro veredicto: ZCode sigue siendo condicional. La condición ahora es concreta. Usa la 3.14.0 o posterior, y no des por buena la palabra de un proveedor como prueba de que nadie leyó tus commits antiguos.
Qué ocurrió
El 18 de septiembre, el investigador ferstar publicó una ingeniería inversa de ZCode 3.12.3, el IDE de escritorio agéntico de Z.ai. Los hallazgos:
- El flujo. Mientras tenías la sesión iniciada, ZCode empaquetaba el espacio de trabajo en un archivo, lo cifraba con AES-256-CTR y envolvía la clave con RSA-OAEP-SHA256. La clave pública RSA venía del servidor de Z.ai, así que solo Z.ai podía descifrar el archivo. Después, ZCode enviaba el archivo directamente a Aliyun OSS usando credenciales de subida emitidas por
zcode.z.ai. - El alcance. En el proyecto comercial de prueba de ferstar, una instantánea contenía 42.411 archivos y pesaba 345 MB antes de comprimir. El directorio
.gitrepresentaba el 86,6 %, con LFS en el 56,8 % y los objetos en el 29,6 %. Además, un manifiesto aparte incluía en cada instantánea los archivos de configuración global de ZCode, en todos los espacios de trabajo. - Los disparadores. La captura se ejecutaba antes de cada prompt y al completarse las tareas etiquetadas como
repo-wiki-update. Una sola sesión llegó a producir hasta 62 eventos de captura. - Los interruptores. «Optimize Experience» (optimizar la experiencia) solo regulaba el uso para entrenamiento. «Repo Snapshot Indexing» (indexación de instantáneas del repositorio) solo regulaba la indexación en el servidor. El proceso sidecar de captura y subida arrancaba de forma incondicional al iniciar la app. Cuando ferstar borró un paquete pendiente, ZCode lo capturó de nuevo en menos de media hora.
- La política. Según ferstar, la política de privacidad de Z.ai cubre el texto, los archivos y el código enviados en las conversaciones. No menciona en ningún momento el empaquetado de espacios de trabajo completos ni de historiales de Git.
Qué hizo Z.ai
Z.ai respondió con rapidez, aunque no por los canales que la mayoría de los usuarios vigila. Según las actualizaciones posteriores de ferstar a su publicación:
- 18 de septiembre, 17:44. Z.ai publicó un comunicado oficial en su comunidad de usuarios. Decía que la función «estuvo activada por defecto durante su periodo inicial de lanzamiento», que «algunos usuarios se vieron afectados» y que el problema «ha sido corregido». Prometió abrir el código de ZCode con revisión de terceros y dio a todos los usuarios un restablecimiento extra de la cuota semanal.
- 21 de septiembre. Z.ai publicó zai-org/ZCode(se abre en una pestaña nueva) en GitHub. ferstar comprobó que el pipeline
repoSnapshothabía sido eliminado del código. El comunicado citaba además a NSFOCUS, que según Z.ai «confirmó que el bucket y todos sus objetos internos han sido eliminados, sin que se detecten rutas de transmisión hacia el exterior». Los informes completos de NSFOCUS y CAICT estaban prometidos, pero no aparecían en el comunicado que resumió ferstar. - 23 de septiembre. ferstar desempaquetó ZCode 3.14.3 y encontró «cero apariciones de lógica
repoSnapshot». Los registros de procesos y la carpeta de checkpoints no mostraban ningún empaquetado de espacios de trabajo ni archivos.encnuevos. La auditoría de ferstar de la 3.14.0 ya había encontrado el sidecar de subida desmantelado.
Tokenstead informa por separado de una respuesta de alguien vinculado al equipo de ZCode: «oye, lamento que lo hayas encontrado». Una incidencia de un usuario en el repositorio zcode-plugins de Z.ai, abierta el 18 de septiembre, seguía sin respuesta de Z.ai cuando lo comprobamos el 1 de octubre.
Por qué importa
Z.ai corrigió el cliente con rapidez. Eso no deshace lo ocurrido. Se subieron espacios de trabajo sin avisar, los interruptores de privacidad de la app no lo detuvieron, y los usuarios no podían descifrar sus propios archivos para ver qué se habían llevado. ferstar describe con claridad lo que sigue sin resolverse: demostrar que un bucket se vació después del 20 de septiembre «no puede reconstruir retroactivamente lo que ocurrió con los datos subidos antes del 18 de septiembre».
Calificamos Grok Build CLI como precaución por subidas no divulgadas de repositorios completos. ZCode queda un peldaño por encima porque Z.ai admitió el comportamiento en cuestión de horas, lanzó un cliente sin él y abrió el código para que cualquiera pueda comprobarlo. Ese es el nivel que esperamos cuando se descubre a un proveedor. No hace aceptable el diseño original.
Qué cambia para ti
- Actualiza a la 3.14.0 o posterior. Es la primera compilación que ferstar auditó sin el sidecar de subida. La 3.14.3 también está limpia.
- Rota los secretos. Hazlo con todos los repositorios que abriste en ZCode antes de la corrección, incluidas las claves eliminadas en commits posteriores. El historial de Git las conserva.
- Si todavía no puedes actualizar, usa la solución alternativa de ferstar y haz inmutable la carpeta de checkpoints:
- macOS:
chflags uchg ~/.zcode/v2/checkpoints - Linux:
sudo chattr +i ~/.zcode/v2/checkpoints
Pierdes la reversión de checkpoints de ZCode. Todo lo demás sigue funcionando, según ferstar. - macOS:
Preguntas frecuentes
¿Sigue mi código en los servidores de Z.ai? El comunicado de Z.ai cita a NSFOCUS como confirmación de que el bucket y su contenido fueron eliminados. Nadie fuera de Z.ai puede verificar qué ocurrió con esos datos antes de su eliminación, así que trata los secretos incluidos en commits como expuestos.
¿Se vieron afectadas todas las versiones de ZCode? El análisis de ferstar cubre la 3.12.3. Z.ai dice que la función estuvo activada por defecto «durante su periodo inicial de lanzamiento», pero no ha publicado un rango de versiones.
¿Sigo necesitando la solución alternativa de la carpeta inmutable? No en la 3.14.0 o posterior. En esas compilaciones, ferstar no encontró código de instantáneas que bloquear.
Qué hacer
- 1 Update ZCode to 3.14.0 or later; ferstar found no workspace-snapshot upload code in 3.14.0 or 3.14.3.
- 2 Rotate every credential ever committed to a repository you opened in ZCode before the fix, including ones removed in later commits.
- 3 If you can't update yet, make ~/.zcode/v2/checkpoints immutable (macOS: chflags uchg; Linux: sudo chattr +i) and accept losing checkpoint rollback.
Herramientas y modelos afectados
No vuelvas a tener que ponerte al día
El resumen semanal — solo cambios de veredicto y acciones urgentes. Sin relleno.