Z.ai hat Funktionen seines Coding-Assistenten ZCode abgeschaltet, nachdem Entwickler festgestellt hatten, dass der Desktop-Client lokale Repository-Daten in die Cloud übertrug. Reuters berichtete am 21. September über die Entschuldigung des Unternehmens und die Deaktivierung betroffener Funktionen.
Der Fall geht über normale Telemetrie hinaus. Eine technische Analyse des Entwicklers Ferstar dokumentiert, dass ZCode komplette Workspace-Snapshots vorbereitete. Dazu gehörte auch das .git-Verzeichnis mit Historie, Objekten und weiteren Repository-Daten. In einem untersuchten Projekt umfasste der vorbereitete Snapshot 42.411 Dateien. 86,6 Prozent des Datenvolumens stammten aus .git.
Z.ai bestätigte später, dass die Ursache im Codebase-Indexing lag. Nach Darstellung des Unternehmens konnte die Repo-Wiki-Funktion Repository-Daten für die Verarbeitung in der Cloud hochladen. Die Funktion war in der frühen Produktphase standardmäßig aktiviert. Z.ai sagt, die hochgeladenen Daten seien nach der Verarbeitung gelöscht und nicht gespeichert worden.
Der Snapshot enthielt mehr als den aktuellen Quellcode
Für einen Coding-Agenten ist Repository-Kontext nützlich. Eine vollständige Git-Historie enthält aber andere Informationen als der aktuelle Working Tree.
Frühere Commits können gelöschten Code, alte Konfigurationen und andere historische Projektinformationen enthalten. Genau deshalb ist die Frage relevant, welcher Teil eines Repositorys einen lokalen Agenten verlassen darf.
Ferstar analysierte den Desktop-Client und verfolgte den Snapshot-Prozess. Bei einem kommerziellen Projekt wurden 42.411 Dateien mit 345,5 MB Ausgangsgröße in ein verschlüsseltes Archiv gepackt. Der .git-Anteil machte nach seiner Auswertung 86,6 Prozent des Archivs aus.
Dieser konkrete 313-MB-Snapshot wurde laut Analyse wegen wiederholter Upload-Fehler nicht übertragen. Ein kleineres Test-Repository wurde dagegen vom Server angenommen. Die Zahlen dürfen deshalb nicht als Umfang eines bestätigten Datenabflusses bei allen ZCode-Nutzern gelesen werden. Sie dokumentieren, was der Client in einem untersuchten Fall für die Übertragung vorbereitete.
Die Verschlüsselung löste das Vertrauensproblem nicht
ZCode verschlüsselte die vorbereiteten Archive. Das schützt Daten auf dem Transportweg, beantwortet aber nicht, wer sie anschließend lesen kann.
Nach Ferstars Analyse erhielt der Client den öffentlichen Schlüssel für die Verschlüsselung vom Z.ai-Backend. Der zum Entschlüsseln notwendige private Schlüssel lag nicht beim Nutzer. Damit konnte der Entwickler den erzeugten Snapshot selbst nicht öffnen und auch nicht unabhängig prüfen, was serverseitig mit einem erfolgreich übertragenen Archiv geschah.
Z.ai sagt, dass für Repo Wiki hochgeladene Daten unmittelbar nach der Generierung gelöscht wurden und nicht für Modelltraining verwendet worden seien. Diese Aussagen stammen vom Anbieter.
Am 21. September veröffentlichte Z.ai zusätzliche Ergebnisse zweier Prüfungen. Nach Unternehmensangaben stellte die China Academy of Information and Communications Technology fest, dass der betroffene Alibaba-Cloud-OSS-Bucket keine Daten mehr enthielt. NSFOCUS bestätigte laut Z.ai die Löschung der Objekte und des Buckets.
Diese Prüfungen stützen den aktuellen Zustand der untersuchten Infrastruktur. Sie beantworten nicht rückwirkend jede Frage dazu, welche Daten zuvor übertragen, verarbeitet oder möglicherweise anderweitig kopiert wurden. Vollständige öffentliche Auditberichte lagen bei der Recherche nicht vor.
Ein ausgeschalteter Schalter muss den Datenpfad tatsächlich stoppen
Die ursprüngliche Analyse enthält noch einen zweiten technischen Punkt. Ferstar berichtet, dass relevante Einstellungen im Client den Snapshot-Prozess in seinen Tests nicht zuverlässig unterbanden.
Z.ai hat den betroffenen Workflow inzwischen verändert. Das Unternehmen nennt Client-Version 3.14.0 und hat ZCode zusätzlich als Open Source veröffentlicht. Nach den von Z.ai zitierten Prüfungen wurde Repo Wiki entfernt und der bisherige Snapshot-Pfad deaktiviert.
Für Coding-Agenten ist das eine konkrete Architekturfrage: Eine UI-Einstellung ist keine Sicherheitsgrenze, wenn der darunterliegende Datenpfad unabhängig davon weiterläuft. Teams müssen deshalb nicht nur dokumentieren, welche Daten ein Agent verwenden darf. Die Durchsetzung muss an der Stelle stattfinden, an der Dateien gesammelt und übertragen werden.
Repository-Historie braucht eine eigene Datenklassifizierung
Viele Agentenprodukte behandeln ein geöffnetes Repository als einen zusammenhängenden Kontext. Aus Sicherheitssicht ist das zu grob.
Working Tree, Git-Historie, lokale Konfiguration und große LFS-Objekte haben unterschiedliche Zwecke und können unterschiedliche Daten enthalten. Ein Agent, der für semantische Suche den aktuellen Quellcode benötigt, braucht deshalb nicht automatisch die gesamte Repository-Historie für einen Cloud-Dienst.
Der ZCode-Fall liefert dafür eine ungewöhnlich konkrete Messung: Bei dem untersuchten Projekt lag der größte Teil des vorbereiteten Datenvolumens nicht im aktuellen Source Tree, sondern in .git.
Die noch fehlende Zahl ist die Zahl tatsächlich betroffener Nutzer und erfolgreich übertragener privater Repositories. Z.ai hat dafür bislang keine belastbare öffentliche Gesamtzahl genannt.