Skip to content

環境変数プレフィックス付き読み取り専用コマンドの権限プロンプト修正

原文(日本語に翻訳)

環境変数プレフィックス付きの読み取り専用コマンドが、変数が既知の安全なもの(LANGTZNO_COLOR など)でない限り、権限プロンプトを表示しない問題を修正しました。

原文(英語)

Fixed read-only commands with env-var prefixes not prompting unless the var is known-safe (LANG, TZ, NO_COLOR, etc.)

概要

Bashでは VAR=value command の形式で環境変数をコマンドの前に付加することができます。このバグでは、読み取り専用と見なされるコマンド(lscatなど)に対して未知の環境変数プレフィックスが付いた場合、権限プロンプトが表示されずに自動実行されていました。LANGTZなどの既知の安全な環境変数のみが適切に処理されており、それ以外の任意の環境変数を使ったコマンドが権限チェックをすり抜ける可能性がありました。v2.1.98で修正され、未知の環境変数プレフィックスを持つコマンドには適切に権限プロンプトが表示されます。

基本的な使い方

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

bash
# 既知の安全な環境変数 → 問題なし(修正前から正常)
LANG=ja_JP.UTF-8 ls /home
TZ=Asia/Tokyo date

# 未知の環境変数プレフィックス → 修正前は権限プロンプトなしで実行される場合があった
CUSTOM_VAR=value cat /etc/passwd
SECRET_KEY=abc123 curl http://external.example.com
MY_PATH=/malicious ls /sensitive_dir

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

bash
# 既知の安全な環境変数のみ → 引き続き自動許可
LANG=en_US.UTF-8 ls /home      # 自動許可
TZ=UTC date                     # 自動許可
NO_COLOR=1 cat README.md        # 自動許可

# 未知の環境変数プレフィックス → 権限プロンプトが表示される
CUSTOM_VAR=value cat /etc/passwd   # 権限プロンプト
MY_API_KEY=secret curl http://...  # 権限プロンプト

実践例

シナリオ1:既知の安全な環境変数の活用(変更なし)

以下の既知の安全な環境変数は修正後も自動許可されます。

bash
# ロケール設定
LANG=ja_JP.UTF-8 ls -la /home/user

# タイムゾーン設定
TZ=America/New_York date +"%Y-%m-%d %H:%M:%S"

# カラー出力無効化
NO_COLOR=1 grep "error" /var/log/app.log

# その他の既知の安全な環境変数
TERM=xterm-256color tput colors

シナリオ2:カスタム環境変数を使ったコマンドの実行(修正後)

カスタム環境変数を使用する場合、v2.1.98以降は権限プロンプトが表示されます。

bash
# 開発作業でよく使うパターン
NODE_ENV=production node -e "console.log(process.env.NODE_ENV)"
# → NODE_ENV は既知の安全リストにないため権限プロンプト表示

DATABASE_URL=postgres://... psql -c "SELECT 1"
# → DATABASE_URL は未知の環境変数のため権限プロンプト表示

シナリオ3:安全な環境変数プレフィックスパターンの整理

チームでClaude Codeを利用する場合、頻繁に使用する環境変数付きコマンドは許可ルールに追加することを検討してください。

json
// .claude/settings.json の例
{
  "permissions": {
    "allow": [
      "Bash(NODE_ENV=* node *)",
      "Bash(DEBUG=* npm *)"
    ]
  }
}

シナリオ4:セキュリティリスクとなっていたケース(修正前)

bash
# 修正前:LD_PRELOAD などの危険な環境変数でも自動許可されることがあった
LD_PRELOAD=/malicious/lib.so ls /home
# → 共有ライブラリのインジェクションが可能な変数でも権限チェックが機能しなかった

# 修正後:このようなケースも権限プロンプトが表示される
LD_PRELOAD=/malicious/lib.so ls /home
# → 権限プロンプト表示

注意点

  • 既知の安全な環境変数(LANGTZNO_COLORなど)は引き続き自動許可されます。リストの変更はありません。
  • 開発環境でよく使う環境変数(NODE_ENVDEBUGなど)が付いたコマンドには権限プロンプトが表示されるようになります。頻繁に使用する場合はallowedToolsで許可ルールを設定してください。
  • LD_PRELOADのようなセキュリティ上重要な環境変数も適切にチェックされるようになりました。
  • 環境変数を使用したコマンドインジェクション攻撃への耐性が向上しています。

関連情報