⚠️

Claude Code Shell でのコマンド実行には気をつけようという話

に公開

コマンド実行時の注意

Claude Code には ! で任意のコマンドを実行する機能がある。

単に実行されるだけと思うかもしれないが、実はそんなことはなく、コマンドの内容と結果はコンテキストに乗ってしまう。

ドキュメント

コマンドを直接実行し、実行出力をセッションに追加

とあるとおり、あくまでも結果をコンテキストに乗せるためのものであって、単にコマンドを実行するためのものではない。

こんな感じになる

 ! ls somedir
  aaa
     bbb
     ccc.json

 今実行したコマンドと結果のサマリを教えて

 ls somedir コマンドで somedir ディレクトリの内容を一覧表示しました。

  結果として3つのエントリが確認されました:
  - aaa
  - bbb
  - ccc.json

以下のような例は問題になりうる:

# パスワードが引数に書いてあるものを実行してしまう
 ! mysql -u admin -pMySecretPassword123 mydb -e "SELECT 1"

# Secrets Manager のvalueが取得され、コンテキストに乗ってしまう
 ! aws secretsmanager get-secret-value --secret-id my-db-credentials

これらはそれぞれ

  • コマンド引数に含まれるMySQLサーバーのパスワード
  • コマンド結果に含まれるSecrets Manager のクレデンシャル

がそれぞれコンテキストとともに Claude Code のサーバーに送信されることになる。

そのような仕組みになっていることを理解したうえで気を付けて利用したい。

Discussion