AIツール
PR

Claude Code「今後確認しない」で鍵漏れ、確認と対処【2026年11月】

Claude Code「今後確認しない」で鍵漏れ、確認と対処【2026年11月】
IT Picks編集部

Claude Code で権限の確認に「Yes, and don’t ask again(今後は確認しない)」と答えると、許可したコマンドはプロジェクトの .claude/settings.local.json に保存されます。2026年11月7日、セキュリティ企業 Apiiro が、このファイルが公開 GitHub に大量にコミットされ、1,122件のファイルに合計1,379件の秘密情報(パスワードやトークン)が残っていたという調査を公表しました。

The Hacker News などの紹介記事によると、コマンドにパスワードを直接書いて「今後確認しない」を選ぶと、そのパスワードごとファイルに残るというのが原因です。ファイルの保存先と git の扱いは、Anthropic の公式ドキュメントに書かれています。

Settings files and precedence
Settings files and precedence

「自分用の設定ファイル」がコミットされると、そのまま秘密情報の置き場になってしまうという落とし穴です。Claude Code で GitHub にリポジトリを置いている人は、一度は自分のリポジトリを確かめておきたい話題と言えます。

この記事はこんな人向けです

  • Claude Code を使っていて、GitHub にリポジトリを置いている
  • 「Yes, and don't ask again」を選んだことがあり、何が保存されているか知りたい
  • チームのリポジトリの安全を確認する立場で、確認方法と対処を知りたい

何が起きた?一言でまとめると

一言でいうと、Claude Code が「今後確認しない」の許可を書き込む設定ファイルが、秘密情報ごと公開リポジトリに上がっていたという問題です。

項目 内容
ファイル .claude/settings.local.json(Claude Code の「自分用・このプロジェクト用」の設定)
書き込まれるもの 「Yes, and don’t ask again」で許可したコマンドの allow ルール
見つかった数 公開 GitHub の約10万件のうち 1,122件に1,379件の秘密情報(Apiiro の調査)
主な中身 データベースのパスワード・SSH のログイン・GitHub などのトークン・AWS のキー
原因 コマンドに秘密情報を直接書いて許可し、そのファイルをコミットした
やること 鍵を無効にする → 追跡を外す → .gitignore に入れる

調査をしたのは Apiiro で、11月7日に公表しました。Apiiro のブログはボット確認の画面になるため、この記事では内容を紹介した The Hacker News と、技術ブログ「Dev & Gadget Note」の記事をもとにしています(2つの記事の数字は一致しています)。

settings.local.json とは?公式ドキュメントの説明

Claude Code の公式ドキュメント(Settings)によると、.claude/settings.local.json は 「自分だけの、そのプロジェクトだけの設定」 を書くファイルです。チームで共有する .claude/settings.json の上に重ねて効きます。

ファイル 誰の設定か git の扱い(公式の説明)
.claude/settings.json チーム全員 コミットして共有するファイル
.claude/settings.local.json 自分だけ・このプロジェクトだけ コミットしないファイル
~/.claude/settings.json 自分だけ・すべてのプロジェクト 自分のホームフォルダに置く

このファイルは、自分で書くだけでなく Claude Code も書き込みます。公式ドキュメントでは、Bash コマンドの確認で「Yes, and don’t ask again」を選ぶと、その許可が allow ルールとして保存されると説明されています。

保存先は Git リポジトリのルートです。サブフォルダで Claude Code を起動しても、ルートのファイルに書き込まれ、リポジトリ全体に効きます(Configure permissions のページ)。

git に入らないようにする仕組みもあります。Claude Code は、Git リポジトリでこのファイルに初めて書き込むとき、まだ無視されていなければ **/.claude/settings.local.json を グローバルの git 除外ファイルに追加します。

  • 追加先: core.excludesFile で設定したファイル。未設定なら ~/.config/git/ignore(XDG_CONFIG_HOME があればその下)
  • 例外: ファイルを自分の手で作り、Claude Code がまだ書き込んでいない場合は、自分で .gitignore に追加する必要があります
