原文(日本語に翻訳)
- セキュリティ: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 underBash(rm:*)allow rules - Security: Bash deny rules now match commands wrapped in
env/sudo/watch/ionice/setsidand similar exec wrappers - Security:
Bash(find:*)allow rules no longer auto-approvefind -exec/-delete
概要
Claude Code 2.1.113では、Bashツールの権限システムに関する3つのセキュリティ改善が行われました。macOSの/private/以下のシステムディレクトリがより安全に保護され、sudoやenvなどのコマンドラッパーを使って拒否ルールを迂回する手法が塞がれ、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)などの拒否ルールが、envやsudoでラップされた場合も正しく適用されます。
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 -execやfind -deleteは引き続き確認プロンプトが表示されます。自動化スクリプトを使っている場合は動作を確認してください - 拒否ルールの優先度: 拒否ルールは許可ルールより常に優先されます