0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code v2.1.325 セキュリティ修正まとめ|サンドボックス許可と無人実行の変更点

0
Posted at

はじめに

2026年11月13日に公開された Claude Code v2.1.325 は、zstd 圧縮レスポンスのデコード処理に関するセキュリティ修正に加え、許可(パーミッション)とサンドボックスまわりを大きく強化したリリースです。

特に次の2点は、設定を変えないと自動化が止まる可能性があります。

  • サンドボックス内の Bash が、既定で通常の許可確認を求めるようになった
  • /loop やスケジュールタスクで、allowed-tools や hooks を宣言したスキルを実行する前に確認が入るようになった

📌 影響を受ける人

  • CI や夜間バッチなど、無人で Claude Code を動かしている人
  • マネージド設定でサンドボックスを有効にしている組織の管理者
  • /loop やスケジュールタスクでスキルを使っている人
  • Agent SDK、self-hosted runner、worktree 分離を使っている人
  • pluginDigests や、マーケットプレイスの ref 固定を使っている組織

詳細な脆弱性の内容は公開されていません。まずアップデートを優先し、そのうえで設定を見直してください。

変更の全体像

優先度 変更 対応
最優先 zstd デコードのセキュリティ修正 アップデート
高 サンドボックス内 Bash の既定が許可確認に 設定追加を検討
高 スケジュールタスク・/loop の確認強化 permissions.allow を見直す
高 サンドボックス・worktree・self-hosted runner の保護強化 フックや運用を確認
高 許可ルール・サンドボックスの抜け穴修正 基本はアップデートのみ
高 認証・課金まわりの修正 利用状況を確認
中 pluginDigests 非推奨、ref のコミットID対応 組織設定とクライアント版数を確認

変更内容

1. zstd 圧縮レスポンスのデコード修正(critical)

リリースノート冒頭に「Fixed a security issue in how zstd-compressed responses are decoded」と記載されています。詳細は公開されていません。セキュリティ修正なので、速やかなアップデートが推奨されます。

2. サンドボックス内の Bash が既定で許可確認に(Breaking Change)

⚠️ Breaking Change
サンドボックス内の Bash コマンドは、既定で通常の許可フローを通るようになりました。

従来どおり確認なしで実行するには、sandbox.autoAllowBashIfSandboxed: true の設定が必要です。

マネージド設定でサンドボックスを有効にしている組織も、確認なしの実行を続けるには、最も優先度の高いマネージド設定ソースにこの設定を書く必要があります。サンドボックスを前提にした無人実行や自動化は、確認待ちで止まる可能性があります。

3. 無人実行・外部リポジトリ操作の確認強化(Breaking Change)

項目 新しい挙動 対処
信頼していないリポジトリでの読み取り専用 git 確認を求める additionalDirectories ではなく --add-dir で指定
スケジュールタスク・/loop で allowed-tools / hooks 宣言付きスキルを実行 実行前に確認 permissions.allow に Skill(name) を追加
Desktop・IDE・SDK ホストの「Always allow」 ルール単体の保存は、保存すれば同じコマンドが再び許可される場合だけ提示 頼っていたスケジュールタスクが応答待ちで止まらないか確認
スラッシュコマンドの allowed-tools そのターン中・後に起動したバックグラウンドエージェントにも適用されていた問題を修正 対応不要(意図しない許可の拡大が解消)

4. サンドボックス・worktree・self-hosted runner の保護強化(Breaking Change)

  • 追加ディレクトリ内の .claude(settings・skills・agents・commands・hooks)へのサンドボックスからの書き込みを、起動フォルダと同様に拒否
  • 分離された worktree では git bisect run、git maintenance register|start、scalar のセットアップコマンドが拒否される(代替操作が案内される)
  • EnterWorktree は、プロジェクト内のシンボリックリンクを経由する WorktreeCreate フックのパスを拒否する。フックは実パスを出力する必要がある
  • self-hosted runner は、セッションフォルダやリポジトリパスがシンボリックリンクのセッションを拒否(checkout フックのチェックアウトを除く)
  • サンドボックスが自身のために起動するプログラム(ネットワークブリッジなど)の環境から、サインイントークンと API キーを除外
  • ripgrep、ローカルの git、サンドボックスランタイムの補助プログラムの環境から、mTLS クライアント鍵のパスフレーズを除外
  • コンテナにマウントされた worktree やサブモジュールで -p や SDK を実行する場合、.claude/settings.local.json の allow ルールはフォルダが信頼済みになってから適用

