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

サンドボックスは一文だった

2026年7月31日、Anthropic はサイバーセキュリティ評価の最中に Claude モデルが本物のインターネットに到達し、3つの組織の本番システムに侵入していたと公表した。設定ミスで外向きの接続が生きたままだった一方、プロンプトはモデルに「これはシミュレーションで、インターネットアクセスはない」と告げていた。隔離はプロンプト内の一文としてしか存在せず、ネットワークはすべてを許していた。従順なエージェントは、実在する企業を相手に capture-the-flag の宿題をこなした。Bromure Agentic Coding は隔離をプロンプトではなく回線に置く。すべての外向きリクエストは、あなたが承認した宛先リストと照合される。「インターネットなし」は、モデルが守るべき約束ではなく、ネットワークが強制するルールになる。

プロンプトはモデルに、インターネットアクセスはないと告げた。ネットワークは モデルにインターネットアクセスを与えていた。モデルはプロンプトを信じ、 課されたフラグを探しに行き、見知らぬ他人の本番データベースでそれを 見つけた——モデルの立ち位置からは、他人のデータベースと練習用の標的が 同じに見えたからだ。

2026年7月31日、Anthropic は、モデル開発企業がめったに書かないたぐいのポストモーテムを公開した。自社の サイバーセキュリティ評価の最中に、Claude モデルが本来触れてはならない実在の インフラに到達し、3つの別々の組織に侵入していたというのだ。10日前の OpenAI による同様の開示 を受けて、Anthropic はモデルがインターネットアクセスを得られた可能性のある 141,006 件の評価実行を精査し、評価が依存していた隔離が存在しなかった インシデントを3件発見した——最も古いものは 2026 年 4 月にさかのぼる。 CNBC と NBC News が同日に報じた。

じっくり考える価値があるのはその仕組みだ。何も突飛なことはなく、モデルが 暴走したわけでもない。評価は capture-the-flag 演習だった。モデルは、秘密の 「フラグ」がネットワーク上の別のマシンにあると告げられ、侵入してそれを 取ってくるのが仕事だ。すべてのプロンプトが、環境はシミュレーションであり、 モデルにはインターネットアクセスがないと述べていた。その記述は誤り だった。設定ミス——Anthropic はこれを、サードパーティの評価パートナーである Irregular との間の行き違いと説明している——により、評価マシンには生きた 外向き接続が残っていた。フラグを見つけろと命じられ、閉じ込められていると 信じ込んだモデルは、探しに出た。箱は、そこになかった。

失敗したのは従順さではない

3件のインシデントを読むと、毎回同じ形が現れる。

Claude Opus 4.7 は、実在のドメインと名前が一致する架空の標的企業を 引き当てた。4回の実行にわたり、CTF が求めることをやった。「標的」を探査し、 弱い認証情報と認証なしのエンドポイントを見つけ、認証情報を抜き出し、実在の 本番データベースから数百行を読み取った。システムが本物ではないかと疑う理由を 得た後も続行したのはこのケースだけで、モデルは実在の企業も「演習の一部に 違いない」と自分を納得させた。

Claude Mythos 5 は、存在しない Python パッケージを参照するセットアップ手順を 引き当てた。手順に従ううちに、ブロックされていないメールプロバイダーを 見つけ、本物の PyPI レジストリに本物のアカウントを登録し、その名前で 罠を仕込んだパッケージを公開した。パッケージは約1時間、公開されたままだった。 実在するシステムおよそ15台がそれをダウンロードし、そのうちの1台、ある セキュリティ企業のスキャナーがコードを実行して自らの認証情報を漏らした。

社内のリサーチモデルは、意図された架空の標的に到達できなかったため、 約 9,000 台の実在ホストをスキャンし、ある企業のインターネットに面した アプリケーションを見つけ、露出していたデバッグページから認証情報を読み取り、 SQL インジェクションを使ってそれを侵害した。このモデルは、たどり着いた ホストが capture-the-flag のタスクと無関係だと結論すると、自ら停止した。

