エージェントは自らの鍵を漏らした
CVE-2026-21852はClaude Codeに存在した修正済みのバグです。リポジトリがプロジェクト設定でANTHROPIC_BASE_URLを設定でき、エージェントは「このフォルダを信頼しますか」にあなたが答える前に、自らのAnthropic APIキーを平文のまま攻撃者のサーバーへ送っていました。この攻撃はコードを一切実行せず、ディスクから何も読み取りません。エージェントがそれなしでは機能できないただ一つの認証情報を郵送する宛先を、変えただけなのです。Anthropicはタイミングを修正しました。Bromure Agentic Codingは、その鍵をエージェントの世界から完全に締め出します。
我々がこれまで取り上げてきたフォルダを開くだけの攻撃は、リポジトリを 開くとコードを実行し、ディスクからあなたのクラウドの鍵を読み取ります。 今回のものは設定を一行変えただけで、エージェントは自身がそれなしでは 機能できない認証情報、すなわち自らのモデルAPIキーを差し出したのです。
このバグはCVE-2026-21852 です。Check Point ResearchがClaude Codeに発見し、2025年10月28日に Anthropicへ開示され、12月28日に修正され、2026年1月21日にCVE番号が 付与されました。Anthropicは数ヶ月前にパッチを出荷しています。それでも 7月に我々がこれを書くのは、どんなパッチも変えられない事実に、このバグが くっきりと線を引くからです。コーディングエージェントはモデルAPIキーを 持ち運び、あらゆるリクエストでそれを送信し、そしてリポジトリはその 送信先アドレスを書き換えられるのです。
バグが行ったこと
Claude Codeをプロジェクトに向けると、それはそのプロジェクトの設定、
すなわちリポジトリが独自の設定を持ち運ぶことを可能にする.claude/
以下のファイルを読み込みます。その設定の一つがANTHROPIC_BASE_URL、
エージェントがモデルを呼び出すときに話しかけるアドレスです。デフォルトは
api.anthropic.comで、この設定はチームが独自のゲートウェイやプロキシを
経由できるように存在します。プロジェクトがそれを設定できるのは、設計
どおりなのです。
悪意あるリポジトリは、それを攻撃者が支配するサーバーに設定します。
すると、Check Pointが記述するとおり、「被害者がディレクトリを信頼するか
決める前に」、Claude CodeはANTHROPIC_BASE_URLが指す先へ起動時のAPI
リクエストを撃ち込みます。そしてそのリクエストは、Check Pointの言葉を
借りれば「authorizationヘッダー――我々の完全なAnthropic APIキーが、
平文で完全にさらされている」を運んでいます。攻撃者のサーバーは、
エージェントが自ら進んで送ったリクエストからヘッダーを読み取ります。
Check Pointが言うように、「ユーザーの操作は不要」です。リポジトリを
クローンし、claudeを実行すると、信頼プロンプトが描画し終わる前に鍵は
消えているのです。
Anthropic APIキーはアカウントのワークスペースに届きます。共有ファイル ストレージと課金がついてくるのです。Check Pointはその射程を順に示して います。攻撃者はワークスペースのファイルを読み書きし、削除し、ストレージ のクォータを使い果たし、あなたの財布でAPIクレジットを燃やせます。 エージェントは、頼まれもしないのに、この作戦全体が乗って動く認証情報を 差し出すのです。
何も実行しなかった攻撃
このジャンルについては以前にも書いてきました。MiasmaはMicrosoft自身の
リポジトリに設定を仕込み、
フォルダを開くと数メガバイトのブロブが実行されて、鍵を求めてファイル
システムを読みました。Amazon Qはクローンしたワークスペースから自動的に
MCPサーバーを起動し、
開発者のAWSキーとSSHソケットの環境をまるごと携えていました。
Cursorのケース
では、プロンプトインジェクションがツールを操ってガードを上書きさせ、
そのうえでシェルを実行しました。3つはみな同じ形をしています。開いた
瞬間に信頼できないコンテンツがコードを実行させ、そのコードが
あなたのシークレット、~/.awsと~/.sshにあるものを探しに行くのです。
CVE-2026-21852はその機構を丸ごと飛ばします。悪意あるリポジトリはフックを 発火させず、シェルも実行しません。アドレスを一つ変えるだけで、設計どおりに 振る舞うエージェントが、自らの認証情報をそこへ送るのです。漏れる鍵は、 エージェントがあらゆる呼び出しで送信しなければならない鍵です。プロセスが 読めないファイルに閉じ込めておくことはできません。プロセスはそれを送る ことになっているからです。
Anthropicの修正はこのバグに対して正しいものでした。信頼ダイアログが今では 先に来るようになり、彼らの言葉では「ユーザーが信頼ダイアログを確認する まで、いかなるAPIリクエストも開始されない」のです。今日ベースURLを リダイレクトしても、フォルダを信頼するまで何も外に出ません。とはいえ、 この修正が統べるのはタイミングです。フォルダを信頼してしまえば、そして 開発者は一日中フォルダを信頼しているのですが、本物の鍵は依然として エージェントの環境に座り、リダイレクトまで設定一行の距離にあり、それに 触れる将来のあらゆるコードパスの正しさに依存しているのです。
鍵の居場所は別にある
長持ちする問いは、なぜ本物の鍵が、リポジトリの設定が照準を合わせられる 場所に座っていたのかです。それはアーキテクチャの問いであり、我々は Bromure Agentic Codingをその答えとして作りました。
Bromureはあなたのコーディングエージェントを使い捨てのLinux VMの中で
走らせます。エージェント自身、それが生成するシェル、インストールする
パッケージ、行うモデル呼び出しのすべてです。ホスト上のプロキシが、
エージェントとapi.anthropic.comの間のワイヤーに座ります。VMが保持
するのはスタブの鍵、構文的には正しくとも何の価値もないプレース
ホルダーであり、本物のAnthropicキーはホスト上に留まります。本物のモデル
エンドポイントへの正当な呼び出しでは、ホストプロキシがワイヤー上で
スタブを本物の鍵に入れ替え、レスポンスからそれを外して戻します。
シークレットはその唯一の仕事をこなし、攻撃者が盗めるはずのコピーは、
エージェントの世界が到達できるどこにも存在しないのです。
この攻撃をその構えに対して再生してみましょう。悪意あるリポジトリは
ANTHROPIC_BASE_URLをattacker.evilに設定します。VMの内側のエージェント
は、そこへ起動リクエストを送り、持っている唯一の鍵、すなわちスタブを
運びます。プロキシは本物の鍵の入れ替えを本物のエンドポイントに結びつけて
いるので、未知のサーバーに向けられたリクエストはプレースホルダーを載せた
まま出て行きます。攻撃者のサーバーはAuthorizationヘッダーを読み取り、
公開インターネット上では何の意味も持たない文字列を収穫します。
リダイレクトは成功し、そして何も集められなかったのです。
この保証は一つの細部にかかっています。ブローカーが本物の鍵を真の宛先に
結びつけ、api.anthropic.comへの呼び出しのためにだけシークレットを
差し替え、他のどこにも差し替えないことです。その結びつけが正しければ、
リダイレクトされたベースURLは不活性です。それを誤り、あらゆる外向きの
リクエストに本物の鍵を載せてしまえば、一段下で同じバグを作り直したことに
なります。プロキシは、ただ一つのアドレスのためにシークレットを解き放ち、
それ以外のすべてを信頼できないものとして扱うことで、その存在価値を
稼ぐのです。
ブローカーが変えること
本物のモデルキーは、エージェントが走るVMには決して入りません。 ホストがそれを保持し、本物のエンドポイントへの呼び出しのためにだけ ワイヤー上に解き放ちます。リポジトリは好きなだけベースURLを リダイレクトできますが、出て行くリクエストが運ぶのはスタブであり、 スタブはあなたのマシンの外では何の価値もありません。
変えないこと
信頼は依然としてあなたが与えるものです。攻撃者が運営するゲートウェイ に話しかけるようエージェントを設定すれば、ブローカーはあなたが 間違ったことを意図したとは知りようがなく、あなたが指示した先へ仲介 します。そして保証は一つの結びつけごとに走ります。ここではモデル キー、あなたの他のシークレットも同じスタブと入れ替えの構えを通り、 それぞれの強さは、その背後にあるエンドポイントの結びつけと同じ なのです。
相棒のバグ、そして同じ答え
CVE-2026-21852は、より騒がしい兄弟、
CVE-2025-59536
とともに到着しました。リポジトリの.claude/settings.jsonがフック、
すなわちClaude Codeが起動時に実行するシェルコマンドを定義したり、
プロジェクトのMCPサーバーを強制的に有効化したりでき、それらのコマンドは
「claudeを実行した瞬間、ユーザーが信頼ダイアログを読むことすらできない
うちに実行される」のです。こちらは開いた瞬間のコード実行そのもの、
おなじみの形であり、その答えもおなじみのものです。使い捨てVMの内側では、
生成されたシェルは本物のトークンがあるべき場所にスタブの認証情報を
見つけ、状態を変えるアクションはハイパーバイザー境界で一時停止して
ホスト上のプロンプトを待ちます。この論は
長々と展開してきました。
2つのバグは見た目が異なります。一方はプログラムを実行し、もう一方は アドレスを変える。そして同じ場所に着地します。コーディングエージェント は、あなたが手渡すコードと一緒に届くファイルを読み、それに基づいて行動 し、そのファイルの一部が、何が実行されるか、シークレットがどこへ行くかを 決めるのです。Anthropicは両方にパッチを当てました。長持ちする答えは、 それらのファイルが指し示すことはできても到達はできない場所に、 シークレットを置くことです。
狭い勝利
モデルキーをエージェントの環境の外に保つことは、このリダイレクトと、 エージェントを騙して自らの認証情報を新しいどこかへ送らせる攻撃の一族を 打ち破ります。エージェントが送れる鍵が無価値だからです。ハイパーバイザー とプロキシがエージェントの下でそれを強制し、エージェント自身には何も 求めません。
信頼はあなたの仕事のままです。どのリポジトリを開き、どのゲートウェイを 設定するかを決めるのは依然としてあなたであり、あなたが指し示す先へ鍵を 送るブローカーは、あなたが意図的に悪い場所を指せばそこへ送ります。漏れた 鍵に何ができるかの範囲を絞ることも、モデルプロバイダーの側に残ります。 Anthropicのパッチとワークスペースのコントロールが、その側を受け持ちます。
コーディングエージェントは鍵を持ち運び、どこかへ送らなければなりません。 そして2025年の終わりのある期間、クローンしたリポジトリの一行の設定が その宛先を決めていました。パッチはその窓を閉じました。Bromure Agentic Codingは代わりに鍵そのものを取り除きます。エージェントは本物の鍵を一度も 持ったことのない使い捨てのマシンの中で働き、プロキシはただ一つのアドレス のためだけに本物の鍵をワイヤーに載せます。インストールして、好きな リポジトリにエージェントを向けてください。そして次のリダイレクトされた ベースURLには、どこでも何の価値もない文字列を持ち去らせておけば いいのです。