Cplt:AIコーディングエージェントまたはプレーンシェルをカーネルレベルのサンドボックス内で実行
Cplt は、AI コーディングエージェント(GitHub Copilot CLI、OpenCode、Google Gemini CLI など)やプレーンシェルをカーネルレベルで隔離するサンドボックスラッパーです。macOS では Apple Seatbelt、Linux では Landlock LSM + seccomp-BPF を使用し、ファイルシステム、環境変数、ネットワークへのアクセスを制限して機密情報を保護します。
記事インテリジェンス
要点
- AI コーディングエージェント向けのカーネルレベルサンドボックス。macOS と Linux に対応。
- .env ファイル、SSH 鍵、クラウド認証情報、Git フックなどのアクセスをデフォルトでブロック。
- 環境変数をサニタイズし、npm ライフサイクルスクリプトをブロックしてサプライチェーン攻撃を防止。
- ネットワークはデフォルトでポート 443 のみ許可、localhost へのアクセスはブロック。追加設定可能。
重要な理由
このニュースが重要なのは、AI コーディングエージェント向けのカーネルレベルサンドボックス。macOS と Linux に対応ためです。
技術的影響
モデル選定、推論コスト、プロダクト能力、評価基準に影響する可能性があります。
Cplt は、AI コーディングエージェントを安全に実行するためのサンドボックスラッパーです。GitHub Copilot CLI、OpenCode、Google Gemini CLI などのエージェントや、通常のシェルをカーネルレベルで隔離し、機密情報へのアクセスを防ぎます。このプロジェクトはノルウェー労働福祉庁(NAV)によって開発され、AI エージェントがもたらすセキュリティリスク、特に認証情報や秘密鍵の漏洩を防ぐことを目的としています。
Cplt は OS のカーネルセキュリティメカニズムを活用します。macOS では Apple Seatbelt(sandbox-exec)、Linux では Landlock LSM と seccomp-BPF の組み合わせ(カーネル 5.13 以上、完全なネットワークフィルタリングには 6.7 以上が必要)を使用します。このカーネルレベルのサンドボックスにより、エージェントや子プロセスが制限されたリソースにアクセスしようとしても、カーネルが直接ブロックします。
ファイルシステムの隔離が中核機能です。Cplt はデフォルトでプロジェクトディレクトリへの読み書きを許可しますが、以下のファイルへのアクセスはカーネルレベルでブロックします:
- .env で始まるファイル、.pem、.key などの鍵ファイル。
- .git/hooks、.git/config、.gitmodules など Git 設定(悪意のあるフックやサブモジュールハイジャックなどの永続化攻撃を防止)。
- /tmp、/var/folders などの一時ディレクトリでの実行(書き込み後に実行する攻撃を防止)。
- ~/Library/Caches 内の実行可能ファイル(特別に許可された場合を除く)。
- ~/.ssh、~/.gnupg、~/.aws、~/.azure などの一般的な機密ディレクトリ。
- クラウドサービスの認証情報ファイル(~/.kube、~/.docker、~/.config/gcloud など)。
- パッケージマネージャの認証情報(~/.npmrc、~/.pypirc、~/.gem/credentials など)。
環境変数に関しても強化されています。Cplt はホワイトリスト方式で安全な変数のみを通過させ、npm/yarn/pnpm のライフサイクルスクリプト(postinstall フック)をブロックするためのセキュリティ強化変数を注入します。デフォルトでは、AWS_、AZURE_、NPM_TOKEN、DATABASE_URL、SSH 関連の変数はすべてフィルタリングされます。ユーザーは --pass-env フラグで必要な変数を明示的に追加できます。
ネットワーク制御では、デフォルトで送信 TCP ポート 443 のみを許可し、その他のポートはすべてブロックします。--allow-port で追加のポートを許可できます。特に、localhost への送信アクセスはデフォルトでブロックされており、ローカルサービス(データベースや Web サーバーなど)へのアクセスを防ぎます。Turbopack や Vite などのビルドツールで localhost アクセスが必要な場合は、--allow-localhost-any で許可できます。
インストールは簡単です。Homebrew では brew install navikt/tap/cplt、または curl スクリプトや GitHub Releases からバイナリをダウンロードできます。インストール後、cplt --shell-install を実行すると、copilot コマンドが自動的にサンドボックス版を使用するようにシェルエイリアスが設定されます。Cplt には再帰防止機能も組み込まれており、サンドボックス内で再度起動しようとすると拒否します。
Cplt は豊富な設定オプションを提供します。プロジェクトディレクトリの指定(-d)、外部パスの読み取り/書き込み許可(--allow-read/--allow-write)、特定パスのブロック(--deny-path)、localhost 接続の許可(--allow-localhost)などが可能です。上級ユーザー向けには、npm ライフサイクルスクリプトの実行を許可する --allow-lifecycle-scripts や、GPG 署名を許可する --allow-gpg-signing(公開鍵のみアクセス可能)も用意されています。
このプロジェクトは GitHub でオープンソースとして公開されており、詳細なセキュリティモデル(SECURITY.md)も提供されています。Cplt の目標は、AI コーディングエージェントの自動化の利便性を損なうことなく、ユーザーのセキュリティを確保することです。Copilot や OpenCode などのツールを使用する開発者にとって、Cplt は注目すべきセキュリティ強化ツールです。