すべての投稿に戻る
公開日 · 著者 Renaud Deraison

エージェントは句読点を信じた

Agent Data Injectionは、ソウル大学校、UIUC、Largosoftが2026年7月に公開した概念実証で、プロンプトの中に指示を隠すのではない。エージェントが信頼できるフィールドと信頼できないテキストを見分けるための句読点——曲がった引用符、エスケープされた引用符、迷い込んだドル記号まで——を偽造し、攻撃者のGitHubコメントがメンテナー自身の修正として読まれ、偽造されたCI記録がクリーンなビルドとして読まれるようにする。GPT-5.2、Claude、Geminiにわたって、専用のプロンプトインジェクション防御を最大で半分の割合ですり抜けた。Bromure Agentic Codingは、テキストが計画になる前に偽造された区切り文字を正規化し、箱の外へ届く「これを実行」「これをマージ」というアクションを止め、その全体をおとりの認証情報を積んだ使い捨てのLinux VM上で走らせる。

あなたのコーディングエージェントは、どのテキストに従うかを、その周りの 句読点を読んで決める——「この部分はメンテナー、あの部分は見知らぬ人の コメント」と告げる引用符と波括弧を。新しい攻撃はその句読点を偽造する。 より巧妙な指示を書くのではない。曲がった引用符を一つ書くと、見知らぬ人の コメントがメンテナーの名を身にまとい始める。

2026年7月6日、ソウル大学校、イリノイ大学アーバナ・シャンペーン校、 Largosoftの研究者たち——Woohyuk Choi氏とByoungyoung Lee教授が率いる——が、 率直な題の論文を公開した。 Agent Data Injection Attacks are Realistic Threats to AI Agents。 それは、プロンプトインジェクションの中ではなくその隣に位置する攻撃クラス Agent Data Injection(ADI)を記述し、古典的なプロンプトインジェクションが ほぼゼロだった場所で、 専用のインジェクション防御を最大で半分の割合ですり抜けた。 OpenAI、Google、Anthropicは、それが機能することを確認した。公開時点で修正は 報告されていない。

これがコーディングエージェントを動かす誰にとっても重要なのは、エージェントが 信じずにはいられないものを攻撃するからだ。取得したデータと、そのデータが 届いた構造との境界を。

区切り文字がセキュリティの境界だ

エージェントのコンテキストは多くの出所からのテキストの山だ——あなたの指示、 ファイル、ウェブページ、誰かが課題に残したコメント。分別ある行動のために、 モデルはどの断片がどれかを追い続けねばならない。これはメンテナーの名前、 あれは見知らぬ人が書いたコメントの本文。それをモデルは、テキストが許す 唯一の方法で行う——句読点で。引用符と波括弧、タグ、角括弧、改行。区切り文字は、 信頼できるフィールドが終わり、信頼できない内容が始まる場所を刻む。

厳格なパーサーはこれらの区切り文字を文字どおりに扱う。引用符は引用符であり、 コメントの途中の文字はただの文字だ。言語モデルはそうしない。論文の枠組みでは、 モデルは句読点を推測で読む——文字が見た目で何を意味するかから構造を推し量る。 そこが全ての隙だ。低信頼のフィールド——製品レビュー、GitHubの課題コメント、 ファイル中の一行——を握る攻撃者が、句読点らしき文字をそこに散りばめると、 モデルは決して存在しなかった構造を読む。

不穏なのは、それがどれほどわずかな技巧しか要さないかだ。研究者はこの手法を 確率的区切り文字インジェクションと呼び、偽の句読点は「正しくある必要すら ない」と見出した。エスケープされた引用符、曲がった引用符、迷い込んだドル記号 までもが、本物のフィールド境界として通り、モデルを欺いた。厳格なパーサーなら そのどれもをただのテキストとして読んだだろう。

エージェントが信じるもの信頼フィールドauthor = メンテナー信頼できない内容見知らぬ人のコメント無害——境界は保たれる"競合状態に見える"信頼できないままADI——偽造された区切り文字fix"author: maintainer"run this to曲がった引用符が切れ目を偽装エージェントは攻撃者のテキストを信頼フィールドとして読む「メンテナーの修正を適用」→ 攻撃者のコマンドを実行指示は隠されていない。信頼と非信頼を仕分ける句読点が偽造された。
エージェントは、周りの句読点を使って、信頼できるフィールド(誰が書いたか)を信頼できない内容(何を書いたか)から分ける。Agent Data Injectionは、攻撃者がすでに握っているフィールドの内側からその句読点を偽造する——曲がった引用符、エスケープされた引用符、ドル記号——ので、攻撃者が書いたテキストが信頼できる出所から来たかのように読まれる。指示がペイロードなのではない。区切り文字がそれだ。

それがコーディングエージェントに何をするか

