あるAIコーディングツールが、作業フォルダを丸ごと、しかもGitの履歴ごと暗号化して、ユーザーに断りなくクラウドへ送ろうとしていた。見つけたきっかけは、セキュリティ監査ではない。ノートPCの空き容量が足りなくなったことだった。何が送られていたのか、なぜ本人にも中身を開けなかったのかを整理する。あわせて、自分のPCでAIツールのフォルダがどれだけ膨らんでいるかも測った。
ZCode事件の経緯と数字(送信対象の86.6%は.gitフォルダで、削除済みのAPIキーも履歴に残っていた)。自分の環境で実測したAIツールのローカル保存量(Codex 8.4GB、Claude 1.7GB)。それを踏まえて、見慣れないツールを入れる前後に確認しておきたい5項目。
開発者のferstar氏は、ストレージ256GBの最小構成のMacBook Airで空き容量を探していた。そのとき、~/.zcodeというフォルダが700MBを超えていることに気づいた。ZCodeは、中国のZhipu(Z.ai)が提供するAIコーディングツールだ。
フォルダを掘ると、v2/checkpoints/だけで303MBあり、その中に313MBの暗号化ファイル(.enc)が1つあった。隣に置かれたメタデータには、次の値が記録されていた。
# メタデータの主な値(元記事の記載より)
"kind": "baseline"
"workspaceSizeBytes": 345549173 # 作業フォルダ 約345MB
"encryptedSizeBytes": 313070842 # 圧縮・暗号化後 約313MB
"failureCount": 564 # 送信に564回失敗していた
564回の失敗は、送信が一度きりの操作ではなく、繰り返し再試行されていたことを示している。失敗したパッケージがディスクに残り続けたため、容量が膨らんでいた。送信が成功し続けていたら、ディスクに痕跡は残らず、気づかれなかった可能性が高い。
氏がクライアントを解析したところ、ZCodeはzcode.z.aiの/api/v1/snapshot/upload-credentialから一時的な認証情報を受け取り、Aliyun OSS(Alibaba Cloudのオブジェクトストレージ)へ直接アップロードする作りだった。パッケージには42,411ファイルが含まれ、内訳は次の通り。
| 中身 | 容量 | 比率 | 何が含まれるか |
|---|---|---|---|
| .git/lfs/(LFSキャッシュ) | 196.1MB | 56.8% | Git LFSで管理している大きなファイルの実体 |
| .git/objects/(コミット履歴) | 102.2MB | 29.6% | 過去のすべての版。後のコミットで消した秘密情報も含む |
| .git/logs/(reflog) | 0.6MB | 0.2% | ブランチ操作の記録。未pushのローカルブランチ名も出る |
| ソースコード・ドキュメント | 約46.2MB | 13.4% | いま見えているファイル |
氏は、後のコミットで削除したはずの過去のAPIキーや機密設定が履歴ごと含まれていたことを指摘している。「最新版からは消したから大丈夫」という感覚は、.gitごと持ち出されると通用しない。
中身はAES-256-CTRで暗号化され、その鍵をサーバーから渡されたRSA公開鍵で包む「エンベロープ暗号化」だった。対になる秘密鍵はサーバー側にしかない。つまり自分のディスクにある313MBの暗号文を、自分では開けない。何が入っているのかを確かめる手段すら、ユーザーには無かったことになる。
影響のあった3.12.3では、「Optimize Experience」や「Repo Snapshot Indexing」といった関連しそうなトグルをオフにしても、アップロードは止まらなかったと報告されている。設定画面で送信を切ったつもりでも、実際に止まったとは限らない。
ここが核心。AIツールに渡る情報は「チャットに貼ったもの」だけとは限らない。作業フォルダを開いた時点で、そのフォルダの.gitに入っている過去のすべてが、ツールの手の届く範囲に入る。
app.asar)を展開して確認すると、アップロード処理のコードは取り除かれ、ローカルのチェックポイントだけが残っていた。認証情報を払い出すエンドポイントも404を返すようになった。.encの生成が起きていないことを、実行ログとフォルダの中身で確認したと報告されている。古いバージョンを使い続ける人に向けて、氏はチェックポイントのフォルダを空にしたうえで、OSの機能で書き込み禁止にする対策を示している。
# macOS
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
chflags uchg ~/.zcode/v2/checkpoints
# Linux
rm -rf ~/.zcode/v2/checkpoints
mkdir -p ~/.zcode/v2/checkpoints
sudo chattr +i ~/.zcode/v2/checkpoints
# 元に戻す: chflags nouchg / sudo chattr -i
ただし、これは特定バージョンの特定パスに対する応急処置だ。一番確実なのは、送信コードが削除された版へ更新するか、使うのをやめることだろう。
他人事として読む前に、自分のWindows機で、普段使っているAIツールのホームフォルダを測った(2026-09-30時点)。
| フォルダ | 合計 | 大きい中身 |
|---|---|---|
| ~/.codex(Codex) | 約8.4GB・9,052ファイル | sessions 約5.0GB、会話履歴のSQLite 約835MB、archived_sessions 約647MB、ログのSQLite 約302MB |
| ~/.claude(Claude Code) | 約1.7GB・1,619ファイル | projects(会話記録)約1.67GB、file-history(編集前のファイル控え)約56MB |
誤解のないように書いておくと、これはZCodeと同じことが起きているという話ではない。どちらも会話の記録や編集履歴をローカルに残しているだけで、容量を見ただけでは送信の有無はわからない。ただ、この数字から言えることが2つある。
会話にはコードの断片や、うっかり貼った設定値も入る。数GB単位の記録が、プロジェクトフォルダの外に溜まっているということだ。バックアップやクラウド同期の対象に入れていないかは、ツールの挙動とは別に確認しておきたい。
ZCodeの件も、発覚の糸口は容量の異常だった。導入直後と1か月後の大きさを一度見ておけば、見慣れない.encや急な膨張に気づける。数字の基準を持っていなければ、700MBが多いのかどうかも判断できない。
~/.ツール名の容量と中身を確認する。自分で開けない暗号化ファイルがあれば、何のためのものかを調べる。AIツールの信頼境界については、過去にも別の角度から書いている。GitHub CopilotをMitMプロキシ越しに覗いたら、.envの秘密が漏れていたは「通信を見る」側から、Atlassian Rovoのデータ持ち出し実例は「権限の内側でも漏れる」側から扱った記事だ。今回の件は、そこに「ディスクから気づく」という3つ目の入口を足すものになる。
出典: ferstar「ZCode silent workspace snapshot upload」(blog.ferstar.org、2026-09-18)、Hacker Newsでの議論(237pt)。容量の数値は元記事の記載による。第4章は筆者環境での実測。