Skip to content

原文(日本語に翻訳)

  • セキュリティ:macOSで/private/{etc,var,tmp,home}パスがBash(rm:*)許可ルールにおける危険な削除対象として扱われるようになりました
  • セキュリティ:Bashの拒否ルールがenv/sudo/watch/ionice/setsidなどのexecラッパーでラップされたコマンドにも適用されるようになりました
  • セキュリティ:Bash(find:*)許可ルールがfind -exec/-deleteを自動承認しなくなりました

原文(英語)

  • Security: on macOS, /private/{etc,var,tmp,home} paths are now treated as dangerous removal targets under Bash(rm:*) allow rules
  • Security: Bash deny rules now match commands wrapped in env/sudo/watch/ionice/setsid and similar exec wrappers
  • Security: Bash(find:*) allow rules no longer auto-approve find -exec/-delete

概要

Claude Code 2.1.113では、Bashツールの権限システムに関する3つのセキュリティ改善が行われました。macOSの/private/以下のシステムディレクトリがより安全に保護され、sudoenvなどのコマンドラッパーを使って拒否ルールを迂回する手法が塞がれ、findコマンドの許可ルールが実行・削除操作を自動承認しなくなりました。

基本的な使い方

1. macOS /private パスの保護

macOSでは/etc/var/tmp/homeは実際には/private/etcなどへのシンボリックリンクです。Bash(rm:*)許可ルールがあっても、これらのパスへの削除は危険とみなされ確認が必要になります。

json
// settings.json
{
  "allowedTools": ["Bash(rm:*)"]
}
bash
# 通常のファイル削除 → 許可ルールで自動承認
rm /tmp/work/temp-file.txt  # → /private/tmp/work/temp-file.txt → 確認必要

# プロジェクト内のファイル削除 → 通常通り
rm ./dist/old-bundle.js  # → 問題なし

2. execラッパーを使った拒否ルール迂回の防止

Bash(rm /etc:deny)などの拒否ルールが、envsudoでラップされた場合も正しく適用されます。

bash
# 拒否ルール: Bash(rm /etc:deny) がある場合
rm /etc/hosts        # → 拒否される(従来通り)
sudo rm /etc/hosts   # → 拒否される(改善後)
env rm /etc/hosts    # → 拒否される(改善後)
watch -n1 rm /etc/hosts  # → 拒否される(改善後)

3. find -exec/-delete の自動承認廃止

Bash(find:*)許可ルールはfindコマンドの検索を承認しますが、-exec-deleteによる実行・削除は含まれなくなりました。

bash
# Bash(find:*) 許可ルールがある場合
find . -name "*.log"           # → 自動承認(検索のみ)
find . -name "*.tmp" -delete   # → 確認が必要(削除操作)
find . -exec rm {} \;          # → 確認が必要(コマンド実行)

実践例

セキュアな権限設定のベストプラクティス

json
// settings.json - 安全な設定例
{
  "allowedTools": [
    "Bash(git:*)",          // git操作を許可
    "Bash(npm:*)",          // npm操作を許可
    "Bash(find:*)",         // find検索を許可(-execは別途確認)
    "Bash(rm ./dist:*)"     // distディレクトリのみrmを許可
  ],
  "deniedTools": [
    "Bash(rm /etc:deny)",   // /etc以下の削除を拒否
    "Bash(sudo rm:deny)"    // sudo rmを拒否(改善前は迂回可能だった)
  ]
}

プロンプトインジェクション対策

外部コンテンツからの悪意あるコマンドがsudoでラップされていても、拒否ルールが機能します。

bash
# 拒否ルールが適用されるケース(改善後)
env PATH=/malicious:$PATH rm /etc/passwd  # → 拒否
setsid rm -rf /var/log/*                  # → 危険パスとして確認
ionice rm /private/etc/sudoers            # → 拒否

注意点

  • macOSのシンボリックリンク: macOSでは/etc/private/etc/var/private/var/tmp/private/tmp/home/private/homeとなっています。このシンボリックリンク構造を利用した迂回が防止されます
  • 既存の許可ルールへの影響: Bash(find:*)を許可している場合、find -execfind -deleteは引き続き確認プロンプトが表示されます。自動化スクリプトを使っている場合は動作を確認してください
  • 拒否ルールの優先度: 拒否ルールは許可ルールより常に優先されます

関連情報