はじめに
2026年10月23日にリリースされた Claude Code v2.1.309 は、機能追加よりも セキュリティ境界の穴埋め が中心のリリースです。
- サンドボックス内のBashコマンドで、シェルの起動ファイルが サンドボックスの外で実行されていた
-
denyWriteやEdit(path)の denyルールが、symlinkやサブシェル経由で すり抜けられた - PowerShellフックが終了コード2を返しても ブロックしなかった(fail-open)
さらに、sed -i の扱い、claude ultrareview の信頼確認必須化など、CIやスクリプト運用に影響する挙動変更 も含まれます。
📌 影響を受ける人
- サンドボックスや
denyWrite/ deny ルールで Claude Code を安全に運用している人- Windows で PowerShell フック(
PreToolUse/PermissionRequest)をガードレールに使っている人claude ultrareviewをスクリプト・CI から実行している人- Desktop / VS Code の bypass permissions モードで無人セッションを回している人
- Amazon Bedrock(
ANTHROPIC_BEDROCK_BASE_URL)経由で利用している人
結論として、全員が v2.1.309 以降へ更新 することを推奨します。
変更の全体像
| 区分 | 件数 | 優先度 |
|---|---|---|
| サンドボックス脱出系の修正 | 5項目 | 🔴 critical |
| 権限チェック・worktree隔離・フック | 10項目+4項目 | 🟠 high |
| 挙動変更(Breaking) | 5項目 | 🟠 high |
| その他の改善・修正 | 多数 | 🟡 medium/low |
変更内容
1. サンドボックスの抜け穴(critical)
| # | 内容 | 対象OS |
|---|---|---|
| 1 | サンドボックス内のBashコマンド実行のたびに、シェルの起動ファイルがサンドボックス外で実行されていた | macOS / Linux |
| 2 |
denyWrite のglobパターンが、パターンのフォルダにsymlink経由で到達した場合に実体パス側へ適用されなかった |
macOS |
| 3 | サンドボックス内のコマンドや自動承認された編集で、--mcp-config に渡したMCP設定ファイルを書き換えられた |
全般 |
| 4 | バックグラウンドコマンドがセッション終了後も動き続けると、書き込み禁止が解除されていた | Linux |
| 5 | 親の /proc を共有するサンドボックスで、ReadがPDFのページ範囲指定に「File does not exist」を返していた |
Linux |
⚠️ 注意
(1) は「毎回のコマンド実行」が対象でした。.zshrcなどの起動ファイルに外部へ影響する処理(環境変数の注入やネットワーク通信など)が入っている環境では、サンドボックスが期待どおりに働いていなかった可能性があります。
(3) は、MCP設定がサンドボックス内から改ざんできた問題です。MCPサーバーは外部ツール実行の入り口になるため、設定改ざんは影響が大きくなります。
2. Bash / PowerShell の権限チェックとworktree隔離(high)
確認が出るべきコマンドが素通りする、denyルールが効かない、というケースが多数修正されました。
- リダイレクト先を開けずに失敗しうるコマンドが設定した変数を、Bashの権限チェックが信用していた
-
cdをラップまたはプレフィックス付きで書いてからgitを実行する複合コマンドで、通常のcdと同じ確認が出なかった - サブシェルを含む一部のコマンドで、
Edit(path)のdenyルールがそのパスへのBashリダイレクトを止められなかった - worktree隔離セッションで、ロケール接頭辞付きの一部コマンドや、zshの一部の算術コマンドを隔離ガードが受け入れていた
- Claude Codeが作るworktreeとブランチのチェックアウトも、他のgit操作と同様に
git replace refsを無視するよう変更 - 設定ディレクトリにsymlink経由で到達した場合に、プロファイルストアの書き込み保護が効かなかった
- print/SDKセッションで、無効化したMCPサーバーが後の権限確認をきっかけに再接続されていた
- split-paneのエージェントチームメイトが、リーダーのコマンドラインで指定したツールdenyや
--toolsルールを引き継いでいなかった - Windows: 現在のディレクトリを対象とし、余分な引数を持つ
Set-Location/cdをPowerShellの権限チェックが自動承認していた(今後は承認を求めます)
3. フックの fail-open(high)
| 問題 | 修正 |
|---|---|
| PowerShellで動くフックが、終了コード2を返してもブロックしなかった | 終了コード2でブロックされる |
Windowsで "shell": "powershell" の PreToolUse / PermissionRequest フックが、Git for Windows未導入の環境で失敗時に通過扱いだった |
修正済み |
modの turn.step フックで haiku などの別名を指定すると、全リクエストがモデルエラーになっていた |
別名が対応モデルに解決される |
| フックモジュールの入れ子が深すぎる場合、素のスタックオーバーフローになっていた | ファイル名を示すエラーを表示 |
フックは「危険な操作を止める最後の砦」として使われがちです。fail-open(失敗時に通してしまう) は、ガードレールとして最も避けたい挙動でした。
4. 挙動変更(Breaking)
⚠️ Breaking Change
以下は設定やスクリプトの見直しが必要になる可能性があります。
| 変更 | 内容 | 対応 |
|---|---|---|
sed -i |
疑似的な編集プレビューではなく標準のBash確認が出て、書いたとおりに実行される。/rewind では戻せない
|
重要な編集前はgitでコミット・退避 |
claude ultrareview |
ワークスペースの信頼確認が必須に。ターミナルでは確認を求め、それ以外では拒否 | スクリプトでは --trust-workspace を付与、または環境変数を設定 |
| bypass permissions モード(Desktop / VS Code) | 危険な rm / rmdir は確認を出さず即座に拒否し、書き換えのヒントを返す |
無人セッションは止まらず継続。代替コマンドが提示される |
| サンドボックス除外コマンド | サンドボックスが有効なのに動作できない状況では、書き込み許可リストのパスに書く前に確認を求める。サンドボックスなしの代替実行は拒否 | 除外設定の見直し |
| worktree作成・再利用 | gitがオブジェクトを都度取得しないよう変更。partial cloneは事前に取得 | 基本的に対応不要 |
5. その他の主な改善・修正
-
/claude-api スキル: Managed Agentsのサブエージェントチームを
coordinatorではなく、dynamic workflowsが既定でオンのmultiagent_20261001で構築するようになりました。OpenTelemetryトレース周りの誤った説明も修正されています。 -
Amazon Bedrock:
ANTHROPIC_BEDROCK_BASE_URLに既定のbedrock-runtime.<region>.amazonaws.comを設定すると、fine-grained tool streamingがオフのままになる問題を修正。 - Claude Tag(Slack): チャンネル向けに承認した下書きがDMに誤投稿される問題を修正。チャンネル指定のない投稿は拒否されます。
- 大きなネストCLAUDE.md: サイズ上限を超えると圧縮(compaction)が繰り返される問題を修正。超過分は先頭部分だけが読み込まれます。
- VS Code拡張: Edit/Write後にProblemsを待つ時間が従来の1〜1.5秒から多くの場合0.75秒に短縮。空の「Untitled」セッションが溜まる問題なども修正。
- GitHub: PR・issue・コメントで役割名やプレースホルダーをメンションとして書き、無関係なユーザーに通知が飛ぶ問題を修正。
- Windows: 内部で実行するgitコマンドを高速化。全プラットフォームでgitのエラーを英語で表示。
影響と対応
対応チェックリスト
- 更新する: すべての環境(CLI / Desktop / VS Code / CI)を v2.1.309 以降にします。
-
サンドボックス利用者: シェル起動ファイルに機密や副作用のある処理がないか確認します。
--mcp-configで渡す設定ファイルの差分も確認してください。 - Windows + PowerShellフック: 終了コード2でブロックされることを実際に試します。Git for Windows未導入環境での挙動も確認します。
-
CI / スクリプト:
claude ultrareviewを使っている場合は信頼確認の対応を入れます。 -
sed -iの運用:/rewindで戻せないため、作業前にコミットします。 - CLAUDE.md: ネストCLAUDE.mdは小さく保ち、重要な指示は先頭に置きます。上限を超えると先頭部分しか読まれません。
-
Managed Agents: サブエージェントチームの既定が
multiagent_20261001に変わっている点を把握します。
💡 Tips
過去のセッションで「denyしているはずなのに書き込まれた」という形跡がないか、gitの差分や監査ログで振り返っておくと安心です。
コード例
ultrareview をスクリプトから実行する
Before
claude ultrareview 123 main
After(方法1: フラグを付ける)
PR番号やベースブランチは --trust-workspace より前に書きます。
claude ultrareview 123 main --trust-workspace
After(方法2: 環境変数で信頼確認を無効化)
export CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1
claude ultrareview 123 main
⚠️ 注意
信頼確認を無効化すると、信頼できないリポジトリでも確認なしで実行されます。信頼済みのCI環境に限定してください。
CLAUDE.md に追記する運用ルール例
## Claude Code 運用ルール / CI・スクリプト
- `claude ultrareview` をスクリプトから実行する際は `--trust-workspace`
(PR番号・ベースブランチはその前)か
`CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1` が必要
- `sed -i` による編集は `/rewind` で戻せない。実行前にコミットしておく
## CLAUDE.md 運用
- ネストCLAUDE.mdはサイズ上限を超えると先頭部分しか読み込まれない。
小さく保ち、重要な指示は先頭に置く
まとめ
- v2.1.309 は サンドボックス・権限チェック・フックのすり抜けを塞ぐセキュリティ重視のリリース。特にサンドボックス内のシェル起動ファイルの扱いは影響が大きい。
- PowerShellフックの 終了コード2でブロックされない問題とfail-open が直り、Windowsのガードレールがようやく期待どおりに動く。
-
sed -i(/rewind不可)、ultrareviewの信頼確認必須化、bypassモードでのrm即拒否 は、スクリプトや無人運用の見直しが必要。 - Bedrock、VS Code、Slack(Claude Tag)、Managed Agents(
multiagent_20261001)にも実用的な修正が入っている。 - まずは更新し、サンドボックス・フック・CI の3点を確認するのが最短の対応。