5. 許可ルール・サンドボックスの抜け穴修正(セキュリティ)

主なものを整理します。

分類 修正内容
Bash 一部の複合コマンドが確認なしで実行できた抜けを修正(今後は確認)
Bash allow ルールが、指定と別のプログラムを実行しうるケースを修正
Bash 一部コマンドに deny/ask ルールが適用されない問題を修正
ルール解釈 相対パスの deny/ask(例 Read(./.env))が cd の後に効かなくなる問題を修正。追加ディレクトリにも適用
ルール解釈 mcp__plugin_*_ ルールが、大文字小文字の違う MCP サーバー名・ツール名に一致しない問題を修正
ルール解釈 self-hosted runner と claude remote-control で、再起動後の許可承認に deny が適用されない問題を修正
ルール解釈 一部サブフォルダから起動すると、コミット済みの .claude/settings.local.json がユーザー自身の設定として扱われうる問題を修正
サンドボックス コマンドがネイティブアップデーターのダウンロードフォルダに書き込めるケースを修正
サンドボックス worktree の settings と hooks、リンクされた worktree の共有 git フォルダの保護不足を修正
Artifact deny/ask ルールとフックが一部のクラウドセッションで効かない問題、組織外公開 Artifact を確認なしで変更できた問題などを修正
その他 /feedback と /bug は、サインイン中のアカウント・組織が記録したセッションだけをアップロード
その他 メールアドレスをクライアント識別子として使うことも拒否

Read(./.env) のような deny ルールが cd 後に効かなかった問題は、機密ファイルの保護に直結するため、該当する構成の人は特に重要です。

6. 認証・課金まわりの修正

  • claude.ai ログインのバックグラウンドセッションが、バックグラウンドサービスを起動したシェルの API キーやトークンで課金していた問題を修正
  • allowedProviders が許可していないのに、Bedrock のトークン計数で会話が Bedrock に送られていた問題を修正
  • HOME 未設定で AWS credential_process と Google Cloud の既定認証情報が失敗する問題を修正
  • claude auth status などの短いコマンドが Console プロファイルにロックを残し、次のセッションが約1分止まる問題を修正
  • キャッシュ済みのアカウントデータがない場合、claude -p は最初のリクエスト前にそのデータを待つため、クリーンな環境での初回実行が数秒遅れることがある

7. プラグイン・マーケットプレイスの変更

⚠️ Breaking Change
マーケットプレイスの ref にフルのコミット ID を指定できるようになりました。ただし、このバージョンより前のクライアントは、この形式で固定したマーケットプレイスを読み込めません。

  • ALL_PROXY のみ設定されている場合、プラグインとマーケットプレイスのダウンロードは CONNECT トンネルを使う。CONNECT を拒否するプロキシでは失敗する
  • pluginDigests は非推奨となり、無視される。マネージド設定で宣言・有効化され、prependPlugins または appendPlugins に列挙されたリモートマーケットプレイスのプラグインは、組織のプラグインとして扱われる
  • MCP バンドル(.mcpb、.dxt)の展開先が、プラグインフォルダ内の .mcpb-cache からプラグインディレクトリ配下に変更。URL 取得のバンドルは一度だけ再ダウンロードされる
  • --plugin-dir で読み込むプラグイン内の .claude/skills は、上位フォルダで開始したセッションからは読み込まれない

8. その他の注目点

  • Agent SDK: applyFlagSettings() に不正な値が1つあると、それまでの設定がすべて黙って破棄されていた問題を修正。今後はエラーで拒否される
  • モデル設定: opusplan / haiku 設定時に、独自モデル指定のサブエージェントがプランモード用モデルに切り替わる問題を修正。サードパーティゲートウェイや Foundry で毎ターン context length エラーになる問題も修正
  • MCP: バックグラウンド MCP タスクの質問で Esc を押すと「後で回答」になり、質問は /tasks に残る
  • VS Code 拡張: プロンプト候補(Tab で採用、promptSuggestionEnabled: false で無効)と、API キーを作成しない Console サインインを追加
  • Remote Control: claude remote-control は自分で停止したとき終了コード4、登録できないとき69を返す
  • コスト集計: /cost、--max-budget-usd などが mod の $.model.complete / $.model.classify も集計

