隔離がコマンドを実行した
2026年8月10日、Manifold Security は Cursor の CLI エージェントの欠陥を公表した。エージェントを隔離された git worktree で起動するフラグが、クローンしたばかりのリポジトリから JSON ファイルを読み、その中身をそのままシェルへ渡していた。Workspace Trust の確認より前に、しかもサンドボックスを有効にしていても、その外側で。モデルもなければ、プロンプトインジェクションもなく、説得もない。Bromure Agentic Coding は同じ worktree のプリミティブを、リポジトリがコマンドを置ける場所を一つも持たない形で、リポジトリが届くより前から存在していた VM の中に用意する。
あなたが打ったのは「これを隔離しろ」という意味のフラグだった。そのフラグこそ が、リポジトリのシェルコマンドを、あなたとして、あなたのマシンで、リポジトリ を信頼するかを何かが尋ねるより前に実行した。
2026年8月10日、Manifold Security の Francisco Rosales が
Cursor のコマンドライン版コーディングエージェントの調査結果
を公表し、その3日後に The Hacker News が
ThreatsDay のまとめ
で取り上げた。概念実証が開くのは電卓である。それは Manifold が列挙するリストの
上品な版にすぎない。~/.ssh を読む、環境からクラウド認証情報を奪う、リバース
シェルを開く、永続化を書き込む。
ペイロードではなく、配送の仕方として読んでほしい。誰も何も注入していないし、誰 もモデルを説得していないし、巧妙な一文が README に潜んでいたわけでもない。リポ ジトリの中で追跡されている JSON ファイルがコマンドを名指しし、隔離こそが仕事の はずのエージェントの部分が、それを実行した。
フラグと JSON ファイルと、順序の間違い
cursor-agent は Cursor のコーディングエージェントのターミナル版である。作業ツ
リーにエージェントを放つのは不安なので、CLI は封じ込めを提供しており、それは自
身のパラメータリファレンスに記載されている。
-w, --worktree [name] Start in an isolated git worktree at
~/.cursor/worktrees/<reponame>/<name>
新しい worktree はきれいなチェックアウトなので、ビルド成果物が一つも入っていな
い。使える状態にするため、CLI は worktree を作るときに既定でセットアップ手順を
走らせる。その手順は、いまチェックアウトしたばかりのリポジトリから
.cursor/worktrees.json を読み、setup-worktree の値をそのまま sh -c へ渡
す。
{
"setup-worktree": "<any shell command>"
}
その値とシェルのあいだに何があったかについての Manifold の記述は三語で済む。 「パースなし、許可リストなし、確認なし」。
.cursor/worktrees.json はごく普通の追跡ファイルである。README やロックファ
イルと同じように、素の git clone で一緒に届く。2026.07.23-e383d2b より前の
ビルドでは、worktree の作成とセットアップはワークスペース解決の最中に走り、その
ワークスペース解決は Workspace Trust ダイアログを保持するコードパスより先に終わ
っていた。つまりコマンドが先だった。Manifold のレポートに添えられた録画では、タ
ーミナルがまだ Running worktree setup commands… を表示している最中に電卓が開
き、そのあとでようやく、このディレクトリを信頼するかと尋ねるダイアログが現れ
る。
そのダイアログが何のためにあるかについて、Cursor ははっきりしている。リポジトリ
が制御するものは、あなたが受け入れる前に何一つ実行されてはならない。それでも実
行されてしまうとき、業界にはそのバグクラスの名前がある——信頼前実行——そして
Cursor は同じディレクトリで、以前にもその修正を出している。2025年、リポジトリが
同梱した .cursor/mcp.json が、プロジェクトを開いた瞬間に設定済みのサーバーを
自動起動していた。それが
CVE-2025-64109
となり、CVSS 8.8 の High と評価された。同じ CLI での .cursor/cli.json の緩す
ぎる扱いは
CVE-2025-61592
となり、これも High、これも 8.8 だった。-w の worktree パスはそのときまだ存在
しなかった。それはその修正の5か月後に、同じプリミティブを携え、ゲートを持たない
まま出荷された。
Manifold の報告は7月20日。Cursor は7月23日に並べ替えを出荷した。信頼のダイアロ グが先に描画され、セットアップコマンドはワークスペースが信頼されるまで待つよう になった。7月29日、Cursor はこの報告を Informative として閉じた。悪用には、ユ ーザーが攻撃者の管理するリポジトリをクローンする必要がある、という理由で。覚え ておく価値があるのは Manifold の答えのほうだ。リポジトリをクローンすることは この製品がそのために存在すること であり、それは Cursor が 8.8 と評価して直した CVE-2025-64109 の前提条件でもあっ た。クローンは配送を説明しているにすぎない。欠陥は別のところにある。
あなたが有効にした設定は、そのパスに届いていなかった
もう一本の脚がある。そしてそれは修正を生き延びた。
セットアップ手順は、ハードコードされた insecure_none のサンドボックスポリシー
の下で走る。それはこの値に対する Cursor 自身の名前だ。sandbox.json では
type が workspace_readwrite(既定)、workspace_readonly、または
insecure_none を受け付け、最後のものはサンドボックスを完全に無効化する。
worktree のセットアップパスは、その最後のものに固定されている。
--sandbox enabled を渡しても変わらない。現行ビルドについての Manifold の説明
はこうだ。更新は「信頼前の窓は閉じるが、サンドボックスの穴は閉じない」。
この二本を並べると、この製品一つより長生きするものが見えてくる。信頼ゲートは順 序の中の一段だったので、間違った位置に着地しうる。サンドボックスは設定だったの で、あるコードパスが自分をそこから免除できる。worktree は隔離という語を背負って いたので、利用者はそこに封じ込めを読み込んだ。この三つはいずれも Cursor 自身の コードが、自分で選んだタイミングで、制約されるはずだったプロセスの内側で決めて いる。それは2週間前にライブラリの安全フラグを打ち負かした のと同じ失敗であり、何一つサンドボックスから脱出していない7つのサンドボックス 脱出の背後にあるものでもある。
あなたのユーザーアカウントを共有する隔離
-w は作業ツリーを隔離する。エージェントに自分専用のチェックアウトを与え、コミ
ットしていないあなたの作業を踏み荒らさないようにする。これは実在する問題への実
在する解だ。誰もそれをマシンの隔離のために作ってはいない。worktree は
~/.cursor/worktrees/ の下、つまりあなたのユーザーの下に置かれ、あなたの環境、
あなたの ~/.ssh、あなたのシェルプロファイル、あなたのクラウド認証情報、そして
あなたのキーチェーンがシステムコール一つ隣にある。セットアップコマンドに何がで
きたかという Manifold のリストは、そのホームディレクトリの棚卸表のように読め
る。
つまり、あなたがまだ読んでいなかったリポジトリがコマンドを選び、あなたが安全の ために呼び出した機能が、それを実行した。JSON ファイルとシェル、そしてモデルは 最初から最後までベンチに座っていた。
エージェントのセキュリティに関する議論の大半は、モデルのほうへ流れていった。だ まされやすいのか、説得できるのか、読むべきでないものを読んだのか。それらの問い は重要だし、 私たちも多くの記事を割いている。 その一方で、2026年に開発者のノートパソコンでコードを実行させる最も確実な方法は、 ツールが起動時に読むファイルにそれを書いておき、誰かがクローンするのを待つこと のままである。
コマンドを置く場所のない worktree
Bromure Agentic Coding は同じプリミティブを提供する。プリミ
ティブそのものは良いものだからだ。リポジトリのタブで ⇧⌘G を押し、タスク名を入力
し、エージェントを選ぶ。すると Bromure は現在のコミットから wt/<slug> ブラン
チを切り、~/.bromure/worktrees/<repo>/<slug> の下にチェックアウトし、そこにタ
ブを開き、あなたのプロンプトでエージェントを走らせる。複数のタスク、複数のブラ
ンチ、複数のエージェント、一つのリポジトリ——
艦隊のパターンである。
Bromure のセットアップ手順の仕事は Cursor のそれと同じだ。きれいなチェックアウ
トにはエージェントが必要とする gitignore 済みのファイルが欠けているので、何かが
それを運んでこなければならない。違うのは、リポジトリがそれについて何を言えるか
だ。リポジトリは .worktreeinclude ファイルを同梱でき、その中のコメントでない
各行は、メインの worktree のルートからの相対パスである。Bromure はそれぞれ
を cp -a でコピーし、しかもコピー元が存在してコピー先が存在しないときだけコピ
ーする。このファイルにコマンドを収める欄はないので、正しく順序づけるべき
sh -c も存在せず、取り違えるべき順序の問題も存在しない。敵対的な
.worktreeinclude が要求できる最悪のことは、あるファイルをチェックアウトの中へ
コピーさせることだ。語彙はそれで全部である。
より大きな違いは、そのすべてがどこで起きるかにある。
コマンドを実行してみよう。何が見つかるか。
Manifold のリストを取り、プロファイルの中を歩かせてみる。攻撃者にはすべてを与え てよい——信頼前、サンドボックスなし、なんならゲスト内で root でも。
~/.ssh を読む。 読むものがない。プロファイルの秘密鍵はホストに留まる。VM
には /tmp/bromure-agent.sock を指す SSH_AUTH_SOCK が渡され、それは vsock を
通じてあなたの Mac 上で動くプロファイルごとのエージェントへ橋渡しされる。しかも
Bromure は macOS の launchd エージェントを意図的につながないままにしている。エ
ージェントのプロトコルには「公開鍵を列挙せよ」と「このチャレンジに署名せよ」と
いう要求はあるが、「秘密鍵を渡せ」を意味する要求はない。Require approval to
use を有効にすれば、署名のたびにホスト側でダイアログが出て、時間の区切られた
許可——5分、1時間、このセッションの残り——を与えることになる。
環境からクラウド認証情報を奪う。 そこにあるし、それらしく見えるし、そして偽
物である。プロファイルの Credentials パネルにあるものはすべてプレースホルダーと
して注入され、ホストのプロキシが通信路上で本物の値と差し替える。汎用 API キーに
は brm_…、使い捨てのクライアント証明書を持つ合成された ~/.kube/config、
~/.docker/config.json の中の偽の base64 ブロブ、~/.git-credentials、そして
ホスト側で署名し直され、プロキシを迂回しようとする者には
InvalidSignatureException を返す AWS の資格情報。窃取は成功し、
持ち帰る価値のあるものは何も返らない。
リバースシェルを開く。 ここで攻撃者は何かを線の上を通して運ばねばならず、そ の線はホストのものである。VM からの外向きリクエストはすべて、そのプロファイル用 に鋳造されたデコイと Aho-Corasick オートマトンで突き合わされる。ヘッダーもボデ ィも、認証情報らしく見える部分だけでなくリクエスト全体が対象だ。鋳造されたスコ ープの外にあるホストへ向かうデコイは、知っているはずすらないものをマシンが持ち 出している署名である。プロキシは宛先が1バイトも見ないうちに上流への呼び出しを中 断し、ゲストへ 451 を返し、VM を一時停止し、凍った画面を赤く染め、その認証情報 と、それが鋳造された宛先のホストと、代わりに向かった先のホストを名指しするアラ ートを上げる。選ぶのはあなただ。シャットダウンする、調査のために保存する——ディ スクイメージ、ホームディレクトリ、共有フォルダをまとめ、ワイプなしではそのプロ ファイルが二度と起動しないよう印を付ける——あるいは続行する。
永続化を書き込む。 このマシンの寿命はタスク一つ分だ。Erase home は
/home/ubuntu を初期化し、Reset to base はワークスペースのシステムディスクを再
クローンする。
その間も、あなたが望んだ作業は進む。エージェントはリポジトリを読み、テストを走 らせ、プルリクエストを開く。リポジトリのコマンドは実行された——走ることだけが許 された部屋の中で。
パッチが覆わない部分
Manifold の記事からもう一つ、そしてこれが最も賞味期限が長い。Cursor は worktree のパスについてアドバイザリを出さず、7月の変更履歴にも載せなかったので、修正は日 常のビルドの中に紛れて出荷された。影響を受けるバージョンを使っていた人には、更 新が信頼前実行のパスを閉じたのだと知る手立てがなかった。そして今日のあなたには、 自分のノートパソコンのどのツールがまだそれを開けたままなのかを知る手立てがな い。そのパスとはいつも、ツールが起動時に読む、まだ誰も監査していない何かのファ イルだからだ。
Cursor はこれを3日で閉じた。速い。Cursor は 2025年に mcp.json 版も閉じ、その
5か月後に同じプリミティブを持つ新機能が到着した。機能を起動シーケンスへ積み上げ
るとはこういうことだ。能力が一つ増えるたびに手順が一つ増え、その手順は木曜日に
正しく順序づけるべきものが一つ増えるということである。
ハイパーバイザーはそのシーケンスの一段ではない。.cursor/worktrees.json も
.worktreeinclude も、あなたのリポジトリの中の何一つ読まない。クローンより前か
らそこにあり、コードパスが insecure_none に固定できるポリシー欄を持たず、その
保証——このマシンは使い捨てだ、この認証情報は偽物だ、この線は見張られている——は
バイパスが公表された日にも、それが修正された日にも同じである。
まだ読んでいないリポジトリをこれからもクローンしてほしい。見知らぬコードを読む のが仕事であり、それをエージェントに任せることがエージェントを持つ意味だ。ただ 一つ、その査読をあなたの SSH 鍵と同じアカウントの中で起こさせるのはやめよう。 Bromure Agentic Coding をインストールし、タスクごとに専用の ブランチ、専用のチェックアウト、専用の使い捨てマシンを与えれば、次にどこかの起 動パスが JSON ファイルの言うとおりに何でも実行すると判明したとき——そしてそれは 必ず起きる——それはそのために建てられた部屋の中で走る。