エージェントにエラー修正を指示しました。その一つは攻撃者が書いたものです。
偽のSentryエラーレポートは、AIコーディングエージェントを開発者のフル権限で攻撃者のコードを実行させる手口で、成功率は85%です。問題の本質はインジェクションそのものではなく、乗っ取られたエージェントが到達できる常時有効な資格情報にあります。
開発者がAIコーディングエージェントを開き、ありふれた依頼を入力します。「未解決のSentryエラーを確認して修正して」。エージェントはSentryコネクタ経由でエラー一覧を取得し、最上位のイシューを読み、レポートに書かれた修正手順に従って実行します。30秒後、開発者のマシン上で攻撃者のコードが、開発者のフル権限で実行済みになっています。誰も間違ったことをしたわけではありません。
これがAgentjackingです。今月Tenet Securityが公開した手口で、市場で最も広く使われている3つのコーディングエージェント、Claude Code、Cursor、Codexに対して85%の確率で成功しました[1][2]。
実際には何が起きたのか
まず、Sentryとは何かです。Software分野で最も広く使われているエラー監視サービスの一つです。アプリがエラーを投げたりクラッシュしたりすると、Sentryがそれを捕捉し、開発者がトリアージするレポートを作成します。日々触れているアプリの大部分に組み込まれています。それらのレポートを送るために、各アプリはDSNを埋め込みます。これはクライアント側のキーで、ブラウザがエラーを送信できるように、意図的にWebサイトのソースに同梱されます。誰でも読めます。そして、それを持っている人は誰でも、SentryプロジェクトにエラーイベントをPOSTできます。
これが攻撃の全体の要点です。Tenetは、messageフィールドをSentry自身の修正ガイダンスと全く同じ体裁に整形した偽のエラーイベントを作成しました。整ったMarkdown、「推奨される修正」、実行すべきコマンド。これを公開DSNで送信し、あとは開発者が最も自然に行う行動、つまりエージェントにエラーキューの消化を指示するのを待ちました。
エージェントはMCPコネクタを通じてSentryに問い合わせます。コネクタはエラーを信頼されたシステム出力として返します。エージェントには本物のSentryレポートと偽物を区別できません。両者はバイト単位で同一の形式だからです。そこで指示どおり「修正」を実行します。多くの場合、それは攻撃者のパッケージに対するnpx呼び出しです。以降、エージェントは開発者が持つものすべてにアクセスできます。環境変数、Git資格情報、プライベートリポジトリのURL、~/.aws/内のクラウドキーです。
Tenetは、個人開発者からFortune 100企業まで、2,388の組織が注入可能なDSNを持つことを確認しました。管理されたテスト環境では、エージェントが実際の企業で注入された指示を実行しました。Tenetによれば、その中には時価総額2,500億ドルのFortune 100のテック企業が含まれ、同社のAIエージェントが偽のバグレポートを読み、同社の社内マシン2台でTenetのコードを実行しました[1][3]。6月3日にSentryへ開示されたこの問題について、同社は当日中に認めたうえで、根本的な修正を「技術的に防御不能」として拒否しました。代替として、特定のペイロード文字列1つをブロックするコンテンツフィルタを出荷しました[4]。
これはSentryの不注意ではない
ここが居心地の悪い部分です。この一連の流れのどこにもバグはありません。DSNは公開されているべきものです。MCPサーバーはエラーデータを返すべきです。エージェントは、修正を依頼された診断情報に基づいて行動するべきです。すべてのステップが許可されていました。だからこそ、ファイアウォールもEDRもシステムプロンプトも、これを捉えられなかったのです。
欠陥は構造的なものであり、Sentryに固有のものでもありません。外部の者が影響を与え得るテキストをエージェントに与えるツール、エラートラッカー、イシューキュー、スクレイプしたWebページ、共有ドキュメントは、いずれもインジェクション経路です。そしてエージェントは、それらすべてを区別のない単一の指示ストリームとして扱います。プロンプトインジェクションは、エージェント時代に入って2年が経とうとしている今も未解決です。敵対的なテキストをモデルの推論から確実に排除することはできません。排除できない前提で考えてください。
問題の本質はインジェクションではない
じっくり考えるべきはここです。Agentjackingが最大級の警鐘である理由は、エージェントが騙されたことではありません。騙されたエージェントが何に到達できたかにあります。エージェントは開発者のフルの常時アクセスで動作していました。環境変数内のすべてのキー、ディスク上のすべての資格情報ファイル、1コマンドで到達できるキーリング全体です。
その影響範囲は自然法則ではなく、設定に過ぎません。エージェントがすべてに常時アクセスできたのは、今日の資格情報がそうして保管されているからです。環境に常駐し、マシン上に置かれ、そこで実行される何ものでも読める状態で。それを取り除けば、同じ乗っ取りは壁にぶつかります。
このために意図的に設計されています
Clavitorの資格情報は、エージェントが実行される環境に置かれることはありません。読み取る~/.aws/credentialsは存在せず、流出させることのできるAPIキーの環境変数もありません。秘密値はコードが実行される場所に決して置かれないからです。エージェントに与えられるのは、資格情報を使用した結果であって、資格情報そのものではありません。エージェントはその名前が指し示す1つの対象にのみ到達できるため、ストアを列挙して他のものを発見することはできません。また、権限付与はスコープが限定され取り消し可能であるため、攻撃者のように振る舞い始めたセッションは、動作の途中で切断できます。
率直に言えば、これはインジェクションを止めるものではなく、乗っ取られたエージェントのコマンド実行を止めるものでもありません。プロンプトインジェクションは未解決であり、私たちがそれを解決するとは主張していません。変わるのは攻撃の見返りです。攻撃者のコードは依然として実行されます。ただし、そこには盗む価値のあるものが常時置かれていない環境が待っています。乗っ取りは成功し、強奪は失敗します。
エージェント自身がこちらに向かって使われ得るようになったとき、資格情報システムが守るべき規則を書きまとめました。秘密値をコードが実行される場所に置かないこと、エージェントに名前が指し示すものだけを到達させること、が起点です。自社のシステムをこれに照らして確認してください:clavitor.ai/rules。
教訓は「Sentryにパッチを当てる」ことではない
Sentryはこれを修正できません。そのように表明しています。そして、次の汚染されたツールはSentryではありません。エージェントが常時有効な資格情報を持つ限り、エージェントが読むすべての信頼されたツールは実弾入りの銃であり、プロンプトインジェクションは、ロックできない引き金です。
悪意のあるテキストを排除することはできません。であれば、それを読むエージェントの手の届く範囲から資格情報を外してください。
Clavitor(@clavitorai)は、AIエージェントのために、そしてAIエージェントに対して構築された資格情報保管庫です。clavitor.ai
出典
[1] Tenet Security — "Agentjacking: hijacking coding agents with fake Sentry errors"(85%の成功率、2,388の組織、手口の解説):https://tenetsecurity.ai/blog/agentjacking-coding-agents-with-fake-sentry-errors/
[2] The Hacker News — "Agentjacking Attack Tricks AI Coding Agents Into Running Malicious Code":https://thehackernews.com/2026/06/agentjacking-attack-tricks-ai-coding.html
[3] The New Stack — "A public Sentry key is all it takes to hijack Claude Code, Cursor, and Codex":https://thenewstack.io/agentjacking-sentry-mcp-attack/
[4] Infosecurity Magazine — "New 'Agentjacking' Attacks Could Hijack AI Coding Agents"(Sentryの対応):https://www.infosecurity-magazine.com/news/agentjacking-attacks-hijack-ai/