Claude Codeの公式ドキュメントで、settings.local.jsonをグローバルのgit除外に追加すると説明している部分
2026年11月9日時点(出典: Claude Code Docs「Settings」)

ここで注意したいのは、この除外がそのパソコンの、その人の git の設定に入る点です。Apiiro の研究者も、プロジェクト自身の .gitignore には書かれないので、別のパソコンや別の人の環境には効かず、すでにコミットされたファイルにも効かないと指摘しています(The Hacker News)。

秘密情報がファイルに残る流れ

公式ドキュメントによると、プロンプトから保存されるルールは、その選択肢が示したものだけが対象です。画面の例では「npm test *」のように末尾に * の付いたパターンが示されます。一方で、* の無いルールは1つのコマンドに完全に一致するルールです。

Apiiro の調査によると、選択肢がコマンドそのものになる場合があり、そのときはコマンドに書いたパスワードやトークンもそのまま平文で保存されます。研究者は最新のモデル(Opus 5.5 と Fable 5.1)でもこの動きを再現したとしています。

秘密情報が公開リポジトリに残るまでの流れ
Claude Code Docs、Apiiro の調査(The Hacker News)の内容を図にまとめたもの

つまり、漏れるまでには次の3つが重なる必要があります。

  • ① コマンドにパスワードなどを直接書いた(例: PGPASSWORD= の後ろ、mysql -p の後ろ)
  • ② そのコマンドを「今後確認しない」で許可した
  • ③ .claude/settings.local.json をコミットして公開した

①と③のどちらかが無ければ、公開リポジトリから漏れることはありません。ただし③について、Apiiro は 1,105リポジトリのうち539件で、Claude を共同著者とするコミットがこのファイルを変更していたとしており、Claude 自身がファイルをコミットしたケースが多いとみています。

調査で分かったこと(Apiiro の調査)

The Hacker News によると、Apiiro の調査の主な数字は次のとおりです。鍵が今も使えるかどうかは試していませんが、通知を受けた会社の1社は、鍵が有効だったと確認したそうです。

項目 件数
公開 GitHub の settings.local.json 104,185件(103,617リポジトリ)
秘密情報があったファイル 1,122件(約1.1%)
見つかった秘密情報 1,379件
うちデータベースのパスワード 379件
公開サーバーへの SSH ログイン 43件
GitHub・GitLab・npm のトークン 42件
AWS のキー 23件
持ち主の組織 63組織(多くはソフトウェア企業)

ほかにも、次のことが分かったとしています。

  • ファイルはすべてデフォルトブランチに残ったままで、半数のリポジトリでは217日以上置かれていた
  • 古い版のファイルには、今のファイルに無い秘密情報がさらに734件(509リポジトリ)。消しても履歴に残る
  • フォークにも広がり、74リポジトリのフォーク211件に同じ秘密情報
  • チームで共有する .claude/settings.json にも、76,011件中298件に秘密情報
  • エージェントのチャットログなども含めると、1,994リポジトリで2,539件

秘密情報を探すツールでも見逃しが多い点も示されています。gitleaks は1,122件のうち564件、TruffleHog は643件を検出し、どちらも検出しなかったのが215件でした(検証機能は使わずに実行)。見逃しの多くは コマンドの中のパスワードで、決まった形の無い文字列は普通の単語に見えてしまうためです。

研究者は、16のコーディングエージェントのドキュメントを比べ、承認したコマンドをそのまま既定でプロジェクトのファイルに保存すると確認できたのは Claude Code だけだったとしています。また、同じ動きは2025年8月11日のバグ報告でも指摘されていたそうです。

自分のリポジトリを確かめる方法

確かめる場所は「今のファイル」「過去の履歴」「GitHub 上」「手元のファイル」の4つです。リポジトリのルートで順に実行します。

① 今コミットされているか

git ls-files .claude/

