1
3

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のsandbox設定、Writeツールには効いていません——denyWriteバイパス問題と回避策

1
Last updated at Posted at 2026-04-23

sandbox設定を信頼していませんか

Claude Codeのsettings.jsonにsandbox.filesystem.denyWriteを設定している方へ。

Writeツール・Editツールは、その制限を無視します。

これはバグです。2026年2月に最初に報告され(#29048)、3月に再報告(#33681)、4月23日に3度目の報告(#52325)がされています。2026年4月23日時点で未修正です。

何が起きているのか

sandbox設定はこういう構造になっています:

{
  "sandbox": {
    "filesystem": {
      "denyWrite": ["/"],
      "allowWrite": ["/your/project/dir", "/tmp"]
    }
  }
}

この設定の意図は「指定ディレクトリ以外への書き込みを禁止する」こと。

実際の挙動:

ツール denyWrite制限 理由
Bash ✅ 効く bubblewrap/sandbox-execでカーネルレベルの制限がかかる
Write ❌ 効かない Node.jsのfs.writeFileでin-process実行。sandbox制限を経由しない
Edit ❌ 効かない 同上

Bashツールだけがsandbox制限を受け、Write/Editツールは素通りする。

なぜ危険か

#40321では、この非対称性が原因で2,500以上のファイルが破壊されました。

仕組みはこうです:

  1. Readはsandbox内を参照する → Claudeには本物のファイルが見えない
  2. Writeはsandbox外に書き込む → 本物のファイルを上書きする
  3. Claudeは「存在しないファイルへの新規作成」だと認識して、躊躇なく書き込む

Claudeに悪意はない。自分が見えている世界に基づいて正直に行動した結果です。しかし見えている世界と書き込み先が別のファイルシステムだったため、既存のファイルが次々と上書きされた。

今すぐできる回避策

Anthropicの修正を待つ間、hookで自衛できます。

方法1:Write/EditをdenyWriteパスで検査するhook

PreToolUseフックで、Write/Editの書き込み先がallowWrite外かどうかを検査します。

#!/bin/bash
# sandbox-write-guard.sh
# .claude/settings.json → hooks.PreToolUse[matcher="Write|Edit"]

INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
[ -z "$FILE" ] && exit 0

# allowWriteに相当するパスリスト(自分のプロジェクトに合わせて変更)
ALLOWED_PATHS=(
    "/home/user/myproject"
    "/tmp"
)

ALLOWED=false
for path in "${ALLOWED_PATHS[@]}"; do
    case "$FILE" in
        "$path"/*) ALLOWED=true; break ;;
    esac
done

if [ "$ALLOWED" = false ]; then
    echo "BLOCKED: Write to $FILE is outside allowed paths" >&2
    echo "  Allowed: ${ALLOWED_PATHS[*]}" >&2
    echo "  sandbox.filesystem.denyWrite does not apply to Write/Edit tools." >&2
    echo "  See: https://github.com/anthropics/claude-code/issues/52325" >&2
    exit 2
fi

方法2:大量書き込みを検出するhook

sandbox非対称性で被害が連鎖するのを防ぎます。60秒以内に10ファイルを超える書き込みを検出したらブロック。

#!/bin/bash
# bulk-write-guard.sh
# .claude/settings.json → hooks.PreToolUse[matcher="Edit|Write"]

INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
[ -z "$FILE" ] && exit 0

WRITE_LOG="/tmp/cc-write-guard-${PPID}"
echo "$(date +%s) $FILE" >> "$WRITE_LOG" 2>/dev/null

NOW=$(date +%s)
RECENT=$(awk -v now="$NOW" '$1 > now - 60 {count++} END {print count+0}' "$WRITE_LOG" 2>/dev/null)
if [ "$RECENT" -gt 10 ]; then
    echo "BLOCKED: ${RECENT} files written in 60 seconds" >&2
    echo "  This may indicate sandbox read/write mismatch (Issue #40321)." >&2
    exit 2
fi

settings.jsonへの設定

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "bash ~/.claude/hooks/sandbox-write-guard.sh"
          }
        ]
      }
    ]
  }
}

まとめ

  • sandbox設定のdenyWrite/allowWriteはBashツールにしか効かない
  • Write/Editツールはsandbox制限を素通りする(2026-04-23時点で未修正)
  • 3回報告されている既知のバグ。自衛が必要
  • hookでWrite/Editの書き込み先を検査するのが現実的な回避策

関連Issue:

  • #52325 — 通常モードでのバイパス(2026-04-23)
  • #33681--dangerously-skip-permissionsでのバイパス
  • #29048 — Agent SDK bypassPermissionsモードでのバイパス
  • #40321 — 非対称性による2,500ファイル破壊事故

関連の素材

本記事の sandbox の denyWrite の沈黙の素通りは、 道具の設定の主張と実態の挙動の乖離の事例の系統の中の1件です。
5月22日に新刊の事例集 Claude Code Claim-Verify Handbook ($19、 約89頁、 約113,000字) を公開しました。 道具が「成功した」 「比較した」 「設定された」 と主張する一方で実態が乖離していた事例を GitHubの起票の集まりから130件 (本文15件+付録D 115件) 整理した本で、 14件の防衛の手順と5件の自動の点検の道具と一緒に提供しています。 試し読みのGist (約16,000字、 章1の全件) は こちら
予防 hook の集まりは cc-safe-setup (MIT、 約800件の hook)。 月額の継続の媒体 Claude Code 事故まとめ(無料・月次) (¥500/月) は毎月の事故の整理を配信。


📚 関連の参考資料 (2026年5月28日追加)

本記事の内容と関連する整理を、 公開済の素材で articulate しています。

  • 6月15日に予定された課金分離(当日に一時停止・再実施に備える)の判定の枠組み: Migration Playbook v2 (Gumroad、 $19) ——14日後の決定の整理、 9集積の文脈、 130件の claim-verify divergence の事例。 60秒の購入判定の道具で事前判定が可能

  • 月次の追補の継続: Claude Code 事故まとめ(無料・月次) ——5月から12月の8ヶ月の章本文 (cache_control / 副の作業者 / AGENTS.md / Pro Max / 権限 / Skills / v2.1.150 / AUP false-positive)

  • 9集積の枠組みの英語の長編 Gist: The 9-Cluster Framework: Mapping the Structural Failure Surface of Claude Code Operator Defense ——約3,300単語、 全件の集積の mechanism / symptom family / defense path の整理。 cluster 9 (Usage Policy classifier over-trigger on Opus、 25+件の起票) の対話型診断道具: 4問の質問→推奨経路の道具

  • 約800件の MIT ライセンスの hook: cc-safe-setup (GitHub) ——9集積に対応する hook を整備した累計

  • この種のデータの消失を体系立てて防ぐ: Claude Code 事故防止ガイド(Zenn・第3章まで無料・以降も毎月更新・¥1,500) ——本記事の Write ツールによる安全のすり抜けを含む、データの消失・暴走・無断の課金の事故を、実際の起票で検証した予防と復旧の手順で整理した一冊。


Claude Code の運用・安全・費用の検証記事は、これからも続けて公開します。note のゆるくさ をフォローしておくと、新しい記事を公開したときに通知が届きます(無料)。


ほかにも、800時間の運用データから、トークン消費の削減・複数ベンダー(Claude / Codex / Gemini / Copilot)の並行運用・サブエージェントの沈黙の失敗対策など、テーマ別の手引きを公開しています。気になる人は著者の本の一覧から、価格と評価を見て選べます。

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?