セキュリティ
ZCodeは開発者のGit履歴を丸ごと無断でアップロードしていた。Z.aiの修正は「すでに誰が読んだか」を語らない
Z.aiのAIコーディングエージェントは、ワークスペース全体を——完全なGit履歴も含めて——暗号化アーカイブに固め、同社だけが復号できるクラウドのバケットへ密かに送っていた。修正対応は迅速で異例なほど開かれているが、すでに持ち出されたデータの行方だけは別だ。
MAI
9月18日、あるリバースエンジニアリングの報告が、Z.ai——かつて智譜AI(Zhipu AI)として知られ、オープンウェイトのGLMモデルを手がける中国のラボ——をめぐる一週間の精査の引き金を引いた。対象はモデルではない。Z.aiのAIコーディングエージェント「ZCode」であり、判明したのは、このツールが開発者の作業ディレクトリ——ソースコード、設定、そして完全なGit履歴——を暗号化アーカイブに固め、本人が何かを共有すると決める前にクラウドストレージへアップロードしていた、という事実だった。
ツールは何をしていたのか
ZCodeは開発者のエディタ内で動作し、コーディング支援ツールに必要なファイルシステムへのアクセス権を持つ。クライアントを分解した研究者によれば、バックグラウンドの「コードベースのインデックス作成」処理が、サインイン時、プロジェクトを開いたとき、あるいはエージェントの高度な機能を有効にしたときに起動していた——いずれも「自分のコードをアップロードする」という明確な意思決定ではない。この処理はワークスペースを収集し、とりわけ .git ディレクトリ一式——コミット履歴、Gitオブジェクト、Git LFSのキャッシュ——を丸ごと取り込んだ。そして結果をAES-256-CTRで圧縮・暗号化し、Z.aiのサーバーからRSA公開鍵とアリババクラウド(Alibaba Cloud)のオブジェクトストレージ認証情報を取得して、アーカイブを送り上げた。
研究者が分析した一つのインストール環境の数字が、その規模を物語る。
| 収集された内容 | 詳細 |
|---|---|
| 暗号化アーカイブのサイズ | 313 MB |
| 梱包されたファイル数 | 42,411(345.5 MBのワークスペースから) |
| ペイロードに占めるGitデータの割合 | 86.6% |
| 1スナップショットのアップロード試行回数 | 564回 |
| 暗号化 | AES-256-CTR、復号鍵はZ.aiが保持 |
| トリガー | サインイン/プロジェクトを開く/エージェント機能の有効化 |
| 同意の確認 | なし |
サイズ以上に重要な点が二つある。第一に、同意のステップが存在しなかった——サインインするだけで十分だった。第二に、復号鍵をZ.aiが握っていた。つまり開発者は、ベンダーのバケットに置かれた自分自身のリポジトリのコピーを、読むことも制御することもできなかった。プライベートなコードベースにとって、完全なGit履歴は現在の作業ツリーよりも失う痛手が大きいことが多い——削除したはずの秘密情報、社内のブランチ名、ソフトウェアがどう作られてきたかの記録すべてを含みうるからだ。
Z.aiの対応
同社の名誉のために言えば、反応は迅速で、異例なほど開かれていた。Z.aiは報告が出たその日のうちに問題を認め、謝罪した。9月20日にはZCodeのクライアントのソースをGitHubで公開し、リポジトリは一日のうちに数千のスターを集めた。同社はこの公開を、コードをコミュニティの精査にさらすものだと位置づけた。9月21日には是正策を示した。問題の機能は新しいクライアントバージョンで削除され、二つの中国のセキュリティ機関——国家系のCAICT(中国信息通信研究院)とベンダーのNSFOCUS(绿盟科技)——が検証を委託された。CAICTはストレージバケットが「ゼロデータ状態」に達し、当該機能が消えたと報告し、NSFOCUSは修正後のクライアントにローカルのスナップショットを再生成してアップロードする経路は見つからなかったとした。Z.aiは、データオブジェクトとバケットそのものを削除したとしている。
不祥事のあとにツールをオープンソース化するのは、多くのベンダー以上の対応であり、バケットの削除も正しい判断だ。しかし、これらの監査が描くのは「修正後」の世界である。アーカイブが存在していた間に誰がそれを読んだのか、どれだけの期間保持されたのか、すでに収集された履歴がどうなったのかを、監査は語らないし、語りえない。監査報告の全文は同社の声明時点で未公開であり、二つの監査機関はいずれもZ.aiが依頼したものだった。そもそもコーディング支援ツールがなぜGit履歴を丸ごと必要としたのか、謝罪はそこに直接触れなかった。
Z.aiの話ではない部分
これを「中国製アプリがデータで不穏なことをした」と片づけたくなる。しかしその枠組みは、より有用な教訓を取り逃がす。AIコーディングエージェントとは、構造上、あなたのソースツリーへの読み取りアクセスと、その作り手への生きた接続を併せ持つプログラムだ。文脈のためにコードベースをインデックス化することが価値提案の本体であり、そのインデックスをどこかへ送ることは、設定フラグ一つで「機能」になる。ZCodeは記録に残る事例だが、その仕組みに一つのラボや一つの国に固有のものは何もない。これらのエージェントが何を送信しているのかを開示する業界共通の規範は存在せず、事後ではなく事前に監査する独立機関も存在しない。
いまAIコーディングエージェントを使う人にとって、実践的な対応はベンダーを問わず同じだ。ZCodeを使っているなら更新すること——修正済みクライアントは当該機能を削除している。より一般的には、これらのエージェントをデータ流出面(data-egress surface)として扱うこと。既定で有効になっているインデックス作成やテレメトリを確認し、自分のマシンから出ても構わないコードにこそ向けさせ、機微なリポジトリではネットワーク挙動を監視する。利便性は本物だ。だが、あなたのコードを読むものは、それを送ることもできるという事実もまた本物である。
出典: Tom's Hardware, ZCode source on GitHub (zai-org/ZCode), StableLearn: ZCode Git-history upload incident, RuntimeWire: Z.ai open-sources ZCode after Git-history upload, DEV: ZCode answered its critics — open source, third-party audits, a deleted bucket