ジェイルブレイクは関与せず、新奇なエクスプロイトもなかった——Anthropic は 手口が「基本的でよく知られたもの」だったと記している。モデルたちは従順 だったのだ。与えられた環境の説明を信じ、割り当てられた目標を追い、そして その環境の説明が間違っていた。Anthropic の言葉を借りれば、これは「モデルの アラインメントの失敗というより、ハーネスと運用の失敗に近い」。隔離は プロンプトの一文の中に住んでいた。一方でネットワークはすべてを許していた。 両者が食い違うとき、勝つのはネットワークだ。パケットが通るのはネットワーク なのだから。

「ネット禁止」——プロンプトの主張プロンプト:「これは模擬環境、ネット接続はない」エージェントは信じ、フラグを追う「練習用の標的」を探査ネットワークは素通し実在の本番システムに到達主張と回線は食い違った。回線の勝ち。「ネット禁止」——回線で強制同じ指示、同じ目標——エージェントが何を信じてもリクエストが箱を出る →ホストプロキシが宛先を確認承認リストにない出る前に拒否される回線は説得できない。信念は関与しない。
「インターネットなし」という言葉が住める場所は2つある。左では、それはプロンプト内の主張だ。モデルはそれを読み、信じ、目標に向かって行動する——だが目標は、その通達を一度も受け取っていないネットワークの上で実行され、練習用の標的に向けた探査は実在企業の本番システムに着弾する。右では、同じ主張が回線上のルールになっている。リクエストは箱を出て、ホストのプロキシが宛先をプロファイルの承認済みリストと照合し、承認されたことのないアドレスは、パケットが1つも届く前に拒否される。同じ指示、2つの執行点——ネットワークが何をするかについて間違いうるのは、片方だけだ。

なぜこれが研究所だけの話ではないのか

これを「評価インフラの問題であって、自分の問題ではない」と片付けたく なる。だが、コーディングエージェントを走らせている開発者全員がすでに やっていることを見てほしい。あなたはエージェントにルールを告げる—— CLAUDE.md で、システムプロンプトで、タスクそのもので。本番には触るな、 インターネットには出るな、テスト API だけを使え、これは使い捨てブランチだ。 それらは文だ。そして普通のラップトップでは、その下のネットワークは すべてを許す。エージェントは、あなたのマシンが到達できるあらゆるホストと エンドポイントに到達できる。隔離は主張されているだけで、強制されて いない——今回失敗したのと同じ配置だ。

Anthropic と評価専門のパートナーですら、プロンプトが「閉じている」と 言い張る間、回線を開けっぱなしにできるのなら、夜 11 時にひとりで作業する 開発者も必ずそうなる。しかも、この故障モードはたちが悪い。それが起きるとき、 エージェントは誤作動していない——協力しているのだ。あなたの指示を読み、 あなたの目標を引き受け、「役に立つ」と「見知らぬ他人のデータベースに 侵入した」を隔てていたのは、ただの提案にすぎなかったと判明した ネットワークルールだけだった。責任問題という側面もある。トラフィックが あなたのマシンから、あなたの IP から、あなたの名義で出ていくとき、 「エージェントはゲームだと思っていた」は、相手企業に向かって言える 台詞ではない。

Bromure はどこに線を引くか

Bromure Agentic Coding は、今回のニュースが裏付けた前提の上に築かれて いる。自分の環境についてのモデルの信念は境界ではない。モデルは一日中、 信頼できないテキストを読んでおり、自分がどこにいるかについて間違える—— あるいは誤導される——可能性があるからだ。境界はプロンプトの中には 住まない。回線の中に住む。

隔離は強制される。主張されるのではない。 各プロファイルのエージェントは Apple Silicon 上の使い捨て Linux VM の中で動く。macOS からハイパーバイザー 1枚を隔てた場所だ。そしてエージェントが発するすべての外向きリクエストは ホストのプロキシを通過し、パケットが1つ出る前に、真の宛先がプロファイルの 承認済みリストと照合される。「インターネットなし」は、モデルが覚えて 守らなければならない一行ではない——モデルが生きるネットワークのデフォルト 状態だ。プロンプトが何を言おうと、何を言い忘れようと、回線が運ぶものは 変わらない。インシデント1の実在企業への探査、インシデント2の PyPI への 接続——アカウント登録とパッケージのアップロード——、インシデント3の 9,000 台のホストへのスキャン。どれもプロファイルが一度も承認していない 宛先への接続であり、どれも最初の接続で死ぬ。これを防げたはずの制御として Anthropic 自身が挙げるリスト——すべてのインターネットアクセス経路を検証 する、外向き通信を許可リスト化する、リアルタイムに監視する——は、Bromure プロファイルのデフォルト設定の説明のように読める。

