SECURITY RESEARCH · MULTI-MODAL PROMPT INJECTION
Trail of Bits の研究公表(2025年8月21日)を一次情報とし、同攻撃クラスを確立した査読論文2件および Gemini CLI の公開記録を突き合わせて検証した解説
2025年8月21日、セキュリティ企業 Trail of Bits が、画像を送るだけで AI システムからデータを持ち出せる攻撃を公表した。仕掛けは画像そのものではなく、AI システムが画像をモデルへ渡す前に行う「縮小」という地味な工程にある。フル解像度では暗い背景しか見えない画像が、縮小された瞬間に、はっきりした指示文へと姿を変える[1]。
報じられた形は「画像に隠した指示で AI が乗っ取られる」である。だが一次情報を読むと、破られた場所が通説とずれている。
モデルは騙されていない。モデルは渡された画像を正しく読んだだけである。破られたのは、モデルの手前にある縮小処理と、利用者に見せている表示との間の一致だった。利用者が見ているのは元の画像、モデルが読んでいるのは縮小後の画像で、その2枚が違う——そして利用者にはその差を確かめる手段がない。
そのことは、緩和策の中身に表れている。Trail of Bits が挙げた対策の一つは「モデルが実際に見ている入力のプレビューを利用者に見せること」であって、モデルを賢くすることではない[1]。
Trail of Bits は本件を新種の発見としてではなく、既知の攻撃クラスが新しい場所に移ってきたものとして提示している。画像スケーリング攻撃は元来、固定入力サイズを要求する旧来のコンピュータビジョン系に対する手法だった。同社はこう続ける——その制約は新しい手法では一般的でなくなったが、「モデルを取り巻くシステム側が、依然としてスケーリングを要する制約を課しうる」[1]。
そのうえで同社は、この状況を「露出が少ないが広範な(underexposed, yet widespread)脆弱性」と呼び、エージェント型コーディングツールについて「影響の大きいプロンプトインジェクションの可能性を最小化するだけの、十分に安全な既定値・設計パターン・体系的防御を依然として欠いている」と総括している[1]。
この攻撃は、どのシステムにも同じ画像を投げれば通るというものではない。縮小アルゴリズムは3種類あり、さらにライブラリごとに実装が違うため、Trail of Bits は「実運用システムを攻略するには、システムごとにアルゴリズムと実装を特定する必要があった」と書いている[1]。攻撃ツール Anamorpher の README 自身も、追加の画像変換によってインジェクションの有効性が妨げられうると注記している[2]。挙動は決定論的ではない。
ただしこれを「だから大した脅威ではない」と読むのも同じだけ誤る。同社はその実装特定について「通常はアルゴリズムと実装を判定するのに十分な情報が得られた」と成功を自認しており[1]、その工程を担う Anamorpher は公開され、他の縮小アルゴリズムを追加できるモジュール式で、公表から約1年後の本稿執筆時点でも維持されている[2]。参入障壁は「専門知識」から「公開ツールの実行」へ下がっている。
本稿の事実主張は、断りのない限り Trail of Bits 単独の報告に依拠している。攻撃クラスそのものは査読を経た先行研究[3][4]が独立に確立しているが、Gemini CLI などの実サービスで成立したという主張を、独立に再現・検証した第三者の記録は、本稿の確認範囲には存在しない。
また同社はセキュリティ監査を業とする企業であり、本記事は自社の攻撃ツールの公開と同時に出ている。「この攻撃面は広範である」という未定量の主張は、同社の商業的関心と方向が一致する。本稿はその種の主張を、地の文ではなく同社の見解として扱う。
一方で、同社が自らの主張を弱める情報を2度みずから出していることは、逆方向の材料として数えてよい——後述する自動承認の構成を「攻撃者にとって重要な足がかり」と特筆した点と、ツールが常には効かないと注記した点である。
なぜ「縮小」で文字が現れるのか。原理はプロンプトエンジニアリングではなく、信号処理の古典的な現象である。
AI システムは、大きな画像をそのままモデルへ送らず、先に縮小することが多い。縮小とは、高解像度の複数の画素を補間して低解像度の一つの画素にまとめる処理である[1]。このとき、元の模様が細かすぎて標本化が追いつかないと、元とはまったく違う模様が復元されてしまう。エイリアシングと呼ばれる現象で、ナイキスト–シャノンの標本化定理の帰結である[1]。
画像スケーリング攻撃は、この曖昧さを逆用する。「縮小したときに狙った模様が浮かび上がる」ように、元画像の特定の画素を計算で仕込むのである[1]。Trail of Bits が公開したツール Anamorpher の場合、バイキュービック補間に対しては次のように作る——大きな暗部を持つ「おとり画像」を選び、暗部の画素を調整して、最小二乗最適化で縮小結果を赤い背景へ寄せる。暗部だけが赤に転じ、文字の部分はほぼ無改変で黒のまま残るため、フル解像度で見えるよりはるかに強いコントラストが生まれる[1]。
画像スケーリング攻撃は Trail of Bits の発見ではない。2019年の USENIX Security で Xiao らが発表し[3]、2020年に Quiring らが防止策まで含めて体系化した[4]。一次情報自身がこの2件を参照元として挙げ、原理の詳細は Quiring らを見よと書いている[1]。
本件で新しいのは攻撃の的である。かつての的は画像分類器そのものだった。いまの的は、マルチモーダル LLM の前に置かれた画像処理パイプラインと、その先につながったツール実行の権限である。
6系統のうち、実データの持ち出しまで具体的に記述されているのは Gemini CLI の1件である。その連鎖には、画像スケーリング以外の条件が含まれている。
Trail of Bits の記述はこうである。まず同社は、Zapier MCP サーバの既定構成を適用した。同社によれば、その既定構成は Gemini CLI の settings.json に trust=True を書き込むため、MCP のツール呼び出しがすべて利用者確認なしに自動承認される[1]。そのうえで利用者が一見無害な画像をアップロードすると、プレビューが無いため変換後の画像を見ることができず、その画像が Zapier の動作を誘発して、Google カレンダーに保存された利用者データが攻撃者のメールアドレスへ、確認を経ずに渡った[1]。
This automatically approves all MCP tool calls without user confirmation, as it sets trust=True in the settings.json of the Gemini CLI. This provides an important primitive for the attacker.
① trust=True は攻撃者が仕込んだ設定ではない。Trail of Bits によれば、それは Zapier MCP サーバの既定構成が書き込むものである[1]。研究者が攻撃を通すために恣意的に緩めた設定でもない。
② だからといって「Gemini CLI が既定で MCP を無条件に信頼する」わけではない。Gemini CLI 側のドキュメントでは、trust は利用者が設定するサーバについて既定 false である[5]。危ういのは CLI 単体の既定ではなく、両者を繋いだときに出来上がる構成である。なおこの既定値の確認は本稿の取得日(2026年8月4日)時点のものであり、一次情報が公表された2025年8月時点の値ではない。
なお、この trust=True に関する記述は Trail of Bits 単独の主張である。同社は根拠として Gemini CLI の Issue を挙げているが、当該 Issue は trust フィールドの分かりにくさを論じた一般的な指摘であって、Zapier の既定構成がその値を書き込むことは記録していない[6]。Zapier 側の確認も取れていない。本稿がこの点を必ず帰属付きで書いているのはそのためである。
本サイトが扱った s1ngularity の事案では、悪性パッケージが被害者のマシンにあった AI CLI を偵察に使ったが、被害の規模を決めたのは AI ではなく CI の権限設計とトークン失効までの時間だった。本件でも、Trail of Bits の記述に沿えば、実データが出ていくかどうかを分けたのは画像の精巧さではなく、ツール呼び出しに確認が挟まるかどうかだった。
破られたのはモデルではなく、その周りの設計である——という同じ形が、別の入口から繰り返し現れている。
ここが本件でもっとも誤解されやすい。「6つのシステムから情報が漏れた」ではない。
一次情報の冒頭の要約文は、「Google Gemini CLI を含む複数のシステム(systems)でデータ持ち出しを達成した」と複数形で書かれている[1]。だが本文を読むと、持ち出しの経路まで具体的に記述されているのは Gemini CLI と Zapier MCP の組み合わせだけである。他の5系統について本文が述べているのは「画像スケーリング攻撃の成立を実証した」ことであって、実データの持ち出しではない[1]。
| 系統 | 一次情報が主張していること | 実データの持ち出し | 本文に記述された固有の所見 |
|---|---|---|---|
| Gemini CLI(+Zapier MCP) | 画像スケーリング攻撃の成立 +データ持ち出し |
記述あり | Google カレンダーのデータが攻撃者のメールへ。trust=True による自動承認が前提。プレビューが無い |
| Vertex AI Studio(Gemini バックエンド) | 画像スケーリング攻撃の成立 | 記述なし | 「影響が特に大きい」と名指し。UI が縮小画像ではなく高解像度の画像を表示するため |
| Gemini ウェブ画面 | 画像スケーリング攻撃の成立 | 記述なし | 列挙のみ |
Gemini API(llm CLI 経由) |
画像スケーリング攻撃の成立 | 記述なし | 列挙のみ |
| Google アシスタント(Android) | 画像スケーリング攻撃の成立 | 記述なし | 列挙のみ |
| Genspark | 画像スケーリング攻撃の成立 | 記述なし | 列挙のみ |
この差は、深刻度の見積もりを大きく変える。「画像の中の指示がモデルに届いた」ことと、「その指示が実行されてデータが出ていった」ことのあいだには、ツール実行の権限という一段がある。前者だけなら、モデルは攻撃者の文章を読んだにすぎない。後者に進むには、読んだ指示を確認なしに実行できる経路が必要になる。6系統のうち、その経路が記述されているのは1件である。
記述が無いことは、試して失敗したことを意味しない。試していないだけの可能性を排除できない。一次情報は、検証したシステムの母数も、選定基準も、攻撃が成立しなかった対象の件数も公表していない。
言えるのは範囲についてだけである——「6系統で情報が漏れた」と書けば一次情報より強く、「1件しか成立していない」と書けば一次情報より弱い。
本サイトの Comet の記事で扱った Perplexity Comet の公開前監査を実施したのは、本件と同じ Trail of Bits である。2025年4月のその監査で同社が挙げた提言には、「システム指示と外部コンテンツの間に明確な境界を確立せよ」「AI エージェントの能力に最小権限原則を適用せよ」が含まれていた。本件で同社が「最強の防御」とするものは、その延長線上にある。
入口の違いも押さえておく価値がある。Comet の記事で扱った画像経由の注入は、黄色背景に淡い水色の文字という「見ようと思えば見える」隠し方だった。本件はそうではない——フル解像度には指示が存在せず、縮小処理を通って初めて出現する。人間が元画像をどれだけ注意深く見ても、そこには無い。
この攻撃には、一次情報が明記している実務上の制約がある。深刻度を正しく見積もるには、この制約を落とせない。
縮小アルゴリズムは最近傍補間・バイリニア補間・バイキュービック補間の3種類が主要で、アルゴリズムごとに攻撃の作り方が異なる。さらに、同じアルゴリズムでも Pillow・PyTorch・OpenCV・TensorFlow といったライブラリごとに実装が違い、アンチエイリアス、位置合わせ、カーネル位相が異なる[1]。したがって Trail of Bits は、実運用システムを攻略するにあたって、システムごとにアルゴリズムと実装を特定する必要があったと書いている[1]。
一次情報が述べていないことの一覧である。ここを飛ばすと、本件は実際より確定した事案に見える。
一次情報には開示タイムラインの節が存在しない。Google・Zapier・Genspark への報告日も、ベンダーの確認も、修正に関する記述も無い。第三者報道(2025年8月25日)にもベンダー声明は無かった。
これは「ベンダーが黙殺した」という意味ではない。責任ある開示が行われたかどうか自体が公表されていない、という意味である。本稿はここから、どちらの方向にも推測しない。
一次情報にも第三者報道にも CVE 番号は無い(確認範囲)。一次情報が示すのは今後の緩和策であって、適用済みの手当てではない。
そして本稿は、公表から約1年が経った現在の各製品の既定値や修正状況を独自に検証していない。したがって「未修正のまま」とも「修正済み」とも書かない。
本件は研究者自身による実証(PoC)の報告である。実際の被害者、観測された悪用、影響を受けた利用者数——いずれにも言及が無い。
実証はいずれも「利用者が画像をアップロードする」ところから始まっている。どうやって被害者にその画像を掴ませるかは扱われていない。「画像を開くだけで被害に遭う」と読むのは、一次情報より強い。
一次情報は「我々の検証は、この攻撃面が広範であり、ここに記録したアプリケーションやシステムをはるかに超えて広がっていることを確認した」と述べている[1]。だが検証対象の母数、選定基準、成立しなかった事例はいずれも非開示で、独立再現も無い。
本稿はこの一文を、確信度を付けずに Trail of Bits の主張として引用するに留める。攻撃クラスの機序が一般的であること(これは先行研究[3][4]が独立に確立している)と、「同社の検証が広範さを確認した」ことは、別の主張である。
Trail of Bits は3つの緩和策を挙げ、そのうち一つを明確に「最強の防御」と位置づけている。順序に意味がある。
| 順 | 緩和策 | 効く層 | 本稿の注記 |
|---|---|---|---|
| ① | 画像の縮小を行わず、単にアップロード寸法を制限する | 前処理 | 攻撃の前提そのものを消す。ただし縮小を要する設計では採れない |
| ② | モデルが実際に見ている入力のプレビューを、常に利用者へ提示する。CLI や API のツールであっても | 表示 | 攻撃は残るが、利用者とモデルの視界の断絶が閉じる。Gemini CLI に無く、Vertex AI Studio が誤った側を見せていたのはここ |
| ③ | 安全な設計パターンと体系的防御。入力、とりわけ画像内の文字は、明示的な利用者確認なしに機微なツール呼び出しを開始できてはならない | 実行権限 | 一次情報が「最強の防御」と明示。多モーダルに限らないプロンプトインジェクション全般を対象にしている |
③ の書きぶりに注意したい。この要件は画像を名指してはいる(「とりわけ画像内の文字」)が、スケーリングにも縮小アルゴリズムにも一切言及していない。要件の本体は「機微なツール呼び出しに明示的な確認を要する」であり、指示がどの経路で入ってきたかに依存しない層に置かれている。だからこそ「最強」と呼べる——攻撃手法の目録を追いかけ続ける必要がないからである。
アルゴリズムによって脆弱性に差はある。だが Trail of Bits は「最も脆弱でないアルゴリズムと実装を突き止めようとする方針は、堅牢な手当てではない」と書く。画像スケーリング攻撃は前述の3アルゴリズムに限られないためである[1]。
調達や設計の場で「どのライブラリが安全か」を問うと、この一文と正面から衝突する。問うべきは層である。
本件で悪用されたのは、リサンプリングという、どの画像処理系にもある地味な工程である。モデルの安全性評価をいくら重ねても、この工程は視野に入らない。マルチモーダル AI を導入するとき、点検すべき対象には入力がモデルに届くまでに通る変換の一覧が含まれる——縮小、切り抜き、形式変換、圧縮。変換があるところには、変換前後で意味が変わる余地がある。
本件を一文で言えば、この等式が破れていたということである。Gemini CLI ではプレビューが無く、Vertex AI Studio では縮小前の画像が表示されていた。どちらも「悪意ある動作」ではなく、単に一致していなかっただけである。
自社で AI 機能を実装している場合、これは今日確認できる項目になる——利用者に見せている画像と、モデルへ渡している画像は、同じものか。
6系統で攻撃が成立したなかで、実データの持ち出しまで記述があるのは自動承認が有効になっていた1件である。しかも trust=True は攻撃者が仕込んだのではなく、Trail of Bits によれば連携先の既定構成が書き込んだものだった。
MCP やエージェント連携を導入するときに点検すべきは、モデルの賢さではなく、「その連携が確認をどう扱うか」である。とくに、導入手順に従っただけで確認が外れる構成になっていないか——本件が示したのは、そこが既定値の問題として現れるということである。
この攻撃クラスは2019年に学術発表され、2020年に防止策まで含めて体系化されていた[3][4]。新しいのは手法ではなく、手法が届く先である。かつては画像分類器で完結していた被害が、いまはツール実行の権限につながっている。
裏を返せば、「旧来のコンピュータビジョンの脅威」として棚に上げられた研究が、AI エージェントの文脈で再評価を要するということでもある。一次情報自身が、モバイル・エッジ端末や音声 AI を次の検討対象に挙げている[1]——いずれもまだ検証されていない予測である。
本件の事実主張は、実質的に Trail of Bits 1社に依拠している。独立再現の記録は無く、ベンダーの応答も公表されていない。それでも本稿がこの事案を扱う価値があると判断したのは、機序が査読済みの先行研究で確立しており、検証手段(Anamorpher)が公開されていて、同社が自らの主張を弱める情報も出しているからである。
逆に言えば、この3つが揃わない単一出所の研究は、同じようには扱えない。報告の受け取り方を決めるのは、見出しの派手さではなく、読者が自分で確かめられる余地がどれだけ残されているかである。