ZCode от Z.ai шифрует и выгружает полную историю git в облако Alibaba
Разработчик ferstar опубликовал результаты реверс-инжиниринга десктопного клиента ZCode от Z.ai (автор моделей GLM). Пока пользователь залогинен, приложение в фоне пакует всю рабочую директорию: полную историю .git, кэш LFS, reflog и глобальные конфиги. Архив уходит в Aliyun OSS, объектное хранилище Alibaba Cloud.
На диске ferstar нашёлся зависший в очереди 313-мегабайтный зашифрованный архив, собранный из 345 МБ коммерческого проекта (42 411 файлов), со счётчиком в 564 неудачные попытки загрузки. Манифест упаковки хранится локально в открытом виде. Разбивка снапшота: .git/lfs — 196,1 МБ (56,8%), .git/objects — 102,2 МБ (29,6%), .git/logs — 0,6 МБ (0,2%), код и документация — 46,2 МБ (13,4%). Папка .git занимает 86,6% архива.
Шифрование конвертное: содержимое закрывается AES-256-CTR, а симметричный ключ оборачивается RSA-OAEP-SHA256 публичным ключом, который сервер выдаёт при каждой загрузке. Приватная половина живёт только в облаке Z.ai. Все приватные ключи на машине ferstar не подошли, то есть открыть архив не может ни пользователь, ни сам клиент.
Захват срабатывает перед каждым запросом к модели и при завершении задачи, за одну активную сессию нашлось 62 события. Настройки не помогают: «Optimize Experience» управляет только разрешением на обучение моделей, «Repo Snapshot Indexing» — только индексацией на сервере. Удаление архива не работает, за полчаса собирается новый 313-мегабайтный снапшот. Остановить выгрузку можно лишь запретом записи на уровне файловой системы, chflags uchg на macOS или chattr +i на Linux, и тогда перестаёт работать UI отката к чекпоинтам.
Z.ai извинилась в тот же день, связав выгрузку с функцией индексации репозитория для Repo Wiki, включённой по умолчанию на старте, и пообещала открыть исходники ZCode.