Claude Code 2.1.187 がサンドボックスによる AWS キーの読み取りを防ぐ
Claude Code v2.1.187 の新しい sandbox.credentials 設定は、サンドボックス内の Bash コマンドが実行される前に、認証情報ファイルの読み取りを拒否し、秘密の環境変数を解除します。デフォルトの読み取りポリシーが穴だった理由と、それを塞ぐ方法を解説します。
Claude Code の Bash サンドボックスには、細かい注意書きを読むとすぐに気づく非対称性が常にありました。書き込みは厳しくロックされる一方で、読み取りは大きく開いているのです。2026-06-24 にリリースされた v2.1.187 から、ついに本格的な対策が登場しました。新しい sandbox.credentials 設定は、特定の認証情報ファイルの読み取りを拒否し、サンドボックス内でコマンドが実行される前に秘密の環境変数を解除します。
なぜデフォルトの読み取りポリシーが穴だったのか
サンドボックスは書き込みを作業ディレクトリとセッションの一時ディレクトリに制限し、ネットワークトラフィックを許可リスト方式のプロキシ経由でルーティングします。しかしデフォルトの読み取り動作は「特定の拒否されたディレクトリを除き、コンピューター全体への読み取りアクセス」です。これには ~/.aws/credentials と ~/.ssh/ が明示的に含まれます。さらに、サンドボックス内の Bash コマンドは親プロセスの環境を継承するため、shell でエクスポートした GITHUB_TOKEN や NPM_TOKEN は、Claude が実行するすべてのコマンドから見えてしまいます。
これが重要なのは、ネットワーク側が密閉されていないからです。組み込みのプロキシはクライアントが渡したホスト名に基づいて許可を判断し、TLS を検査しません。github.com のような広いドメインを許可すると、侵害されたコマンドやプロンプトインジェクションを受けたコマンドにもっともらしい持ち出し経路ができます。キーへの読み取りアクセスに加えて利用可能な出口チャネルがあるのは、無人で動くエージェントでまさに避けたい組み合わせです。
sandbox.credentials の仕組み
新しいブロックには files と envVars の 2 つの配列があります。リストされたファイルはサンドボックス内での読み取りが拒否され、これは filesystem.denyRead が適用するのと同じ仕組みです。リストされた環境変数は、各サンドボックスコマンドの実行前に解除されます。
{
"sandbox": {
"enabled": true,
"credentials": {
"files": [
{ "path": "~/.aws/credentials", "mode": "deny" },
{ "path": "~/.ssh", "mode": "deny" }
],
"envVars": [
{ "name": "GITHUB_TOKEN", "mode": "deny" },
{ "name": "NPM_TOKEN", "mode": "deny" }
]
}
}
}
各エントリは "mode": "deny" を持ち、現時点ではこれが唯一サポートされる値です。明示的なフィールドにより、スキーマは将来のモードに対して開かれたままになります。ファイルパスは sandbox.filesystem.* の他の部分と同じプレフィックス規則に従います。~/ はホームディレクトリ、/ は絶対パス、プレフィックスのないパスはプロジェクト相対です。
なぜ denyRead だけでなく専用ブロックなのか
認証情報の読み取りは filesystem.denyRead でもすでに拒否できました。新しいブロックの意義は、ファイルの拒否を環境変数の解除とまとめてグループ化し、すべての設定スコープにわたってマージする点にあります。ユーザー設定、プロジェクト設定、管理対象設定のエントリは結合され、deny が唯一のモードであるため、どのスコープでも制限を追加できますが、削除できるスコープはありません。
これにより、管理対象のデプロイにとってきれいなレバーになります。MDM から ~/.aws と ~/.ssh の拒否に加えてトークンの解除を配布すれば、開発者はローカルでそれらを広げられません。これは厳格なポリシーと自然に組み合わさります。enabled: true、failIfUnavailable: true、そして allowUnsandboxedCommands: false です。
知っておくべき 2 つの注意点
組み込みの拒否リストはありません。制限されるのは名前を挙げたファイルと変数だけなので、空の設定では何も保護されません。この設定もサンドボックス内の Bash コマンドにのみ影響します。サンドボックスの有無にかかわらずすべてのサブプロセスから Anthropic とクラウドプロバイダーの認証情報を取り除くには、代わりに環境変数 CLAUDE_CODE_SUBPROCESS_ENV_SCRUB を設定してください。
完全には信頼していないリポジトリに対して Claude Code を auto-allow モードで実行しているなら、これは今日追加すべき設定です。詳細はサンドボックスのドキュメントにあります。
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.