.claude/settings.local.json が表示されたら、git で追跡されています(コミットされています)。何も出なければ、今のブランチには入っていません。

② 過去にコミットしたことがあるか

git log --all --oneline -- .claude/settings.local.json .claude/settings.json

--all で全てのブランチ・タグ、-- の後ろのパスでそのファイルを変えたコミットに絞れます。今は消してあっても、ここに出れば履歴には残っています。

③ 組織のリポジトリをまとめて探す

GitHub のコード検索は、org: で組織を、path: でパスを絞れます(GitHub Docs)。組織の管理者は、次のように検索するとまとめて探せます。

org:<組織名> path:.claude/settings.local.json

.claude/settings.json も同じように検索し、中の allow にパスワードやトークンが無いかを見ます。

④ 手元のファイルとルールを見る

コミットしていなくても、手元のファイルに秘密情報が入っていることがあります。研究者は、ファイルは npm パッケージや Docker イメージ、zip、同期フォルダに入って外に出ることもあると指摘しています(The Hacker News)。

cat .claude/settings.local.json

Claude Code の中では、/permissions で全てのルールと、それがどの settings ファイルから来たかを一覧で見られ、不要なルールを消せます(公式ドキュメント)。グローバルの除外が入っているかは git config --global core.excludesFile と、~/.config/git/ignore の中身で確かめられます。

見つかったら:最初に鍵を無効にする

GitHub の公式ドキュメントは、消したいのがパスワード・トークンなどの秘密情報なら、最初の手順は失効・ローテーション(作り直し)だとしています。Apiiro の研究者も「片付けより先にローテーション」を勧めています。

見つかったときの対処の順番
GitHub Docs、Apiiro の調査(The Hacker News)の推奨をもとにまとめたもの

① 鍵・パスワードを無効にして作り直す

ファイルに入っていたパスワード・トークン・キーは、すべて作り直します。今のファイルだけでなく、②で見つけた過去の版に入っていたものも対象です。公開サーバーと組になっている認証情報(SSH・データベース)は、入られる危険が大きいので先に確認します。

② 追跡を外して .gitignore に入れる

git rm --cached .claude/settings.local.json
echo ".claude/settings.local.json" >> .gitignore
git commit -m "Stop tracking Claude Code local settings"

GitHub Docs の説明どおり、git rm --cached で追跡だけを外し、無視のルールを足します。--cached なので手元のファイルは消えません。プロジェクトの .gitignore に書けば、別の人や別のパソコンにも効きます。

③ 履歴の書き換えは慎重に

履歴から消したいときは、GitHub Docs に git-filter-repo を使う手順があります。ただし、コミットハッシュが変わる・共同作業者のクローンから戻ってくるなど副作用が多く、フォークや他の人のクローンからは消せません。ドキュメントでも、失効・ローテーションが済めば、それで十分な場合があるとしています。

これから漏らさないための設定

公式ドキュメントと研究者の推奨から、これからできることをまとめます。

対策 内容
コマンドに秘密情報を書かない $DB_URL のような環境変数やシークレットマネージャーから渡す。ルールには変数名だけが残る
パターンで許可する 1つのコマンドではなく Bash(npm run *) のような形で許可する(:* でも同じ)
.gitignore に書く .claude/settings.local.json をプロジェクトの .gitignore と、組織の .gitignore のひな形に入れる
秘密のファイルを読ませない Read(./.env) のような Read の deny ルールで、Claude が .env を読まないようにする
コミット前にスキャンする .claude/ などのエージェント用フォルダを .env と同じ扱いにし、pre-commit や CI の秘密情報スキャンに入れる
GitHub の機能を使う シークレットスキャン(パブリックは無料で自動)と、プッシュ保護(パブリックは既定でオン)

GitHub のシークレットスキャンは、すべてのブランチの Git 履歴全体を調べ、見つけるとアラートを出します。ただし対象は既知の形のキーやトークンが中心で、パスワードのような決まった形の無いものは、GitHub Docs でも AI による検出という別の機能として説明されています。コマンドの中のパスワードは見逃されることがある前提で、そもそも書かないのが確実です。

