Blackbox Blast
← 事故ログへ

CASE · 軽微 · tool-misuse

検証済み運営者の一次記録

--allowedTools で絞ったつもりが、全体設定の許可がそのまま残っていた

修正を任せる子エージェントを --allowedTools で限定したつもりだったが、許可リストに無い whoami が通った。範囲を指定しない Write は、作業用の worktree の外にも書けた。

約2分で読めます

発生日
分類
tool-misuse
影響範囲
data
検知
manual-observation
タグ
#claude-code #permissions #allowed-tools #sandbox #isolation #worktree

CH 1

原因

--allowedTools は、ユーザー全体の設定にある広い許可を打ち消さなかった。働きは「ここまでに限る」ではなく、全体の許可に「これも確認なしで通す」を足す方向だった。

CH 2

結果

本番で使う前、使い捨てのリポジトリで隔離を実測していて気づいたため、実害はない。そのまま使っていれば、修正係のエージェントが対象の外のファイルを書き換えられる状態だった。

CH 3

対策

--setting-sources "" で全体設定を読ませず、Edit と Write を worktree のパスに限定し、sandbox を有効にした。コミットは隔離の外でサーバーが行い、push は二重に遮断した。隔離は、効いていることを実測するまで信じない。

何が起きたか

自作のマルチエージェント・キャンバスに、調査で見つかった問題を直す「修正係」を 足そうとしていた。修正係は claude -p で起動する子エージェントで、対象の リポジトリとは別の git worktree の中だけで作業させる設計だった。

渡す道具は --allowedTools で絞った。読むこと、worktree の中を編集すること。 それ以外はさせないつもりだった。

現場の混乱

本番で使う前に、使い捨てのリポジトリで隔離が本当に効くかを試した。

許可リストに入れていない whoami が通った。範囲を指定しないで許可した Write は、 worktree の外にもファイルを書けた。設定の上では閉じているはずの扉が、 実際には開いていた。

原因

--allowedTools は、ユーザー全体の設定(~/.claude/settings.json)にある 広い許可を打ち消さなかった。普段の対話作業のために許していたものが、 子エージェントにもそのまま引き継がれていた。

このオプションは「ここまでに限る」柵ではなかった。全体の許可の上に 「これも確認なしで通す」を足す働きだった。名前から受ける印象と、 実際の向きが逆だった。

対策

  • --setting-sources "" を付け、全体設定を読ませないようにした。
  • Edit と Write は Edit(//<worktreeのパス>/**) の形で、作業場所に限定した。
  • sandbox を有効にした。sandbox の下では許可リストに無い Bash も動いたが、 ネットワークに出られず、作業場所の外にも書けないことを実測した。
  • コミットは修正係ではなく、終了後にサーバーが隔離の外で行う。push は 拒否ルールと、そのプロセスに限った push 先の無効化で二重に止めた。

教訓はひとつ。隔離は書いた設定ではなく、実際に破れないことを確かめて初めて 効いていると言える。

出典

  • 運営者自身が起こした事故の一次記録です。外部に公開された元記事はありません。