Agentjacking(エージェントジャッキング)は、エラー監視サービスSentryに偽のエラーを送り込み、そのエラーを読んだAIコーディングエージェントに攻撃者のコマンドを実行させる攻撃です。2026年6月にセキュリティ企業のTenet Securityが名付けて公表し、Claude Code・Cursor・OpenAI Codexでの実行が報告されました。開発者は「Sentryの未解決エラーを直して」と頼んだだけなのに、エージェントは開発者自身の権限で外部のパッケージを取得して動かします。本記事で順に扱うのは、攻撃が成立する経路、公表された数値の読み方、Claude CodeとCursorで今日から入れられる防御設定、そして対応を急ぐべきチームの条件です。攻撃の土台にある考え方はプロンプトインジェクションとは?仕組み・種類・対策をわかりやすく解説を前提にしています。
まとめ:Agentjackingの仕組みと開発チームが今日入れる3つの防御設定
結論から書きます。Agentjackingは特定の製品の不具合ではなく、外部の誰でも書き込めるデータをエージェントが「信頼できる指示」として読んでしまう構造の問題です。Sentryは根本修正を見送ったため、守りはエージェントを動かす側で固める必要がある。
優先度の高い防御は3つです。1つ目は、エージェントの外部通信を許可リスト方式にして、窃取した情報の送り先を断つこと。2つ目は、npxやcurlのような取得と実行を伴うコマンドに必ず人の承認を挟むこと。3つ目は、SSH鍵やクラウドの認証情報をエージェントのサブプロセスから読めなくすることです。
反対に、エージェントへ「ツールの出力を信用するな」と指示するプロンプトやルールだけで防ぐ考え方は、多層防御の1枚としてしか期待できません。Sentry MCPを使っていなくても、外部の入力を返すMCPサーバーを1本でもつないでいれば同じ型の攻撃を受け得るので、棚卸しから始めてください。
Agentjackingの定義と偽のSentryエラーがエージェントに届く攻撃経路
攻撃の部品は、Sentryの受け口、MCPサーバー、コーディングエージェントの3つです。どれも単体では仕様どおりに動いており、組み合わせたときに初めて穴になります。
Tenet Securityが2026年6月に公表した攻撃クラスの定義と前提条件
Tenet Securityの原典(2026年6月17日公開)は、Agentjackingを「偽のバグ報告でAIエージェントを乗っ取る」攻撃クラスとして説明しています。攻撃者に必要なのは標的のSentryのDSN(データ送信先を示す接続文字列)とHTTPクライアントだけで、認証情報の窃取やフィッシング、サーバーへの侵入は要りません。
成立の条件は、標的の開発者がSentryのMCPサーバーをコーディングエージェントに接続し、エラーの調査や修正をエージェントに任せていることです。エージェントがどのような仕組みでツールを呼び出してコードを変えるかはCoding Agent(コーディングエージェント)とは?仕組み・3つの型と主要ツールの選び方で整理しました。
公開DSNへの偽イベント送信からSentry MCP経由でコマンドが走るまで
流れは4段です。まず攻撃者は、WebサイトのJavaScriptやGitHubのコード検索からDSNを拾います。次にそのDSNあてに偽のエラーイベントを送り、本文にSentry自身の診断のように見える「Resolution(解決手順)」の節を仕込みます。中身は攻撃者が用意したnpmパッケージをnpxで取得して実行させる手順です。
3段目で、開発者がエージェントに未解決のエラーを直すよう頼みます。エージェントはSentry MCPサーバーを通じてイベントを取得し、MCPサーバーはそれを信頼できるシステムの出力として返します。最後に、エージェントが「解決手順」を作業の一部と解釈し、開発者のOSアカウントの権限でコマンドを実行する、という順序です。
Sentryの受け口がどう使われる製品かはSentryとは?エラー監視・APMの機能・料金・使い方を解説にまとめています。
間接プロンプトインジェクションとしての位置づけと従来の対策が効かない理由
分類としては、利用者ではなく第三者が外部データに指示を埋め込む間接プロンプトインジェクションにあたります。OWASPのLLM01(プロンプトインジェクション)が扱う型の、コーディングエージェント版と考えると位置づけが掴みやすい。
厄介なのは、エージェントが行う操作がすべて正規のものに見える点です。開発者のマシンで、開発者の認証情報を使い、普段どおりのnpxを実行するだけなので、EDRやWAF、IAMの監視では異常として浮かびにくいとTenetは指摘しています。入力側の検知や、出力される文字列の検査だけに頼る対策が届かない理由はここにあります。
公表された検証結果とSentryの回答から読む影響範囲の測り方
報道では数値が見出しになりがちなので、どの条件で得た値かを分けて読む必要があります。
2,388組織と成功率約85%という数値の出どころと検証条件に沿った読み方
原典の数値は次のとおりです。有効なDSNを公開している組織を2,388確認し、そのうちTrancoの上位100万サイトに入るのが71組織でした。エージェントでの実行は100件を超えて確認され、制御された検証での実行成功率は約85%とされています。検証の対象はClaude Code・Cursor・OpenAI Codexを含む4系統以上で、macOS・WSL・Windows・コンテナ・CI・クラウドの各環境にまたがります。
読み方として、2,388は「攻撃の前提を満たす組織の数」であって、「被害を受けた組織の数」ではありません。85%も、Sentry MCPを接続したエージェントにエラーの修正を頼む、という条件がそろった場合の値です。自社の露出度は、DSNを公開しているかどうかより、エージェントにSentry MCPをつないで自動で作業させているかどうかで決まります。
Sentryが根本修正を見送った理由とコンテンツフィルタの限界
Tenetは2026年6月3日にSentryへ開示し、Sentryは同日に回答しました。回答の要旨は、問題は認めるが根本の修正はしない、プラットフォームの側では「technically not defensible(技術的に防ぎきれない)」で、モデルベンダー側のミドルウェアで扱うべきだ、というものです。研究の期間中に、特定のペイロード文字列を止める全体のコンテンツフィルタは有効化されました。
この判断には根拠があります。Sentry公式のDSN解説は、DSNは新しいイベントの送信だけを許し情報の読み取りはできないので公開しても安全だ、と説明しています。誰でもエラーを送れることはエラー監視の前提そのものです。文字列のフィルタは書き方を変えれば抜けるので、恒久策には数えないほうがよい。なお、2026年10月時点でこの問題にCVEは採番されていません。
Claude CodeとCursorでAgentjackingを防ぐ設定を入れる手順
ここからは手を動かす作業です。順番は、接続の棚卸し、権限ルール、サンドボックス、DSNの運用の4段に分けます。
MCPサーバーの棚卸しで外部の入力を返す接続を洗い出す際の分類基準
最初に、エージェントに何がつながっているかを確認します。Claude Codeなら次のコマンドで、設定済みのMCPサーバーが一覧になります。
claude mcp list
一覧の各サーバーについて、「自社の外にいる誰かが書き込める内容を返すか」で分類してください。Sentryのエラー、GitHubのIssueやプルリクエストの本文、チケット管理のコメント、受信メール、Webページの取得は、いずれも第三者が文面を書けます。該当するサーバーは、使わないなら外し、使うならエージェントに自動で実行させない運用に寄せます。MCPサーバーがエージェントにどう情報を渡すかの基本はMCPとは?AIと外部ツールをつなぐ標準規格とMCPサーバーの仕組み・作り方で解説しました。
Claude Codeのsettings.jsonによる認証情報の読取とnpx実行の制限
Tenetは防御用の設定集agent-jackstopをGitHubで公開しています。Claude Code向けの設定から、要点だけを抜き出した例が次です。プロジェクトの .claude/settings.json か、利用者ごとの ~/.claude/settings.json に置きます。
{
"permissions": {
"disableBypassPermissionsMode": "disable",
"deny": [
"Read(**/.ssh/**)",
"Read(**/.aws/**)",
"Read(**/.npmrc)",
"Read(**/.env)",
"Read(**/.env.*)"
],
"ask": [
"Bash(npx *)",
"Bash(npm exec *)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(pip install *)"
]
},
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false,
"network": {
"allowedDomains": ["github.com", "registry.npmjs.org"]
},
"filesystem": {
"denyRead": ["~/.ssh", "~/.aws", "~/.npmrc"]
}
}
}
Claude Codeの権限ルールの公式ドキュメントによると、ルールはdeny、ask、allowの順に評価され、最初に一致したもので結果が決まります。つまりプロジェクトの設定でnpxを許可していても、askに書いた行が先に当たって確認が出ます。disableBypassPermissionsModeを”disable”にすると、確認を全部飛ばすモードを使えなくなる。権限モードごとの挙動の違いはClaude Codeのパーミッションモードの違いと設定方法で比較しています。
注意点として、permissionsのRead拒否はClaude自身のReadツールにしか効きません。エージェントがBashでcatを実行すれば読めてしまうので、サンドボックス側のdenyReadと必ず組で書きます。
サンドボックスの送信先許可リストで外部への持ち出し経路を塞ぐ
agent-jackstopが最も効果が高いとしているのが、送信先を許可リストに限る制御です。Claude Codeのサンドボックスの公式ドキュメントでは、サンドボックス内のコマンドは手元のプロキシを通って外へ出て、allowedDomainsに無いホストへは直接つながりません。許可リストの初期値は空です。仮にエージェントが騙されて情報を集めても、攻撃者のサーバーへ送る経路が無ければ持ち出しは止まります。
確認しておきたい制約が2つあります。サンドボックスが動くのはmacOS・Linux・WSL2で、ネイティブのWindowsではコマンドはサンドボックスなしで実行される。Windowsの開発端末はWSL2の中でClaude Codeを動かす運用に切り替えてください。もう1つ、MCPサーバー・ファイル操作ツール・hooksはサンドボックスの外で動くため、ここは権限ルールとフックで補います。フックで危険なコマンドを止める書き方はClaude Code Hooksの設定方法を参照してください。手元に長期の鍵を置かない構成にするなら、HashiCorp Vaultとは?シークレット管理の仕組みのような短命の認証情報への移行も効きます。
Cursorについては、agent-jackstopのREADMEが、Run ModeをAllowlist(with Sandbox)にしてネットワークをsandbox.jsonだけに絞り、秘密情報のファイルを.cursorignoreへ足す手順を示しています。どちらのツールでも、許可リストは自社が使うレジストリに合わせて絞り込み、業務の流れで試してから配布してください。
フロントエンドのDSN露出を減らしてローテーションする運用と防御の限界
Sentryの側でできるのは、攻撃の入口を狭めることです。Sentry公式はClient Keys (DSN)の設定でDSNをローテーションや失効でき、IPのブロックもできると案内しています。Cloud Security Allianceの研究ノートは、公開済みのDSNを入れ替え、ブラウザのエラーは自社サーバーのrelayやproxyを経由させてフロントエンドにDSNを埋めない構成を勧めています。
自社の配布物にDSNが入っているかは、ビルド成果物を検索すれば分かります。
grep -rlE "ingest(\.[a-z]+)?\.sentry\.io" dist/
ただし、DSNを隠しても根本の解決にはなりません。サーバーから送るエラーにも、外部の利用者が入力した文字列は混ざるからです。DSNの運用は入口を減らす補助と割り切り、主な守りはエージェント側に置きます。
Agentjacking対策を急ぐ条件と見送ってよい場面・外部に任せる範囲
立場をはっきりさせます。エージェントに外部データを読ませて自動で手を動かさせているチームは今すぐ、そうでないチームは次の設定見直しの機会でよい、というのが2026年10月時点の判断です。
Sentry MCPを常用し自動実行を許すチームは今週中に対応する
次のどれかに当てはまるなら、優先度を上げてください。Sentry MCPなど外部の入力を返すMCPサーバーを接続している、エージェントに確認なしでコマンドを実行させるモードを使っている、開発端末にクラウドの管理者権限や本番のトークンを置いている、の3つです。
特にCIやクラウド上でエージェントを無人で動かしている場合は、人の承認という歯止めが最初から無い。この場合は送信先の許可リストと、ジョブに渡す認証情報の最小化が実質的に唯一の防御になります。依存パッケージを経由した攻撃全体の守り方はサプライチェーン攻撃とは?起点別3類型と最新事例・対策の優先順位と合わせて確認すると抜けが減ります。
MCPを使わずエラー調査を人が行うチームは優先度を下げてよい
エージェントにSentryを読ませておらず、エラーの内容は人が確認してから修正を頼む運用なら、Agentjackingの経路そのものが成立しません。この場合は大きな作業を起こさず、次にMCPサーバーを足すときに本記事の棚卸しと設定を通す、という段取りで足ります。
ただ、エージェントの利用が広がると、誰かが個人の設定でMCPサーバーを足すことは十分起こります。組織で使うなら、権限の設定を利用者任せにせず、管理者が配布するmanaged settingsで下限を決めておくほうが確実です。
外部の手を借りる境界:AIエージェントの権限設計と監査をどこまで委ねるか
自社で進めやすいのは、MCPサーバーの棚卸しと、本記事の設定例を自社のツールとレジストリに合わせて入れるところまでです。どちらも既存の設定ファイルを読めば対象が特定できます。
手間がかかるのは、CIやクラウドで動くエージェントの認証情報の切り分け、複数のチームにまたがる許可リストの設計、そして実際に偽の入力を流して防御が効くかを確かめる試験です。エージェントの権限設計から検証までをまとめて外へ出すなら、AIセキュリティ対策のような形で、守る端末とジョブの範囲、許可する送信先を先に決めてから依頼すると無駄が少ない。
よくある質問
Agentjackingについて、検討の段階で出やすい質問に答えます。
Agentjackingの脆弱性にCVE番号はありますか?
2026年10月時点で、CVEは採番されていません。特定の製品のコードに不具合があるのではなく、誰でも書き込めるSentryの受け口と、その内容を信頼して返すMCPサーバー、それを指示として読むエージェントの組み合わせで成立する問題だからです。そのため、製品を更新すれば直るという種類の対策はありません。設定と運用で守る前提で計画を立ててください。
Sentryを使っていなければ関係ありませんか?
Sentryに限った話ではありません。Tenetの検証はSentryを題材にしていますが、構造は「第三者が書ける内容を、エージェントが信頼できる指示として読む」ことです。GitHubのIssue、チケットのコメント、受信メール、取得したWebページを返すMCPサーバーも、同じ型の入口になり得ます。Sentryを使っていなくても、MCPサーバーの棚卸しは行う価値があります。
DSNを非公開にすれば防げますか?
入口を減らす効果はありますが、それだけでは防げません。Sentry公式はDSNを公開しても安全な値と位置づけており、ブラウザで動くアプリでは配布物に含まれるのが普通です。サーバー経由に切り替えても、利用者が入力した文字列はエラーの本文に混ざります。DSNの入れ替えは補助と考え、主な防御はエージェントの権限と送信先の制限に置いてください。
エージェントへの指示文で防ぐことはできますか?
多層防御の1枚にはなりますが、主な対策にはなりません。agent-jackstopも、ツールの出力を信用しないよう指示するスキルやルールを、優先度の最も低い4番目の対策として位置づけています。指示文はモデルの判断に頼るため、言い回しを変えた攻撃に抜かれる余地が残ります。外部への送信と認証情報の読み取りを、仕組みの側で止めるほうが確実です。
Windowsの開発端末ではどう守ればよいですか?
Claude Codeのサンドボックスは、ネイティブのWindowsでは動きません。公式ドキュメントでは、Windowsで使う場合はWSL2の中でClaude Codeを実行する構成を案内しています。それが難しい端末では、権限ルールのaskでnpxやcurlに確認を挟み、bypassモードを禁止したうえで、端末に長期のクラウド認証情報を置かない運用で補うのが現実的です。
関連記事
- プロンプトインジェクションとは?仕組み・種類・対策をわかりやすく解説:Agentjackingの土台にある攻撃の分類と対策を扱っています。
- Coding Agent(コーディングエージェント)とは?仕組み・3つの型と主要ツールの選び方:攻撃の対象になるエージェントの仕組みを確認できます。
- MCPとは?AIと外部ツールをつなぐ標準規格とMCPサーバーの仕組み・作り方を解説:攻撃の経路になるMCPサーバーの基本を解説しています。
- Sentryとは?エラー監視・APMの機能・料金・使い方を解説:攻撃の入口になるエラー監視サービスの全体像をまとめています。
- Claude Codeのパーミッションモードの違いと設定方法|auto・acceptEdits・bypassPermissionsの使い分け:権限モードごとの挙動と設定を比較しています。