ZCode は静かに完全な Git ヒストリをアップロードする – プライバシー侵害の分析
ZCode は同意なしにユーザーの完全な Git ヒストリをアップロードする
ポイント: ZCode デスクトップアプリは、ログインしたユーザーのすべての .git ディレクトリを暗号化し、サーバー専用の RSA 公開鍵で暗号化鍵をラップして、アリババクラウドの OSS サービスにアップロードする。ユーザーはこのペイロードを復号できないし、UI のトグルでもデータの流出を止めることはできない。
データ流出の仕組み
結論: ZCode のクライアントはワークスペースを tar.gz でアーカイブし、AES-256-CTR で暗号化し、サーバーが提供する RSA-OAEP 公開鍵で対称鍵をラップして、直接アリババクラウドの OSS バケットに POST する。
- クライアントは
zcode.z.aiに接続し、署名済み OSS フォーム、オブジェクトキー、サイズ制限、およびアップロードごとの RSA 公開鍵を取得する。 - ペイロードには
.gitディレクトリ全体(オブジェクト、LFS キャッシュ、reflogs、設定)とワークツリーが含まれる。 - 暗号化されたアーカイブはローカルに保存される(例:
~/.zcode/v2/checkpoints)が、プライベート RSA 鍵は Z.ai のクラウドにのみ存在するため、ユーザーは復号できない。 - アップロード後、OSS は Z.ai のバックエンドにコールバックしてスナップショットを登録する。
再構成されたフローダイアグラム(元記事の画像参照)は、認証交渉 → ローカルアーカイブ → 暗号化 → 直接 OSS POST → バックエンドコールバック の順序を示している。
実際にアップロードされる内容
結論: アップロードデータの 86% 以上は Git オブジェクトストアであり、削除されたシークレット、リリースされていない機能ブランチ、内部設定を含むリポジトリの完全な履歴が含まれている。
| コンテンツ | サイズ(例) | ペイロード内での割合 |
|---|---|---|
.git/lfs/ |
196.1 MB | 56.8 % |
.git/objects/ |
102.2 MB | 29.6 % |
.git/logs/ |
0.6 MB | 0.2 % |
| ソースコード & ドキュメント | 46.2 MB | 13.4 % |
42,000 ファイルのスナップショットで、345 MB のワークスペースから 313 MB の暗号化アーカイブが生成された。
UI のトグルはアップロードをブロックしない
結論: 2 つの表示される設定項目(Optimize Experience と Repo Snapshot Indexing)は、サーバー側のトレーニングやインデックス作成に影響するだけで、クライアントがスナップショットをアーカイブしてアップロードすることを防げない。
- キャプチャを担当するサイドカーは起動時に条件付きでインスタンス化され、有効な JWT トークンがあるかどうかで制御される。
- セッションログでは、1 セッションで 62 回のキャプチャイベントが記録されており、各プロンプトの前やタスク完了時にトリガーされている。
- エージェントのツール表面(31 ツール)にはスナップショットやテレメトリコマンドが存在せず、データ流出はツールループの外で実行されている。
暗号化鍵の設計はサーバー専用アクセスを確認する
結論: エンベロープ暗号化はサーバー専用の RSA キーを使用しており、アップロードされたアーカイブを復号できるのは Z.ai のみである。
- 公開鍵は認証交渉中に提供される。
- Ferstar は、任意のローカルプライベート鍵でアーカイブを復号しようとしたが失敗した。
- ユーザーのディスク上に保存された暗号文は、ユーザー自身やクライアント自体でも読み取れない。
プライバシーポリシーの欠落
結論: ZCode の公式プライバシーポリシーは、「会話中に送信されたテキスト、ファイル、コードの収集」について言及しているが、完全なワークスペースや Git ヒストリのアップロードについては一切触れていない。
- FAQ エントリ、変更履歴のノート、ポリシーの改訂もスナップショット機能について一切言及していない。
- 関連する唯一の記述は「最適化プログラム」の一般的なオプトアウトであり、記載された行動をカバーしていない。
コミュニティの反応と検証
結論: この発見は迅速に注目を集め、Ferstar の X スレッドは 27.6 万回の閲覧を記録し、中国語版の警告スレッドも 6.38 万回の閲覧を達成した。
- オープンソース AI エージェントの作者である Petri Kuittinen は警告した: 「閉鎖型の AI ハーネスを信頼してはいけない。"
- OrcaPromptVault などの複数の独立した分析が、隠されたチェックポイント/ロールバック機能がアップロードパイプラインをトリガーしていることを裏付けた。
- 一部のユーザーは
~/.zcode/v2/checkpointsディレクトリが表示されないことを報告しており、後続のリリースで仕組みが変更された可能性を示唆しているが、公式発表はまだない。
対策手順
結論: 信頼できる対策は、ファイルシステムレベルでクライアントがチェックポイントディレクトリへの書き込みをブロックすることである。
# 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
- これによりチェックポイント・ロールバック UI は無効化されるが、チャット、自動補完、ツール呼び出しは機能したまま残る。
- 再有効化は、不変フラグを削除することで可能(
chattr -iまたはchflags nouchg)。
ローカル実行モデルに対する広範な影響
結論: オープンウェイトモデルをローカルで実行しても、プライバシーが保証されるわけではない。周囲のハーネス(デスクトップアプリ、アップデートサービス、テレメトリレイヤー)が依然としてデータを流出させることができる。
- 信頼はモデルウェイトだけでなく、全体のランタイムスタックにまで及ぶ必要がある。
- 任意の AI コーディングハーネスに対して重要な 2 つの質問:
- ユーザーがログインしている間、何が送信されているか?
- 保存されたスナップショットの復号鍵は誰が保持しているか?
- この分析の元となった Tokenstead は、Z.ai の対応を継続的に監視し、状況に応じて結果を更新していく。
開発者向けの主な教訓
- オープンウェイトモデルだからといって、完全にオープンなスタックだと仮定してはいけない。 ハーネスが閉鎖的で、非公開のテレメトリを実行している可能性がある。
- 任意の AI サポート IDE のネットワークトラフィックを検査する。クラウドストレージサービスへの出力 POST を探すこと。
- テレメトリ契約を公開し、ユーザーがコードを監査できるオープンソースハーネスを優先すること。
- 監査できない閉鎖型ツールを使用する必要がある場合は、ファイルシステムのハードニング(不変ディレクトリ)を適用すること。
参考文献
- Ferstar, Inside ZCode: Silently Uploading Your Entire Git History to the Cloud, 2026 年 9 月 18 日 – 完全なフォレンジックレポート。
- Ferstar の X スレッド(27.6 万回の閲覧)および FeiZ のスレッド(6.38 万回の閲覧)。
- ZCode の変更履歴およびプライバシーポリシー(公式 Z.ai サイト)。
- OrcaPromptVault による ZCode システムプロンプトのスナップショット。
- V2EX 討論(中国コミュニティの反応)。
- Lookonchain によるこの事件の報道。
Sources
関連
- Dispatch
- Dispatch
- Dispatch
- Dispatch