0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2026年の情報漏えいの実被害から考える、Claude Code / Devin のセキュリティの勘所

0
Posted at

🚀 Devin専門の解説メディア「StartDevin」を運営中!
Devinの導入・使い方・最新アップデート・活用事例を、日本語でまとめています。
👉 StartDevin をチェックする(startdevin.jp)

この記事にぜひ いいね❤️ していただけると励みになります 🙌

はじめに

2026年に公表された情報漏えいを手口別に眺めていて、無視できない変化に気づきました。VPNの脆弱性や正規アカウントの悪用に混じって、AIエージェントそのものが侵入経路になった事例が並び始めています。shellツールの実行を経由してJWT(認証トークン)を抜かれたもの、Web入力に仕込まれた指示で情報をDNS越しに流出させたもの(通称 Salesbleed)、MCPサーバーの認証情報を不正に再利用されたもの。

これは他人事ではありません。Claude CodeもDevinも、まさに「ツールを実行し、外部の情報を読み、ネットワークに出る」エージェントです。この記事では、トレンドになっている実被害の型を分解し、それがClaude CodeとDevinでどう起こりうるのか、そして各ツールが何で守っているのかを、公式ドキュメントに沿って整理します。

結論を先に言うと、鍵は「lethal trifecta(致命的な3条件)」という考え方ひとつです。これを押さえると、どの対策が本当に効くのかが見えてきます。

先に3行でまとめると

  • 危ないのは ①機密アクセス ②信頼できない入力 ③外部送信チャネル、の3つが揃ったとき(lethal trifecta)。AIコーディングエージェントはこの3つを同時に持ちやすい
  • 2026年の実被害(AgentCore shell→JWT窃取、Salesbleed、MCP認証再利用)も、Devinで報告された .env 流出も、すべてこの枠組みで説明できる
  • 守りの本質は 3本の脚のどれか1本を確実に断つこと。Claude Code(権限モード・sandbox・WebFetch要約・ネット制限)とDevin(Autonomousのsandbox・Vault・組織ポリシー)はそのための道具を持っている

この記事に出てくる用語の位置づけ

用語 ざっくりの意味
プロンプトインジェクション AIへの指示を、データに紛れ込ませた悪意ある文章で乗っ取る攻撃
間接プロンプトインジェクション エージェントが読んだIssueやWebやMCP出力の中に指示が仕込まれているパターン
lethal trifecta 「機密アクセス」「信頼できない入力」「外部送信」の3条件。揃うと情報流出が成立する
exfiltration(流出) 機密を外部へ持ち出すこと。curl・ブラウズ・DNS・画像URLなどが経路になる
MCP エージェントに外部ツールをつなぐ標準プロトコル。便利な反面、信頼と認証が論点
サンドボックス ツール実行をファイルシステム・ネットワークごと隔離する仕組み

危ないのは「3つが揃ったとき」

個々の機能が危険なのではありません。危ないのは、次の3つが同時に成り立つときです。

機密アクセス・信頼できない入力・外部送信チャネルの3円が重なると情報流出が成立するというlethal trifectaのベン図。AgentCore/Salesbleed/MCP再利用の実例を配置

  1. 機密にアクセスできる:.env やトークン、リポジトリ、DB、社内API
  2. 信頼できない入力を読む:Issue・PR・Webページ・MCPツールの出力・リポジトリ内のファイル
  3. 外部へ送信できる:shell(curl)・ブラウズ・MCP送信・DNS・画像URL

この3つが重なると、②に仕込まれた指示でエージェントが①を読み、③で外に流す——という一連が成立します。逆に言えば、どれか1本を確実に断てば、この流出は成立しません。これがセキュリティ・コミュニティで「lethal trifecta」と呼ばれる整理です。

実際、冒頭の事例もこの3脚で説明できます。AgentCoreの件はshell実行(③)で認証トークン(①)を抜いた話、Salesbleedは外部から投入されたWeb入力(②)の指示でDNS(③)に流した話、MCP認証の再利用は①の経路が緩かった話です。

実被害の型を Claude Code / Devin に当てはめる

同じ型が、Claude CodeとDevinでも起こりえます。実際、Devinは間接プロンプトインジェクションでenvironment変数やシークレットを流出させられるという報告があります。攻撃者がGitHub上に悪意ある指示を置き、Devinにそれを触らせると、Devinがshellツールやブラウズツールを使って、curlで攻撃者のサーバーへ送る・URLに埋め込む・markdown画像として描画する、といった経路でデータを持ち出してしまう、という筋です。これは「最小権限」と「安全な情報フロー」が破れたときの典型です。

実被害の型 揃った脚 Claude Code / Devin で同じことが起こる面
shell実行→認証トークン窃取(AgentCore) ①+③ bash/shellツールに権限を与えすぎると、注入された指示で鍵を読み出して外へ
外部入力→DNS流出(Salesbleed) ②+③ Issue/PR/Webを読ませる自動化で、本文の指示に従って外部通信してしまう
MCP認証の不正再利用 ① 監査されていないMCPサーバーや使い回しの認証で、機密への経路が広がる

3つの脚を、Claude Code / Devin はどう断つか

ここが本題です。両者とも、3本の脚を切るための機能を持っています。

