ZCode мог получить доступ к намного большему объёму кода, чем предполагал разработчик. Приложение Z.ai работало в фоне, создавая зашифрованные копии целых рабочих папок вместе с Git-историей и попытаясь отправлять их на Alibaba Cloud. Один небольшой публичный репозиторий сервер действительно загрузил.

Разработчик Ferstar обнаружил проблему, заметив, что папка ~/.zcode выросла более чем до 700 МБ. В версии 3.12.3 фоновый процесс создавал архивы при каждой работе с проектом. Два доступных пользователю переключателя не могли остановить упаковку и отправку данных.

Содержимое архива оказалось особенно рискованным. В изученном наборе из 42 411 файлов папка .git занимала 86,6% объёма. Внутри неё находились Git LFS (56,8%) и объекты истории коммитов (29,6%). Вместе с текущим кодом в архив могли попасть забытые API-ключи, удалённые конфигурации, названия неопубликованных веток и внутренние адреса GitLab.

ZCode шифровал данные перед отправкой, используя AES-256-CTR для содержимого и RSA-OAEP для защиты ключа. Публичный RSA-ключ приложение получало от сервера, а закрытый ключ оставался в облаке. Такой доступ превращал ИИ-агента в привилегированного участника инфраструктуры с доступом к исходникам, терминалу и локальным файлам.

Важное уточнение: коммерческий проект размером 313 МБ, найденный Ferstar, не покинул компьютер. Из-за ограничения размера ZCode совершил 564 неудачные попытки загрузки и оставил файл в очереди. Но отдельный публичный репозиторий из 538 файлов успешно загрузился на сервер. Механизм работал, но не каждый подготовленный архив обязательно доходил до облака.

Z.ai признала проблему и заявила, что собранные данные не использовались для обучения моделей. Компания привлекла CAICT и NSFOCUS для проверки, затем удалила объекты и само облачное хранилище. В версии 3.14.0 функцию Repo Wiki убрали вместе с механизмом создания и отправки архивов. Для организаций это стало примером того, как обычная загрузка кода на внешний сервис может привести к утечке без взлома.

Политика конфиденциальности ZCode описывала сбор текста и кода, отправленного в диалогах, но не упоминала о фоновой упаковке всего рабочего пространства и Git-истории.

После публикации Z.ai открыла исходный код ZCode под лицензией Apache 2.0. Публичный репозиторий содержит версию 3.14.0 всего с двумя коммитами, старая реализация загрузки архивов там отсутствует. Исправленную версию можно проверить, но восстановить полную историю изменений загрузчика невозможно. Для разработчиков это критично: современные ИИ-агенты получают доступ не к отдельным фрагментам кода, а ко всему контексту проекта.

Похожая ситуация произошла в июле с Grok Build. Помощник от xAI тоже отправлял целые репозитории с историей изменений, даже когда задача этого не требовала.

Доступ ИИ к репозиторию создаёт и другие риски. В сентябре атака GitSpawn продемонстрировала, что специально подготовленный проект может заставить несколько популярных агентов выполнить команды до первого запроса от программиста.