Claude Code の許可の出し方そのものを見直すなら、確認の回数を減らす auto mode の仕組みも知っておくと判断しやすくなります。

あわせて読みたい
Claude Code「auto mode」とは?承認地獄から解放される新モードを解説【2026年3月】
Claude Code「auto mode」とは?承認地獄から解放される新モードを解説【2026年3月】

開発者の反応

Hacker News では、Apiiro の調査の投稿が2026年11月9日時点で556ポイント・387コメントを集めています。

Claude Code チームの Boris 氏(bcherny)は、settings.local.json はローカルに置いておくファイルで、ソース管理に入れるものではないとし、Claude Code が作ったときは自動で除外されるので、今回は手で作ってコミットされたものだと述べています。そのうえで、これを防ぐために何ができるか検討しているとしています(出典)。

Aurornis 氏は、「今後確認しない」を押すだけで漏れるわけではなく、ローカル設定をコミットして公開したときに漏れるので見出しが紛らわしい、と指摘しています(出典)。

対策の声では、nunez 氏が gitleaks を pre-commit フックで必ず動かしていると書いています(出典)。binarymax 氏は、認証情報はパスワードマネージャーに置き、Claude には見せず、必要なときだけ CLI で取り出していると紹介しています(出典)。

IT Picks的な所感

今回の件は、「AI に確認を減らしてもらう仕組み」と「設定ファイルを git で管理する習慣」がぶつかったところで起きたものだと思います。どちらも便利な仕組みですが、コマンドにパスワードを書く癖があると、許可のたびに秘密情報が設定ファイルにたまっていくことになります。

Claude Code はグローバルの除外で守ろうとしていますが、守りが「その人のパソコンの中」にしか無いのは弱い点です。プロジェクトの .gitignore に1行足すだけで防げるので、新しいリポジトリを作ったら最初に入れておくのが良さそうです。

Claude Code チームのメンバーが Hacker News で対策を検討していると書いているので、今後のバージョンで秘密情報を保存しない・警告するなどの変更が入るかもしれません。それを待たずに、まず自分のリポジトリを git log で一度確かめることをおすすめします。

AI コーディングツールの周りでは、拡張機能の改ざん版が配布された件もありました。ツールそのものだけでなく、周りのファイルや配布経路も含めて安全を見る時期に来ていると感じます。

あわせて読みたい
CursorのClaude Code拡張に裏口、確認と対処【2026年10月】
CursorのClaude Code拡張に裏口、確認と対処【2026年10月】

まとめ

Claude Code の「今後確認しない」と settings.local.json のポイントをまとめます。

  • 調査の公表:2026年11月7日(セキュリティ企業 Apiiro。The Hacker News などが紹介)
  • 対象のファイル:.claude/settings.local.json(自分用・このプロジェクト用の設定)
  • 書き込まれるもの:「Yes, and don’t ask again」で許可したコマンドの allow ルール(公式ドキュメント)
  • 見つかった数:公開 GitHub で1,122件のファイルに1,379件の秘密情報(Apiiro の調査)
  • 確認方法:git ls-files .claude/ と git log --all -- .claude/settings.local.json
  • 見つかったら:鍵・パスワードを作り直す → git rm --cached → .gitignore に追加
  • 予防:コマンドに秘密情報を書かない、パターンで許可、シークレットスキャンとプッシュ保護

Claude Code を使っている人は、まず自分のリポジトリで上の2つのコマンドを実行して、settings.local.json がコミットされていないかを確かめておくのがおすすめです。

ABOUT ME
IT Picks 編集部
IT Picks 編集部
ITツール・Webサービス紹介メディア
IT Picks 編集部。VPS・クラウド・AIツール・SaaSを中心に、実際に検証した情報を届けるITメディアです。「本当に使えるか」を基準に、初心者からエンジニアまで役立つ記事を制作しています。
記事URLをコピーしました