①機密アクセスを絞る/②入力を信用しない/③送信チャネルを断つの3観点で、Claude CodeとDevinの防御機能を並べたマッピング図

① 機密アクセスを絞る

いちばん効くのは、そもそもエージェントに機密を渡さないことです。

  • Claude Code:クラウド実行では、GitHubの認証情報をセッションVMに入れず、Anthropic側のプロキシが送信時に付与します(VMには短命の限定クレデンシャルのみ)。手元のAPIキーやトークンはKeychainやモード 0600 のファイルで保管。.env のような機密ファイルは permissions.deny で読ませない設定ができ、Manualモードは読み取り専用から始まります。
  • Devin:Vault に預けた秘密はサンドボックスに入らず、送信時(egress)に差し込まれるので、サンドボックス内のコード(エージェントが書いたものを含む)からは読み出せません。.env は原則 default-deny で読ませない運用が推奨されています。

② 入力を信用しない

読んだものすべてに「指示が仕込まれているかも」と疑うのが基本姿勢です。

  • Claude Code:WebFetchは多くの場合、生ページをそのまま渡さず、別のモデル呼び出しでページを要約した結果をClaudeに渡します。注入文がそのまま本体に届きにくくなる設計です。未信頼のフォルダで起動するとworkspace trustの確認が出ます。ただし注意点として、claude -p(ヘッドレス)ではtrustダイアログもMCP承認も出ません。リポジトリの .claude 配下やhooks、.mcp.json が無防備に走りうるので、CIや自動化では --bare で自動読み込みを止めるのが安全です。MCPサーバーはAnthropicがセキュリティ監査していないので、自作か信頼できる提供元に限定します。
  • Devin:前述のとおり外部コンテンツ接触時の流出が報告されているので、危険な入力源はタスクから外す、MCPは信頼先に限る、が基本です。

③ 外部送信チャネルを断つ

最後の砦です。たとえ①②を突破されても、外に出る道がなければ流出しません。

  • Claude Code:curl や wget は既定で自動承認されません(Manualモードでは確認が入る)。/sandbox でファイルシステムとネットワークを隔離でき、コマンド文字列に依存しないネットワーク強制が効きます。クラウド実行はネットワークが既定で制限され、許可ドメインだけに絞れます。
  • Devin:AutonomousモードはOSレベルのサンドボックス(macOSのseatbelt、Linuxのbwrap+seccomp相当)でshellを隔離したうえで自動承認します。「curlが任意のサーバーに届かないようサンドボックスする」ことが、まさに推奨される防御です。

いちばん危ないのは「無人実行」

最後に強調したいのは、人の承認を外した瞬間にリスクが跳ね上がるという点です。間接プロンプトインジェクションの最後の歯止めは、しばしば「人が実行前に止める」ことだからです。

  • Claude Codeの --dangerously-skip-permissions、Devinの Bypass のような「全部自動承認」は、trifectaの③を開けっ放しにします。
  • claude -p は前述のとおりtrust確認を出さないので、untrustedなリポジトリをそのまま走らせると危険です。
  • Kafkaやcronでイベント駆動に無人で回す構成(別記事で扱いました)は便利ですが、ここに注入耐性の設計が要ります。

無人で回すなら、サンドボックス必須・ネットワーク許可制・機密は原則渡さない・副作用操作だけは人の承認を残すを初期値にするのが現実的です。組織としては、Devinなら管理者がTeam Settingsで deny/ask を敷くと個人設定で上書きできないので、ガードレールを中央で固められます。Claude Codeも managed settings で組織標準を強制できます。

実践チェックリスト

最後に、trifectaの3脚で整理した実務の初期値です。

脚 やること
① 機密を絞る 秘密はVault/プロキシ経由にしてエージェントの手の届かない場所へ。.env は deny。鍵を環境変数で直接渡さない
② 入力を疑う Issue/PR/Web/MCP出力/リポジトリ内ファイルは「指示入り」前提。信頼できないMCPを足さない。CI/自動化は --bare 相当で最小化
③ 送信を断つ サンドボックスでネットワーク隔離+許可ドメイン制。curl/wgetを野放しにしない
全体 副作用(発注・外部送信・破壊的操作)には人の承認を残す。組織ポリシー(deny/ask)とログ・監査を併用

おわりに

AIコーディングエージェントのセキュリティは、新しい呪文を覚える話ではなく、「機密・未信頼入力・外部送信の3つを同時に握らせない」という一点に尽きます。2026年に表に出た実被害は、どれもこの3つが揃ったときに起きていました。Claude CodeもDevinも、3本の脚を切るための道具(権限モード、サンドボックス、Vault、ネットワーク制限、組織ポリシー)を持っています。あとは、便利さと引き換えにどれかを開けっ放しにしていないかを、自分の構成で点検するだけです。

特に、エージェントを自動・無人で回し始めるときは、人の承認という最後の歯止めが外れます。そこに「どの脚を、何で断っているか」を一度紙に書き出しておくと、事故の芽をかなり減らせます。次は、この観点でClaude CodeとDevinを実際に意地悪なプロンプトで突いてみて、どこまで踏みとどまるかを確かめてみたいところです。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?