Разработчик 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.