Skip to content

AIエージェントによるローカルGit環境の汚染とサンドボックス隔離の重要性

1. 概要

AIエージェントが開発者のローカル環境で直接コマンドを実行するモデル(ホスト直接実行型)において、エージェントの内部処理やテスト用フィクスチャのバグが、開発者のPC環境を破壊するリスクが報告されている。 本稿では、Claude Code(anthropics/claude-code#68630)における「Git IDの汚染およびローカル作業ツリーの不可逆的な消失バグ」を分析し、コンテナサンドボックス(sunaba)による物理隔離の必要性について考察する。


2. インシデント事例:claude-code#68630 の分析

2.1. Git アイデンティティ(user.name / user.email)の書き換え

Claude Code CLIが一時的な検証用ブランチを作成して動作する --worktree オプションの処理において、内部のテスト用フィクスチャが以下の処理をホストPCに対して直接実行してしまうバグが発生した。

  • 開発者の親ワークツリー(ローカル環境)の git config の user.name および user.email を、無断で Test <test@test.com> に書き換える。
  • この書き換えはエージェントのセッション終了後も永続化されるため、開発者が気づかずに以降のコミットを行うと、すべてのコミッター名が Test <test@test.com> に汚染される。

2.2. 親ワークツリーのHEAD汚染と「空コミット」の無断生成

バグの影響により、エージェントが動作している親ワークツリーのカレントブランチの HEAD に、Test 名義の空コミット(init 等のメッセージ)が自動で複数回(最大8回以上)勝手に積み重ねられ、Gitの歴史が汚染された。

2.3. 未コミットの作業ファイル(in-flight work)の不可逆な消失

最も深刻な被害として、親ワークツリーで開発者が作業中だった「コミット前の変更ファイル群(in-flight work)」が、エージェントの実行によって無断で破棄・消失した。

  • 復旧不可能性の理由: エージェントがGitの低レベルコマンド(Plumbingコマンド: git read-treegit checkout-index 等の共有インデックス操作)を裏で叩いたため、git stashgit refloggit fsck のいずれの変更履歴(バックアップ)にも残らない形で、完全に不透明(Opaque)にファイルがクローバー(上書き消去)された。これにより、ローカル編集中のコードが永久に失われる事態となった。

3. サンドボックス物理隔離(sunaba)による絶対的防衛

このインシデントは、AIエージェントにローカルホスト(人間が普段使っている環境)のGit構成ファイルを直接触らせることが、いかに重大な「セキュリティ・データ破壊リスク」を孕んでいるかを証明している。

コンテナによる物理的隔離を行う sunaba は、このリスクを構造レベルで解決する。

3.1. Git構成ファイルの隔離

  • sunaba では、すべてのGit操作、シェル実行、ツール適用がコンテナ(Docker)内の独立したサンドボックス環境で完結する。
  • ホスト側のグローバルな .gitconfig や、人間が直接触っている親リポジトリのメタ情報は完全に隠蔽される。AIがどれだけ内部で git configTest に書き換えようとも、ホスト側の開発者の本物のアイデンティティは一切汚染されない。

3.2. 作業ツリーの物理的保護

  • エージェントが検証・修正を行う作業領域(Workspace)は、コンテナ内に一時的にクローンまたはマウントされた使い捨ての空間である。
  • AIが git read-tree などの破壊的な低レベルコマンドを実行してインデックスを破壊したり、未コミットのファイルを消失させたりしても、その被害は使い捨てのコンテナ内部に限定される。ホスト側にある開発者の「未コミットの本番コード」は、物理的に隔てられた境界線の外側にあるため、1文字たりとも損なわれるリスクはない。

4. 結論

AIエージェントによるGitアイデンティティの汚染や、Gitのバックアップ履歴に残らない形での作業破壊は、ホスト直接実行モデルにおいて最も防ぐことが難しい「サイレントな惨劇」である。 sunaba が採用する「AIにはコンテナ内の使い捨ての身体のみを与え、ホストの本番環境からは物理的に隔離する」という境界防御の設計思想は、単にインジェクション対策だけでなく、AIの予期せぬ内部バグや暴走から開発者の「過去の歴史(Git履歴)」と「未来のコード(未コミットの変更)」を無傷で守るために、絶対に必要な免疫システムであるといえる。


5. 参考文献 / 一次情報

Shiori pointer-RAG automation experiment.