Разработчик ferstar опубликовал результаты реверс‑инжиниринга ZCode, официального десктопного приложения Z.ai (разработчик моделей GLM). Пока пользователь залогинен, ZCode в фоне упаковывает всю рабочую директорию: полную историю.git, кэш LFS, reflog и глобальные конфиги приложения.

Архив шифруется и отправляется в Aliyun OSS, объектное хранилище Alibaba Cloud. У себя на диске ferstar нашёл зависший в очереди на отправку 313-мегабайтный зашифрованный архив, собранный из 345 МБ коммерческого проекта (42 411 файлов), со счётчиком в 564 неудачные попытки загрузки.
Манифест упаковки хранится локально в открытом виде. На примере этого снапшота разбивка такая:
Содержимое | Размер | Доля |
|---|---|---|
git/lfs/ (кэш LFS) | 196,1 МБ | 56,8% |
git/objects/ (объекты git) | 102,2 МБ | 29,6% |
git/logs/ (reflog) | 0,6 МБ | 0,2% |
Код и документация | 46,2 МБ | 13,4% |
Папка.git занимает 86,6% архива. В облаке в итоге оказывается история репозитория с первого коммита: ключи, удалённые в более поздних коммитах, названия неопубликованных веток, внутренние хосты из .git/config.
Расшифровать архив не может ни пользователь, ни сам клиент ZCode. Содержимое шифруется локально алгоритмом AES-256-CTR, а симметричный ключ дополнительно оборачивается RSA‑OAEP с публичным ключом, который сервер выдаёт при каждой загрузке. Приватная половина ключа существует только в облаке Z.ai.
Исследователь проверил все приватные ключи на своей машине: ни один не подошёл.
Захват срабатывает перед каждым запросом к модели и при завершении задачи. За одну активную сессию в логах ferstar нашлось 62 таких события. В политике конфиденциальности ZCode это не упоминается: там говорится только про сбор «текста, файлов и кода, отправленных в диалоге».

Просто удалить зависший архив не получится: клиент пересобирает новый 313-мегабайтный снапшот в течение получаса, а счётчик попыток растёт дальше. Рабочий способ остановить выгрузку, который нашёл ferstar, работает на уровне файловой системы: сделать папку с чекпоинтами неизменяемой командой chflags uchg на macOS или chattr +i на Linux.
К моменту публикации официального ответа Z.ai не последовало.
UPD:
Вечером 18 сентября Z.ai ответила на претензии. Заявление опубликовал официальный представитель компании в пользовательском чате; в официальном Weibo его на тот момент не было, текст привело издание «快科技», его перепечатала Sina Finance.
Z.ai извинилась перед затронутыми пользователями и назвала причиной функцию индексации кодовой базы: индекс собирается локально и нужен для чекпоинтов сессии, отката к прошлым версиям и Repo Wiki, а выгрузку данных репозитория запускала именно генерация страниц Wiki.
По версии компании, загруженные данные уничтожаются сразу после сборки страницы в облаке и не сохраняются. Функция была включена по умолчанию с момента запуска, поэтому под выгрузку попала часть пользователей; проблему Z.ai называет исправленной.
При этом в заявлении выгрузка связывается с генерацией страниц Repo Wiki, тогда как ferstar фиксировал захват перед каждым запросом к модели и при завершении задачи.
Дополнительно компания пообещала в ближайшее время открыть исходники ZCode, пригласить сторонних оценщиков для проверки работы системы и публиковать ход проверки, а всем пользователям ZCode выдать внеочередной сброс недельного лимита.
Если новость понравилась, приглашаю в канал AI for Devs. Каждый день публикую похожие материалы: новые модели, агенты, практические кейсы и новости из мира AI.