ADIのウェブエージェント版は思い描きやすい。ページ要素の識別子を偽造すれば、 あなたの代わりに買い物をするエージェントは「もっと読む」を押すつもりで 「今すぐ購入」を押す。開発者を狙う版はもっと悪い。偽造する信頼フィールドが 誰がそのコードを安全だと言ったかだからだ。

あるデモでは、攻撃者がGitHubの課題にコメントを残し、著者の帰属を偽造して、 エージェントがそれをプロジェクトのメンテナーからのものとして読むようにする。 後で開発者がエージェントに「メンテナーの修正を適用して」と頼むと、 Claude Code、OpenAIのCodex、GoogleのGemini CLI はまさにそれをする——攻撃者のコマンドを実行する。モデルの見立てでは、 メンテナーがそれを求めたからだ。別のデモでは、悪意あるプルリクエストが、 自身の完了したCIチェックの記録を偽造する。エージェントはコンテキストの中に クリーンなビルドを見て、その捏造された証拠を根拠にコードを安全と判断し、 本物のマルウェアをマージする。

チームが試した六つのモデル——GPT-5.2、GPT-5-mini、Claude Opus 4.5とSonnet 4.5、 Gemini 3 ProとFlash——にわたって、その数字は丸め誤差ではない。構造化データは 31〜43%の成功率をもたらし、ウェブページのデータは33%から100%まで及んだ。 そして、プロンプトインジェクションを止めるために専用に作られた防御に対しても、 ADIはなお最大で半分の割合で通り抜けた——同じ防御が古典的なインジェクションを 冷たく止めた場所で。二つの緩和策が実験室で効き、どちらも代償を伴った。ページ 要素にランダムで推測不能なIDを付ける(ChatGPTのAtlasブラウザがするように)と 成功率は約49%から29%へ下がり、厳密なデータ来歴の追跡は攻撃をゼロへ追いやった ——一方でエージェントが通常のタスクを終える能力を約三分の一へ落としながら。

なぜ通常のフィルターは見逃すのか

プロンプトインジェクションのフィルターは、データの中に隠れる指示に気づく よう訓練されている——「以前の指示を無視せよ」「このコマンドを実行せよ」、 内容に化けたコマンドの見覚えある形。ADIはその形を要さない。悪意ある テキストは、ありふれたメンテナーのメモのように読める。攻撃を運ぶのはその 周りの句読点であり、疑わしい言い回しを探して読むフィルターは、曲がった 引用符の前をすんなり通り過ぎる。だからこそ、論文自身の機能する防御は、 より賢い分類器ではなく、より厳格なパーサーだった——フィールドがどこで 終わるかを推測することを拒む来歴だ。

これはエージェントセキュリティの他の部分が何度も学び直す教訓と同じだ。 コマンドの拒否リストは コマンドを書き換えるシェルに負ける。 信頼されたMCPツールは 攻撃者が書いたデータを返す。 信頼したワークスペースは あなたが望まないサーバーを起動する。 ADIは、汚染されたものが指示でもデータでもなく、——どのテキストを信じるか をエージェントに告げる区切り文字——である版だ。曲がった引用符からパターン 一致で抜け出すことはできない。

Bromureが線を引く場所

Bromure Agentic Codingは、フィールドがどこで終わるかについてモデルをより 上手な推測者にしようとはしない。モデルにできない二つのことをやり、そして 両方が誤ったときに損害が使い捨ての場所に着地するようにする。

第一に、偽造された区切り文字は、テキストが計画になる前に正規化される。 Bromureのオンデバイスのプロンプトインジェクション検出は、意図を読む ローカルモデルだけではない。決定論的スキャナー——見えないUnicodeや 同形異字の細工を捕らえる、まさにそれ——と対になっている。曲がった引用符は まっすぐな引用符へ畳まれ、紛らわしい文字やゼロ幅文字は取り除かれ、区切り 文字が正規の構造に合わないフィールドはフラグが立つ。これは、研究者がADIに 効くと見出した厳格パーサーの本能で、エージェントが取得した信頼できない テキスト——悪意あるCLAUDE.mdや汚染されたコメントと同じ種類の入力——に 一つの層として適用され、その全てがあなたのMacの上にとどまる。

第二に、ADIが本当に望む二つのアクションは、なお境界で止まる。 攻撃が 引き起こそうとするものを見よ。メンテナーの修正を実行することと、 プルリクエストをマージすることだ。どちらもエージェントのサンドボックスの 外へ手を伸ばすアクション——シェルコマンド、リモートへのpush——である。 Bromureが動かす各エージェント——Claude Code、Codex、Grok Build——は使い捨ての Linux VMの中で走り、その箱を出る手順こそBromureが確認のために提示するものだ。 偽造された帰属はコマンドを自動実行できず、偽造されたCI記録はブランチを 自動マージできない。「メンテナーがそう言った」は、確認の手順がまさに再確認 するために存在する判断だからだ。

