Обратный анализ показал, что ZCode от Zhipu незаметно выгружает всю историю Git, — плюс способ блокировки на уровне файловой системы
Оригинальный заголовок: ZCode, the GLM coding agent, silently uploads your Git history
Разработчик ferstar провёл обратный анализ настольного приложения ZCode для программирования с ИИ от Z.ai и выяснил, что в авторизованном состоянии оно упаковывает весь рабочий каталог в зашифрованный архив и отправляет его в Alibaba Cloud OSS. За один перехват трафика удалось получить 313 МБ зашифрованного архива — это коммерческое рабочее пространство на 345 МБ и 42411 файлов, причём на каталог .git приходится 86.6%.
Обратный анализ восстановил техническую цепочку, по которой ZCode незаметно упаковывает и выгружает всю историю Git, и дал практический способ блокировки на уровне файловой системы.
18 сентября 2026 года разработчик под ником ferstar опубликовал разбор обратного инжиниринга ZCode — настольного приложения для программирования с ИИ от Z.ai, пекинской компании, стоящей за семейством открытых моделей GLM. Те самые модели крутятся на локальных машинах по всему сообществу local-AI, включая GLM-5.3-Flash, который отслеживается на этом сайте. Выводы читаются хуже, чем большинство скандалов с приватностью: пока приложение авторизовано, оно молча упаковывает всё рабочее пространство пользователя — полную историю .git, кэш ресурсов LFS, рефлоги и глобальные конфиги приложения — шифрует и загружает архив в Aliyun OSS, объектное хранилище Alibaba Cloud. Собственный замер исследователя: зашифрованный архив на 313 МБ, собранный из коммерческого рабочего пространства на 345 МБ, 42,411 файлов, и 564 неудачных попыток загрузки, зафиксированных за время исследования.
Если вы запускаете GLM локально, компания, публикующая веса, — это не то же самое, что среда выполнения, которую разработчик может использовать поверх них. И реакция в треде показала, что путаница жива: несколько комментаторов решили, что ZCode — open source, раз GLM открыт. Это не так. Веса открыты; обвязка закрыта, и это обвязка Z.ai для собственных моделей, подаваемая как first-party-интеграция, которой не может сравниться ни один сторонний редактор.
История разлетелась на обоих языках за считаные часы: пост ferstar набрал 276,000 просмотров, а китайский тред-предупреждение FeiZ («пока отключите ZCode… лучше по возможности использовать открытые ИИ-агенты») привлёк ещё 63,800. Чаще всего цитировали ответ Петри Куиттинена, чей собственный ИИ-агент открыт вместе с документацией по безопасности: «Мой совет был и остаётся таким: НЕ ДОВЕРЯЙТЕ закрытым обвязкам для ИИ».
Деталь, превратившая подозрительный каталог в историю, — ключ шифрования. ZCode использует конвертное шифрование: полезная нагрузка шифруется симметричным ключом, а сам ключ оборачивается публичным ключом RSA-OAEP. Публичный ключ сервер передаёт во время согласования учётных данных для загрузки. Соответствующий приватный ключ живёт только в облаке Z.ai. ferstar попытался развернуть архив всеми приватными ключами, имеющимися в локальной системе, и потерпел неудачу. Шифротекст на 313 МБ, лежащий на диске самого пользователя, не может расшифровать ни пользователь, ни сам клиент ZCode.
Вывод ferstar из поста: «Ключ, которым может пользоваться только сервер, служит ровно одной цели: гарантировать, что сервер прочитает ваш код, когда захочет».
Что попадает в упаковку
Манифест упаковки хранится локально в открытом виде и вполне конкретен. Для снимка из 42,411 файлов:
| Содержимое | Размер | Доля |
|---|---|---|
| .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 процента полезной нагрузки. Это важно, потому что хранилище объектов git — не снимок вашего рабочего дерева, а полная история репозитория с первого дня. Там лежат API-ключи, удалённые в более позднем коммите. Там лежат имена ещё не отправленных веток, выдающие невыпущенные планы продукта. Там лежат внутренние хостнеймы и пути репозиториев из .git/config. Захваченный архив — это годы инженерной истории, а не те файлы, что были у вас открыты.
Пайплайн загрузки, восстановленный по данным клиента app.asar: клиент запрашивает учётные данные у zcode.z.ai, тот возвращает подписи формы OSS, ключ объекта, ограничение по размеру и открытый ключ RSA для каждого раунда; клиент упаковывает рабочее пространство в tar.gz, шифрует через AES-256-CTR, оборачивает симметричный ключ и отправляет архив напрямую в Aliyun OSS, а тот через callback регистрирует снимок на бэкенде Z.ai. Во время теста работающий клиент держал постоянные соединения с zcode.z.ai и двумя узлами Aliyun OSS.
Переключатели его не останавливают
Логичный шаг — открыть настройки. ferstar сопоставил переключатели в интерфейсе с кодом:
- «Оптимизировать опыт» (
optimizeAgentExperienceEnabled) управляет только тем, разрешены ли данные для обучения модели. Съёмка и загрузка снимков продолжаются. - «Индексация снимков репозитория» (
repoSnapshotIndexingEnabled) управляет только тем, индексирует ли сервер загруженные снимки. Локальная упаковка и загрузка продолжаются.
Хостовый компонент при запуске безусловно создаёт sidecar для съёмки, никак не сверяясь с настройками пользователя — единственное требование: провайдер токенов должен выдавать действительный JWT. В журналах сессий видно 62 событий съёмки из одной активной сессии, которые срабатывают перед каждым промптом и по завершении задачи.
Механизм подтверждает и второй источник. OrcaPromptVault, публичная коллекция перехваченных промптов ИИ-инструментов, содержит системный промпт на 131 КБ и набор из 31 инструментов от ZCode. Функция отката/перемотки вшита прямо в системный промпт — шаблон «Workspace rewind applied. rewindId, checkpointId, strategy, restoredFiles» встречается пять раз. Это видимая пользователю верхушка пайплайна снимков, та самая функция, которую отключает блокировка файловой системы.
В полном наборе инструментов агента нет ни одного инструмента для снимков, загрузки или телеметрии. Пайплайн утечки данных — не инструмент агента, а sidecar уровня хоста, созданный вне цикла работы инструментов. Поэтому его не останавливает ни одна настройка прав, и поэтому сам агент его никогда не видит. Во всех 131 КБ перехваченных инструкций нет ни слова об Aliyun, OSS, загрузках или приватности.
Съёмка добавляет деталь, о которой ferstar не упомянул: ZCode поставляет инструмент ReadSessionContext, который по запросу читает другие сохранённые сессии ZCode по ID сессии. Вместе с хостовым sidecar для съёмки это означает, что содержимое сессии и сохраняется локально, и уходит в облако.
В политике конфиденциальности об этом ни слова
В политике конфиденциальности ZCode сказано, что инструмент собирает «текст, файлы и код, отправленные во время бесед» — стандартное раскрытие контекста вывода, которое делает любой ИИ-инструмент для программирования. Но ни в политике, ни в FAQ, ни в журнале изменений ferstar не нашёл упоминаний об упаковке и загрузке целых рабочих пространств и git-историй. Ближе всего — шаблонная фраза о том, что программа оптимизации по умолчанию отключена.
Контекст, который делает всё ещё хуже
ZCode вышел в июле 2026 года, и его запуск строился прямо на доверии. Z.ai позиционировал свой инструмент против Claude Code от Anthropic через несколько недель после скандала со скрытой телеметрией Claude Code, а открытые веса подавал как выход из проблемы kill-switch. Руководитель Z.ai, отвечая в X на вопрос, будет ли в ZCode «какое-либо шпионское ПО», заявил, что компания не станет внедрять «ничего сверх того, что указано» на сайте ZCode.
Съёмка рабочего пространства на сайте ZCode не указана.
Z.ai вышла на Гонконгскую фондовую биржу в январе 2026 года. Официальный аккаунт компании в X на момент публикации так и не ответил на пост ferstar. Самый заметный ответ пришёл с аккаунта, связанного с командой ZCode: «эй, жаль, что вы об этом узнали» — это скорее подтверждает механизм, чем опровергает его. Твит ferstar набрал 276,000 просмотров за 13 часов, а обсуждения на V2EX и в смежных с HN каналах разделились в основном по одному признаку: агенты постоянно загружают фрагменты кода во время вызовов инструментов — и делают это с согласия. А здесь — полный репозиторий со всей историей, без согласия, зашифрованный так, что прочитать его может только сам поставщик.
Защита, которая работает
Удалить ожидающий архив не помогает: клиент за полчаса собрал новый архив на 313 МБ, счётчик повторных попыток растёт. Работает только решение на уровне файловой системы. Сделайте каталог чекпоинтов недоступным для записи на уровне ядра:
Linux:
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
sudo chattr +i ~/.zcode/v2/checkpoints
macOS:
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
chflags uchg ~/.zcode/v2/checkpoints
Плата за это — интерфейс отката чекпоинтов перестаёт работать, а ведь именно эта функция изначально и требовала загрузки вашего кода. Чат, автодополнение и вызовы инструментов работают как обычно. Вернуть всё обратно можно с помощью chattr -i или chflags nouchg.
Что это значит для локального запуска
Запускать открытые веса локально — вот в чём идея: ваша модель, ваше железо, никаких счетов за токены, никаких отключений со стороны поставщика. История ZCode заостряет этот момент за пределами самого слоя модели. Среда вокруг модели — обвязка, десктопное приложение, процесс обновления — тоже часть поверхности доверия, и модель, запущенная локально, но завёрнутая в обвязку, которая стучится в облако, уже не локальна.
Отсюда следуют две проверки, и они касаются любой обвязки в этой сфере, а не только ZCode: что среда выполнения передаёт, когда вы авторизованы, и кто может расшифровать то, что она хранит. Именно поэтому Tokenstead отслеживает обвязки агентов и их телеметрию; этот материал будет обновлён, если Z.ai ответит исправлением, изменением в раскрытии информации или заявлением.
Источники:
- Inside ZCode: Silently Uploading Your Entire Git History to the Cloud — ferstar, 18 сентября 2026 года (полная форензика: восстановление asar, цепочка шифрования, разбор манифеста)
- ferstar в X — сводный тред, 276 тыс. просмотров
- FeiZ в X — тред-предупреждение на китайском, 63.8 тыс. просмотров
- Релизы и журнал изменений ZCode — официальные материалы Z.ai
- Обсуждение на V2EX — реакция сообщества, на китайском
- материал lookonchain
Источник: Hacker News · Coding Agent 讨论 · tokenstead.ai