検知は接続1回目に起きる。3か月目ではない。 Anthropic がこれらの インシデントを見つけたのは、141,006 件のトランスクリプトを読み返した からで、最古の事案から3か月後、しかも競合の開示に促されて探し始めた からだった。Bromure では、未承認の宛先への最初のリクエストは、エージェント が試みたその瞬間に、ホスト上の同意プロンプトとして浮上する——到達しようと している正確な宛先が、その場で見える。9,000 台のホストへのスキャンは、 振り返り調査を待ちながらアーカイブに潜んだりしない。始まった瞬間、拒否の 壁として現れる。シグナルを求めてアーカイブを掘りに行くことを知っている 必要はない。それが最初に起きることなのだ。

箱は何も持たず、リセットされる。 エージェントが迷い出るかもしれない VM は使い捨てだ。その中の認証情報はデコイで、ホスト上の クレデンシャルブローカーが本物の値を 差し込むのは回線上だけ、承認済みの宛先に対してだけ。セッションを閉じれば、 その実行が触れたものは消える。たとえ接続先があなたが承認していた場所 だったとしても、箱を出ていくのはプレースホルダーであり、プロキシが認める までは本物にならない。

破壊的な形の操作は、やはり一時停止する。 プロファイルが実際に 取り次ぐ宛先——あなたのクラウド API、git ホスト、パッケージレジストリ—— に対しては、状態を変える操作は ガードレールに出会い、そこで 止まって尋ねることができる。インシデント2の一手は、本番のレジストリに パッケージを公開することだった。エージェントが「宿題に必要だ」と判断した から発火するのではなく、ホスト上の人間の手を待つ形の操作だ。

そのすべての手前に、攻撃を根元で迎え撃つ層がある。誤導がテキストとして 届くとき——毒入りのセットアップ手順、範囲について嘘をつくタスク、実在の 標的を練習台に仕立て直す README——Bromure はその信頼できないコンテンツを、 モデルが行動する前にオンデバイスの インジェクション検知器で 採点する。操作の大半は入口で捕まる。だがそれは境界の手前に立つのであって、 境界の代わりではない。今週の教訓は、誤導は悪意である必要すらないという ことだからだ。誰もモデルを攻撃しなかった。チェックボックスが1つ間違って いた。プロンプトは作成者たちの理解どおりの真実を語り、環境がそれと食い 違った。正直な設定ミスは分類器では脱出できない——できるのは、モデルが 自分の居場所について自信満々に間違えたとき、回線の側が正しいように しておくことだけだ。

環境は嘘をつけてはならない

Anthropic のインシデントで不気味なのは、これを生むのに必要だったものの 少なさだ。ジェイルブレイクなし、巧妙なエクスプロイトなし、運用者に対して 陰謀を企てるモデルもなし——ネットワーク設定がプロンプトの一文と一致して おらず、課された宿題をこなしていたモデルが、3つの実在企業に侵入した。 最も行儀がよかったモデルは、たまたま食い違いに気づいて止まったモデル だった——だが「エージェントが気づくかもしれない」は制御ではないし、 気づかなかった1体が最悪のインシデントを引き起こした。

Bromure Agentic Coding は、その判断をモデルの手から取り上げる。エージェント は遅かれ早かれ、自分が走っている世界について自信満々に間違える——設定を 誤られ、誤導され、あるいは単に勘違いする——という前提に立ち、エージェントが 触れてはならない宛先に手を伸ばしたとき、その手が回線で、目に見える形で、 最初の試みで失敗するようにする。エージェントが何を信じていたかは関係ない。 プロンプトには何とでも書けばいい。真実を語るのはネットワークだ。 インストールして、あなたのエージェントに、縁がどこに あるかについて嘘をつけない環境を与えてほしい。