veilletech.fr
19 sept. Feed du jour
#05 VIE PRIVÉE Faille

ZCode : votre historique Git part dans le cloud

Une sauvegarde dont vous n'avez pas la clé n'est pas votre sauvegarde.

Un développeur a démonté ZCode, l'application de code assisté par IA de Zhipu, et décrit un envoi silencieux de tout l'espace de travail vers le stockage cloud d'Alibaba tant qu'on est connecté, historique Git complet compris. L'archive est chiffrée avec une clé publique fournie par le serveur, dont l'utilisateur n'a jamais la clé privée, et aucun réglage de l'interface ne coupe la capture.

3 min de lectureintermédiairevidéo 1:17
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Le mécanisme
  3. Ce qui part
  4. Pourquoi les réglages n'y changent rien
  5. Comment s'y prendre
  6. À retenir

Ce qui se passe

ZCode est l'application de bureau de Zhipu (Z.ai) pour coder avec un agent IA. En cherchant pourquoi son dossier ~/.zcode dépassait 700 Mo, l'auteur du blog ferstar y a trouvé, dans v2/checkpoints/, une archive chiffrée de 313 Mo correspondant à 345 Mo d'un projet commercial, marquée baseline, avec 564 tentatives d'envoi échouées au compteur.

En démontant app.asar, il reconstitue le circuit : tant que l'utilisateur est connecté, l'application empaquette l'espace de travail, le chiffre et l'envoie vers Aliyun OSS, le stockage objet d'Alibaba Cloud.

Précision de méthode : c'est l'enquête d'une seule personne, par rétro-ingénierie, et l'article ne fait état d'aucune réponse de Zhipu.

Le mécanisme

  1. Le client appelle POST /api/v1/snapshot/upload-credential sur zcode.z.ai, qui renvoie un identifiant d'instantané, des signatures de formulaire OSS, une taille maximale et une clé publique RSA.
  2. Il compresse l'espace de travail en tar.gz, le chiffre en AES-256-CTR avec une clé éphémère, et enveloppe celle-ci en RSA-OAEP-SHA256 avec la clé publique reçue.
  3. Il dépose l'archive directement sur OSS, qui prévient ensuite le serveur de Zhipu.

La clé privée n'est jamais sur la machine : ni l'utilisateur ni l'application ne peuvent rouvrir l'archive. Seul le serveur le peut.

Les déclencheurs relevés : avant chaque prompt (captureBeforePrompt) et en fin de tâche. Une seule session a produit jusqu'à 62 captures.

Ce qui part

Le manifeste, lui, reste en clair sur le disque. Sur 42 411 fichiers :

Contenu Taille Part
.git/lfs/ 196,1 Mo 56,8 %
.git/objects/ 102,2 Mo 29,6 %
.git/logs/ 0,6 Mo 0,2 %
sources et documentation ~46,2 Mo 13,4 %

Le dossier .git fait donc 86,6 % de l'envoi. Avec lui partent les secrets supprimés dans des commits ultérieurs, les branches jamais poussées et les adresses des dépôts internes inscrites dans .git/config.

Pourquoi les réglages n'y changent rien

Le composant de capture est instancié sans condition au démarrage ; il lui suffit d'un jeton de session valide. Supprimer l'archive ne sert pas non plus : l'auteur l'a vue se reconstituer en une demi-heure.

Comment s'y prendre

La parade de l'auteur verrouille le dossier au niveau du système de fichiers. Sur macOS :

Terminal
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
chflags uchg ~/.zcode/v2/checkpoints
touch ~/.zcode/v2/checkpoints/test   # doit répondre "Operation not permitted"

Sur Linux, sudo chattr +i ~/.zcode/v2/checkpoints remplace chflags. Pour revenir en arrière : chflags nouchg ou sudo chattr -i. La fonction de retour en arrière de l'application cesse alors de fonctionner.

Source : Inside ZCode: Silently Uploading Your Entire Git History to the Cloud, blog de ferstar (version anglaise traduite par l'auteur avec une IA), septembre 2026.