第106条
致命的な三点セット
非公開データを読めて、外から来た内容を取り込み、外へデータを送れる AI エージェントは、その内容を書いた誰にでも操られてデータを漏らしうる。
心得
エージェントが読む文章は、書いた人からの指示だと思う
どうするか
エージェントにツールをつなぐ前に、そのツールが三つのどれを足すかを書き出す。非公開データ、信頼できない内容、外へ送る手段(リンク、画像の読み込み、プルリクエスト、メールを含む)だ。一つのセッションに三つがそろったら、一つを外す。認証情報のないサンドボックスで閲覧させる、送信経路を断つ、外への送信は一件ずつ人が承認する、のどれかにする。プロンプトインジェクションのフィルタを対策として数えない。信頼できるデータだけを読むエージェントや、出力が手元から出ないエージェントには要らない。
なぜ起きるか
LLM は内容の中にある指示に従う。しかも指示の重みを、それがどこから来たかで確実に区別することができない。だから Web ページでもメールでも issue でも、エージェントの前に文章を置ける人は、エージェントが触れる非公開データを集めて、手持ちの送信手段で外に出すよう指示できる。三つの能力はそれぞれ単独なら役に立つ。危険になるのは一つのセッションが三つともそろえたときで、利用者が出どころの違うツールを組み合わせた結果そうなることが多い。Simon Willison はこうした事例を何十件も集めている。ベンダーはたいてい持ち出しの経路をふさいで直したが、「これを 100% 確実に防ぐ方法は、まだわかっていない」。攻撃の 95% を捕まえると謳うフィルタでは穴はふさがらない。「Web アプリケーションのセキュリティでは、95% は明らかに落第点だ」。
実際にあったこと
2025年5月、Invariant Labs の Marco Milanta と Luca Beurer-Kellner は、GitHub 公式 MCP サーバを通した攻撃を報告した。攻撃者は利用者の公開リポジトリに、プロンプトインジェクションを仕込んだ issue を立てる。利用者がエージェントに open な issue を見るよう頼むと、エージェントはそれを読み、利用者の非公開リポジトリのデータをコンテキストに取り込み、公開リポジトリへのプルリクエストに書き出してしまう。攻撃者はそこで読める。著者らは、この攻撃は "does not require the MCP tools themselves to be compromised" と強調し、"a fundamental architectural issue that must be addressed at the agent system level." だと書いている。
記録を読む当てはまらなくなるとき
道具ではなく流れを縛る:役に立つアシスタントは三つを同時に要することが多い。Google DeepMind の CaMeL のような設計は、信頼できる利用者の依頼だけから手順を組み、データに権限の印をつけて三つとも残す。そうすれば、CaMeL が追跡する制御とデータの流れの範囲では、信頼できない内容がどの手順を実行するかを変えることも、ポリシーが禁じる先へ非公開データを送ることもできない。エージェントを自分で作るなら、能力を一つ外すよりこちらが合うこともある。ただし、こなせるタスクは減る。論文によれば、ベンチマーク AgentDojo で CaMeL は77%、防御なしのエージェントは84%だった。
出典
Simon Willison『The lethal trifecta for AI agents: private data, untrusted content, and external communication』(simonwillison.net, 2025)。三つの要素と "The only way to stay safe there is to avoid that lethal trifecta combination entirely." の出典。対抗原理は Edoardo Debenedetti ほか『Defeating Prompt Injections by Design』(arXiv, 2025) から。CaMeL が "explicitly extracts the control and data flows from the (trusted) query" し、信頼できないデータが "can never impact the program flow" とする出典で、タスク達成率(AgentDojo で77%、防御なしは84%)も同じ論文による。
原典を読む引用するとき
Hammurabi『第106条 致命的な三点セット』 https://kanywst.github.io/hammurabi/ja/laws/lethal-trifecta/
BibTeX
@misc{hammurabi-lethal-trifecta,
title = {致命的な三点セット},
author = {{Hammurabi contributors}},
note = {Hammurabi, § 106},
url = {https://kanywst.github.io/hammurabi/ja/laws/lethal-trifecta/}
}