テック技報最新号へ →
セキュリティ

Claude Code の「今後は確認しない」はコマンド文字列ごと保存する:パスワード入りコマンドで使わない

許可ダイアログで「Yes, and don't ask again」を選ぶと、承認したコマンドがそのまま .claude/settings.local.json の許可ルールになる。コマンドにパスワードや API キーを直書きしていると、それが平文で残り、コミットされれば公開される。

@MalwareBibleJP · 2026-11-10
#claude-code#ai-agent#secrets#git#secret-scanning

何が起きたか(Apiiro の調査)

  • 公開 GitHub 上の settings.local.json 104,185 件のうち 1,122 件(約 1.1%)に秘密情報 1,379 件。DB パスワードが 379 件、AWS キーが 23 件。削除済みでも過去の版に 734 件が残っていた。
  • gitleaks と TruffleHog の両方が見逃したものが 215 件。コマンド中のパスワードは「キーの形」をしていないので、形式マッチ型スキャナーでは普通の単語に見える。
  • Claude Code は初回作成時にこのパスをユーザーのグローバル git 除外設定へ足すが、リポジトリの .gitignore には入らない。別の端末で複製した場合や、手作業でコミットした場合は守られない。

対策

  1. 先に鍵を無効化・再発行する。 ファイルを消しても履歴とフォークに残るので、一度でも記録された認証情報はすべてローテーションする。
  2. 管理対象から外して除外する。
    bash
    git rm --cached .claude/settings.local.json
    echo ".claude/settings.local.json" >> .gitignore
  3. 秘密はコマンドに書かず、環境変数($DB_PASSWORD など)で参照する。 許可ルールに残るのは変数名だけになる。
  4. 許可は個別コマンドでなくパターンで与える(例: Bash(npm run:*))。「今後は確認しない」で生のコマンドを固定しない。
  5. 既存リポジトリの .claude/ 配下と AI の会話記録を、形式マッチ以外(エントロピー、接続文字列、-p/--password 引数)でも検索する。

注意

出典

X の元の投稿を開く