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.221|zsh の [[ ]] で権限チェックが素通りしていた|毎日Changelog解説

0
Posted at

Claude Codeの公式Changelogをリリースから最速で翻訳・解説しています。

zsh の [[ ]] 正規表現条件にコマンドを隠すと、Bash ツールの権限チェックを通り抜けて実行できていました。v2.1.221 でこの穴が塞がり、該当するコマンドは許可プロンプトを出すようになります。allow ルールを細かく書いて自動実行させている環境ほど、通る / 通らないの境界が動きます。

今回の注目ポイント

  1. zsh の隠しコマンドが Bash ツールの権限チェックを抜けていた - [[ ]] の正規表現条件に仕込んだコマンドが、確認なしで実行されていた (v2.1.221)
  2. print モードで MCP サーバーが初回ターンに間に合っていなかった - --mcp-config で渡したツールの呼び出しが、そのまま文字列として出力されていた (v2.1.221)
  3. サンドボックスの認証情報ファイルにマスクモードが追加 - Linux / WSL でダミー値を読ませ、外向き通信でプロキシが実値に差し替える (v2.1.221)
  4. VSCode に Focus view が追加 - ツール実行ログをターン単位の折りたたみサマリに畳む。Ctrl+Alt+F で切り替え (v2.1.221)
  5. バックグラウンドセッションが commit と push をするようになった - draft PR はタスクが要求するときだけ作り、最後に成果物の置き場を報告 (v2.1.221)
  6. auto モードの権限チェックがキャッシュ済みプレフィックスを再利用 - 並列ツール呼び出しのプロンプトキャッシュ費用が下がる (v2.1.221)

zsh の [[ ]] に隠したコマンドが実行できていた

[[ ]] は zsh の条件式構文で、=~ の右辺に正規表現を書けます。ここにコマンドを紛れ込ませると、Bash ツールの権限チェックが素通りし、allow にも deny にも引っかからないまま処理が走っていました。ユーザーの承認を挟まずに実行できてしまう形です。

Fixed a Bash tool permission-check bypass where zsh could execute hidden commands in [[ ]] regex conditionals; affected commands now prompt for permission

塞ぎ方は「例外扱いをやめて承認側に倒す」。抜けていたコマンドは v2.1.221 から許可プロンプトの対象になります。

allow ルールで Bash を自動実行させている環境が対象。これまで確認なしで通っていたパターンが、承認待ちに変わります。無人でパイプラインを回しているなら、途中で止まる箇所が出ないか確認しておいてください。

同じリリースで Windows 側の権限チェックも直っています。PowerShell に引用符を含むパスを渡すと解釈がずれていた問題で、こちらも承認を求める挙動に統一されました。

claude -p で MCP のツール呼び出しが文字列として出ていた

claude -p "差分をレビューして" --mcp-config <config>

この形で渡した MCP サーバーが、初回ターンの開始前に接続されていませんでした。ツールが見えない状態のままモデルが走るため、ツール呼び出しがただのテキストとして出力される。print モードの出力はそのまま後段のスクリプトへ渡るので、ツール実行を前提にしている側から壊れます。

v2.1.221 では初回ターンの前に接続を待つようになりました。CI から -p で叩いて MCP ツールが呼ばれていなかったなら、まずここを疑うところです。

認証情報ファイルをダミーに差し替える mask モード

サンドボックスの認証情報ファイルに mode: "mask" が入りました。サンドボックス内のコマンドには sentinel コピーを読ませ、外向きの通信でサンドボックスプロキシが実値に置換します。マスク範囲はファイル全体か、extract の正規表現で捉えたスパンだけかを選べます。

対応は Linux と WSL のみ。macOS ではファイルマスクが deny にフォールバックするため、トークンの平文を読ませずにコマンドを走らせる用途は当面 Linux / WSL 限定です。

その他の変更

バージョン カテゴリ 変更点 概要
v2.1.221 新機能 VSCode Focus view ツール実行をターン単位の折りたたみサマリに隠し、実行中ツールをインジケータで表示。Ctrl+Alt+F またはコマンドパレットから切り替え
v2.1.221 新機能 claude-api skill 旧モデル向けの書き方が残っていないかプロンプトとツール説明を監査する prompt-audit サブコマンドを追加
v2.1.221 変更 バックグラウンドセッション commit と push で作業を保全し、draft PR はタスクが要求するときだけ作成。CLAUDE.md の git 指示に従い、最後に成果物の置き場を報告
v2.1.221 変更 /fork フォークしたセッションが元のチェックアウトを共有せず、自前の worktree を作る
v2.1.221 変更 /status セッション種別を表示。interactive か、バックグラウンドジョブの attached / unattended
v2.1.221 変更 /plugin install カタログが古い場合は再取得してリトライしてから「見つからない」と報告。インストール直後も安全なら即時有効化され、/reload-plugins が要らなくなった
v2.1.221 改善 auto モード 並列ツール呼び出しの権限チェックがキャッシュ効率化。判定をまたいで会話プレフィックスを再利用しコストを削減
v2.1.221 改善 Stats パネル トークン合計にキャッシュ分を算入し、input / output / cache read / cache write の内訳を表示
v2.1.221 改善 Windows 起動 プロセス生成時刻を PowerShell 起動ではなく kernel32 のネイティブ呼び出しで取得。powershell.exe を制限するセキュリティ製品のプロンプトが出なくなった
v2.1.221 改善 Vertex AI Claude 4.5 世代以降のモデルでツール検索を再有効化
v2.1.221 修正 WebSearch thinking 無効かつ effort xhigh / max で 400 エラーになっていた
v2.1.221 修正 @メンション Esc でプロンプトを取り下げて再送信すると、添えたファイルが黙って落ちていた
v2.1.221 修正 thinking トグル thinking off で開始したセッションで、以降トグルが効かなくなっていた
v2.1.221 修正 CLAUDE_CODE_RESUME_INTERRUPTED_TURN=0 中断ターンの自動再開を無効化できていなかった。falsy 値が尊重されるようになった
v2.1.221 修正 Vim モード yank レジスタがダイアログ・履歴検索・トランスクリプト表示をまたいでも消えなくなった

まとめ

v2.1.221 の中心は権限チェックの穴を閉じたこと。zsh の [[ ]] と、Windows の引用符入りパスの 2 系統です。どちらも通っていたものが承認待ちに変わる方向なので、自動実行に寄せている環境ほど挙動が動きます。認証情報のマスクモードとバックグラウンドセッションの commit / push も、無人実行の安全側に倒した変更でした。

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?