Skip to content

原文(日本語に翻訳)

セキュリティ: Bashの拒否ルールが、env/sudo/watch/ionice/setsidおよび類似の実行ラッパーでラップされたコマンドにもマッチするようになりました。

原文(英語)

Security: Bash deny rules now match commands wrapped in env/sudo/watch/ionice/setsid and similar exec wrappers

概要

これまでBashの拒否ルールは直接実行されるコマンドにのみ適用されていましたが、envsudowatchionicesetsidなどのラッパーコマンドで包まれた場合にはルールが適用されない問題がありました。このセキュリティ修正により、実行ラッパーを使ってコマンドを隠蔽しても拒否ルールが正しく機能するようになります。

基本的な使い方

json
// .claude/settings.json での設定例
{
  "permissions": {
    "deny": [
      "Bash(rm:*)"
    ]
  }
}

この設定により、以下のコマンドがすべて拒否されます:

bash
# 直接実行(従来から拒否されていた)
rm -rf /tmp/test

# ラッパー経由(今回から拒否されるようになった)
sudo rm -rf /tmp/test
env rm -rf /tmp/test
watch rm -rf /tmp/test
ionice rm -rf /tmp/test
setsid rm -rf /tmp/test

実践例

sudo経由での危険なコマンド実行を防ぐ

json
// 設定例: 危険なコマンドを拒否
{
  "permissions": {
    "deny": [
      "Bash(chmod:*)",
      "Bash(chown:*)",
      "Bash(dd:*)"
    ]
  }
}
bash
# これらはすべて拒否される
chmod 777 /etc/passwd
sudo chmod 777 /etc/passwd      # sudoでも拒否
env chmod 777 /etc/passwd       # envでも拒否

watchコマンドでの繰り返し実行を防ぐ

json
{
  "permissions": {
    "deny": [
      "Bash(curl:*)"
    ]
  }
}
bash
# 以下はすべて拒否される
curl https://example.com
watch curl https://example.com          # 繰り返し実行も拒否
watch -n 5 curl https://example.com     # インターバル付きも拒否

複数のラッパーを組み合わせた場合

bash
# ネストされたラッパーも拒否ルールが適用される
sudo env rm -rf /tmp/dangerous
# ↑ rm が拒否ルールにある場合、これも拒否される

プロジェクト設定での実践的な例

json
// .claude/settings.json
{
  "permissions": {
    "allow": [
      "Bash(npm:*)",
      "Bash(git:*)",
      "Bash(ls:*)"
    ],
    "deny": [
      "Bash(rm:*)",
      "Bash(curl:*)",
      "Bash(wget:*)",
      "Bash(nc:*)",
      "Bash(ssh:*)"
    ]
  }
}

注意点

  • 対応するラッパーコマンド: envsudowatchionicesetsid およびこれらに類似した実行ラッパー
  • ラッパーコマンドを何重にネストしても、内部のコマンドにルールが適用されます
  • 拒否ルールはセキュリティの観点から許可ルールより優先されます
  • この変更により、意図的・非意図的なルール回避を防止できます
  • ラッパー自体(sudoenvなど)に対してルールを設定することも引き続き可能です

関連情報