影響と対応

チェックリスト

  1. 全員: v2.1.325 へアップデートする(zstd 修正のため)
  2. 無人実行・CI: サンドボックス内 Bash の確認待ちで止まらないか検証する
  3. 組織管理者: 確認なし実行を続けたい場合、最優先のマネージド設定ソースに sandbox.autoAllowBashIfSandboxed: true を書く。ただし自動許可は意図したリスクの範囲かを先に判断する
  4. スキル利用者: /loop・スケジュールタスクで使うスキルを permissions.allow に登録する
  5. 外部リポジトリを扱う人: 読み取り専用 git も確認対象。--add-dir で指定する
  6. worktree 利用者: WorktreeCreate フックが実パスを出力するか、git bisect run などを分離 worktree で使っていないか確認する
  7. プラグイン管理者: pluginDigests を見直す。コミット ID 固定のマーケットプレイスは、全メンバーが v2.1.325 以降であることを確認してから導入する
  8. プロキシ環境: ALL_PROXY のみの構成で CONNECT が許可されているか確認する
  9. SDK 利用者: applyFlagSettings() のエラー処理を追加する

💡 Tips
アップデート直後は、無人ジョブを本番投入する前に1回だけ手動で流し、確認プロンプトで止まらないかを見ておくと安全です。

コード例

サンドボックス内 Bash の自動許可を維持する

Before(v2.1.325 より前): サンドボックス有効なら、確認なしで実行されていました。

{
  "sandbox": {
    "enabled": true
  }
}

After(v2.1.325 以降): 確認なしを維持するには明示が必要です。

{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true
  }
}

組織のマネージド設定では、最も優先度の高いマネージド設定ソースに書きます。

/loop やスケジュールタスクでスキルを許可する

{
  "permissions": {
    "allow": [
      "Skill(my-release-check)"
    ]
  }
}

my-release-check は例です。allowed-tools や hooks を宣言したスキルの名前に置き換えてください。

外部リポジトリの読み取り専用 git を確認なしで使う

# Before: additionalDirectories 設定で指定
# After: --add-dir で起動時に指定
claude --add-dir /path/to/other-repo

SDK の applyFlagSettings() を例外処理する

以下は、エラーで拒否されることを想定した書き方の一例です。実際の型や戻り値は SDK のドキュメントで確認してください。

// Before: 不正な値があっても気づかず、設定が黙って破棄されていた
query.applyFlagSettings(settings);

// After: 拒否されたときのエラーを処理する
try {
  await query.applyFlagSettings(settings);
} catch (e) {
  console.error("flag settings rejected:", e);
  // 値を見直して再試行、または起動を中断する
}

CLAUDE.md への追記例

## Sandbox / Permissions
- サンドボックス内の Bash は既定で許可確認を求める。
- 自動許可を維持するには settings.json(組織では最優先のマネージド設定)に
  sandbox.autoAllowBashIfSandboxed: true を追加する。

## Scheduled tasks
- /loop・スケジュールタスクで allowed-tools / hooks 付きスキルを使う場合は
  permissions.allow に Skill(name) を追加する。
- 外部リポジトリへの読み取り専用 git は --add-dir で指定する。

## Worktree
- WorktreeCreate フックは実パス(シンボリックリンクでないパス)を出力すること。
- 分離 worktree では git bisect run 等は使えない。

まとめ

  • v2.1.325 は zstd デコードのセキュリティ修正を含むため、まずアップデートしてください
  • サンドボックス内 Bash は既定で許可確認になりました。無人実行は sandbox.autoAllowBashIfSandboxed: true の要否を判断してください
  • /loop・スケジュールタスクのスキルは permissions.allow に Skill(name) が必要です
  • worktree、self-hosted runner、サンドボックスの保護が強化され、WorktreeCreate フックは実パス出力が必須です
  • pluginDigests は非推奨です。コミット ID 固定のマーケットプレイスは旧クライアントで読み込めません
  • Bash の許可チェック抜け、deny/ask ルールの不適用、課金の取り違えなど、セキュリティ・課金に関わる修正が多数入っています

詳細は 公式リリースノート を確認してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?