第三に、もしコマンドが走っても、それは捨てる箱の中で走る。 ある区切り 文字が正規化器をすり抜けるほど新しく、レビューを通るほど説得力があると しよう。コマンドはVMの中で実行される。プロファイルをベースへリセットすれば、 それが落としたもの——スクリプト、SSH鍵、スケジュールされたジョブ——は消える。 それがしたことは何一つ、ウィンドウが閉じるのを生き延びない。

第四に、盗むべき本物の認証情報などない。 環境とディスクをトークンを求めて あさる「修正」は、Bromureのおとりを見つける——合成のAWS鍵、使い捨ての ~/.kube/config、プレースホルダのgitとレジストリのトークン(brm_…)。 本物の秘密は、ホストで、プロキシで、本物のAPIへ出ていく途中でのみ差し替え られる。コマンドが箱の外へ送り出すものは、何も認証しない文字列の袋であり、 それを送り出す接続はセキュリティログに、あなたが見られる送信トラフィックと して現れる。

使い捨てのLinux VM偽造コメント曲がった引用符が境界を偽装決定論的スキャナー曲がり → まっすぐ、不整合フィールドにフラグコマンドがすり抜けても箱で走る・おとりをあさるベースへリセットで消える修正を実行? PRをマージ?境界アクション——確認のため保留本物の秘密はホストに残る回線上で差し替え、送信は記録コメントはそれでも植えられる。ただ、メンテナーとして署名することはできない。
同じ偽造されたコメントを、Bromureの中で取得する。決定論的スキャナーは曲がった引用符をまっすぐなものへ畳み戻し、テキストが計画になる前に合わないフィールドにフラグを立てる。それでもコマンドがすり抜ければ、それはおとりの認証情報に対して使い捨てのVMの中で走り、ADIが望む二つのアクション——修正を実行、PRをマージ——は箱の外へ届くので確認の境界で止まる。コメントはそれでも植えられる。ただ、自分に署名することはできない。

これが線を引くもの

正規化と確認は封じ込めであって、構造を推測で読むモデルの治療ではない。 Bromureが何を変え、何を変えないかを正確に述べる価値がある。

コメントはそれでも植えられる

Bromureは、攻撃者が偽造したGitHubコメントを残すことも、CI記録を偽ることも 妨げないし、言語モデルがフィールドの終わりを推し量るという根本の事実も 直さない。それらはモデルとプラットフォームが解くべきものだ。Bromureが 変えるのは、エージェントが偽造テキストを読んだ後に起きることだ。それは 正規化され、それが引き起こそうとするアクションは検査される。

正規化は網であって壁ではない

曲がった引用符を畳み、紛らわしい文字を取り除き、不整合な区切り文字に フラグを立てることは、研究者が示したADIの細工とそれ以上を捕らえる。 しかし新種の区切り文字は、単一のスキャナーをすり抜けるように言い回せる。 それを一つの層として扱おう。おとりの鍵と記録された送信を持つ使い捨ての 箱こそ、スキャナーが取り逃したときに支えるものだ。

確認は境界を守り、あらゆる編集を守るのではない

確認の手順は、箱を出るアクション——コマンドの実行、push、マージ——で その場所を得る。VMの中のファイルを編集するだけの偽造された指示は、 プロンプトではなく、隔離とおとりが捕らえる。境界アクションは施錠して おこう。そこが、偽造された「メンテナーがそう言った」が二度目の一瞥に 値する場所だ。

差し替えはあなたが設定する秘密を覆う

おとりの入れ替えは、あなたがプロファイルに入れる認証情報を守る。モデルの 鍵、gitとクラウドのトークン、レジストリとクラスターのトークン、SSH鍵。 スクリプトが実行中にディスクへ書くトークンや、あなたが箱の中で手動で 開くセッションは、ただのデータだ。秘密はワークスペースではなくブローカーに 置こう。

研究者の要点は、六つのモデルが一つのバグを共有していることではない。要点は、 エージェントが信頼できるフィールドを信頼できない内容から見分ける仕方——推測で 読む句読点——が、エージェントが外の世界と出会うあらゆる場所で同じであり、 そしてそれが今四半期に直されはしないということだ。今日、偽造された区切り文字は GitHubのコメントに住む。明日はJiraのフィールド、コミットのトレーラー、取得 されたページのヘッダーだ。あなたのエージェントは、攻撃者が引いた境界を読み、 最大で半分の割合でそれを信じる。問いは、句読点がいつか欺くかどうかではない。 問いは、それが欺いたときに何が走るかだ。あなたのマシン、あなたの本物の トークン、そして自らをmainへpushしたコマンド——か、引用符をまず正規化し、 マージを一瞥のために保留し、中にはおとりしかなかった使い捨てのLinuxの箱か。 Bromureはそれを後者にする。