TL;DR
開発者が AI コードエディタ Cursor に普段どおり質問しただけで、Web 検索結果や連携先(MCP サーバー)に紛れ込んだ見えない指示が一緒に読み込まれ、エージェントがそれに従って動く——その延長で、コマンド実行を囲うはずのサンドボックスが外され、開発者のマシンで任意コードが動く欠陥が公開された。Cato AI Labs が「DuneSlide」と名付けた 2 件(CVE-2026-50548 / CVE-2026-50549、いずれも CVSS 3.1 で 9.8)は、どちらも「本来書けないはずのファイルを 1 つ書かせ、その書き込みでサンドボックス自体を無効化する」という同じ手筋を、別々の抜け道から成立させる。クリックも承認ダイアログも要らない「ゼロクリック」で、一度サンドボックスが外れれば次のコマンドは開発者本人として走り、マシンとサインイン中のクラウド/SaaS にまで手が届く。修正は Cursor 3.0(2026-04-02 リリース)で提供済みで、実環境での悪用報告はなく研究としての開示である。欠けていたのは、エージェントが読んだ指示の出どころと、書き込み先が認可された範囲かを、実行の前に独立検証する層だった。検出と事前証明は代替でなく補完である。
事案概要
- 対象: Cursor(AI コードエディタ)。エージェントがユーザーの依頼を受けて端末コマンドの実行やファイル操作を行う。開発元によれば Fortune 500 の過半が利用する。
- 識別子 / コードネーム: CVE-2026-50548・CVE-2026-50549、Cato AI Labs による命名「DuneSlide」。
- 深刻度: いずれも NVD の CVSS 3.1 で 9.8(Critical)。
- 前提となる仕組み: Cursor は 2.x 系から、エージェントが発行する端末コマンドを既定でサンドボックス(実行を囲い、触れる範囲を制限する仕組み)内で走らせる。DuneSlide はこのサンドボックスから抜け出す欠陥である。
- 侵入の入口=プロンプトインジェクション: 攻撃者は Cursor に直接入力しない。エージェントがユーザーに代わって読むもの——MCP で連携したサービスや、Web 検索が返したページ——に指示を潜ませる。ユーザーが普通に質問すると、隠れた指示が一緒に読み込まれる。クリックも承認も要らないため「ゼロクリック」となる。
- 共通の手筋: 2 件とも「本来書き込めないはずのファイルを 1 つ書かせ、その書き込みを使ってサンドボックスを無効化する」構造。標的はサンドボックス補助ファイル本体(macOS では
/Applications/Cursor.app/Contents/Resources/app/resources/helpers/cursorsandbox)や、~/.zshrcのような起動時ファイル。- CVE-2026-50548(設定の悪用): サンドボックスはコマンドの作業フォルダへの書き込みを許す。その作業フォルダは
run_terminal_cmdツールの任意パラメータworking_directoryで指定でき、エージェントが既定以外のパスを設定すると、Cursor はそのパスを無検証で書き込み許可リストに加える。注入指示がこれをプロジェクトではなくシステムファイルに向ける。 - CVE-2026-50549(安全チェックの悪用): 書き込み前に Cursor はシンボリックリンク(symlink)を解決し、実際の書き込み先がプロジェクト内かを確認する。欠陥はそのフォールバックにある。標的が存在しない、または経路上のフォルダから読み取り権限を攻撃者が外すとチェックが失敗し、Cursor は諦めてリンクが指す「プロジェクト内」のパスを信用してしまう。攻撃者はプロジェクト外を指すリンクを作り、チェックを失敗させて同じサンドボックス補助ファイルへ書き込む。
- CVE-2026-50548(設定の悪用): サンドボックスはコマンドの作業フォルダへの書き込みを許す。その作業フォルダは
- 影響: サンドボックスが無効化されると次のコマンドは開発者本人として実行される。マシンの掌握に加え、エディタがサインイン中のクラウドや SaaS のワークスペースにも手が届く。すべては「無害に見える一つの指示」から始まる。
- 悪用状況: 実環境での悪用報告はなく、Cato は能動的キャンペーンではなく研究として提示している。公開脆弱性記録も「悪用の確認なし」。
タイムライン
- 2026-02-19: Cato AI Labs が両件を報告。
- 2026-02-23 頃: Cato によれば、Cursor は「脅威モデルが MCP サーバーの悪用(公式の Linear ワークスペースのような標準的なものを含む)を対象にしていない」として、当初は受理しなかった。
- 2026-02-26: Cato が再エスカレーション。Cursor は報告を再開・トリアージ。
- 2026-04-02: 修正を含む Cursor 3.0 がリリース(3.0 未満の全バージョンが影響)。
- 2026-06-05: CVE 識別子が採番。
- 2026-07-01: Cato AI Labs が「DuneSlide」として公開。Cursor は symlink 側の欠陥について自社アドバイザリ(GHSA-3v8f-48vw-3mjx)を公開、NVD 記録も公開。
注: 技術的事実は Cato AI Labs の開示、Cursor の GitHub Security Advisory、NVD の登録に基づく。修正は開示に先行して 3.0 で提供済みであり、実環境での悪用は確認されていない。最新の一次情報を参照されたい。
攻撃の経路:一つの指示がサンドボックスを外すまで
本事象は、エージェントが「読んだ指示の出どころ」と「書き込み先の認可」を行動の前に独立検証しない構造に起因する。ゼロクリックで RCE に至る経路は以下の通り。
- 指示の仕込み: 攻撃者が、エージェントがユーザーに代わって読むコンテンツ——MCP 連携先のデータや Web 検索が返すページ——に、見えない指示を潜ませる。
- 通常の依頼に相乗り: 開発者が Cursor に普段どおり質問する。隠れた指示が一緒に読み込まれ、エージェントはそれを自分への指示として扱う。ここまでにクリックも承認も発生しない。
- 本来書けないファイルを 1 つ書かせる: 注入指示がエージェントに、
working_directoryを既定外のシステムパスに設定させる(50548)か、プロジェクト外を指す symlink 経由でチェックを失敗させる(50549)。いずれも Cursor は書き込みを許可する。 - サンドボックスの無効化: 書き込み先はサンドボックス補助ファイル本体や
~/.zshrcなどの起動時ファイル。これを上書きした時点で、以後のコマンドはサンドボックスの外で走る。 - 本人としての実行: 無効化後の次のコマンドは開発者本人の権限で実行される。マシンの掌握、さらにエディタがサインイン中のクラウド/SaaS への到達に拡大し得る。
構造的論点
本事案は Pillar 03(エージェント権限証明)の agent-infrastructure カテゴリに属する。中心的な失敗 primitive は、エージェントが、外部から読み込んだ指示の出どころと、その指示に従って行う書き込みの認可範囲を、行動の前に独立検証しない点にある。プロンプトインジェクションが成立するのは、エージェントが「今読んでいる文字列は、正規の依頼者に由来する認可された指示か」を確かめないからだ。そしてサンドボックス脱出が成立するのは、書き込み許可の根拠が「エージェントが working_directory に何を指定したか」「symlink 解決に成功したか」という、攻撃者が誘導できる表層シグナルに置かれ、「この書き込みは、この対象に対して認可されているか」が独立検証されないからである。二つの検証欠落(指示の来歴・書き込みの認可)が重なって、一つの指示が RCE になる。secondary に、注入された指示をエージェントが検証せず行動に移す点で ai-decision-integrity、実行主体・書き込み対象の認可という点で identity-auth を併記する。
本事案は Brief 037(AI コーディングエージェントが同梱設定を無検証で自動実行)と同じ系列の続編である。037 が「リポジトリに置かれた設定を、開いた/信頼したことを認可と見なして実行する」構造だったのに対し、DuneSlide は「エージェントが読み取った外部コンテンツ内の指示を認可と見なし、その延長で書き込み先の認可も飛ばす」構造で、入口が設定ファイルから読み取りコンテンツへ広がっている。Brief 039(Semantic Kernel、プロンプトインジェクションがホストの RCE に変わった)、Brief 048(AI 指示ファイルに見えない命令が仕込まれた)とは、AI が読む入力の来歴が検証されないまま実行に接続する点で一致する。Brief 027(LibreChat、ユーザー指定の MCP URL からサーバーの秘密が漏れた)、Brief 058(AI エージェントが自分のチェックポイントを検証せず読み込みサーバーを乗っ取られた)とは、エージェント基盤において「入力の検証欠落=実行」になる点で連なる。共通する primitive は同じである。すなわち、ある指示・書き込みの実行が、それを認可・検証する層と切り離されている。
Cato は、他のコーディングエージェントでも同種の欠陥を開示中であり、問題は単発の積み重ねではなく構造的だと述べている。実際、Cursor 自身、CurXecute(CVE-2025-54135、2025-08)・MCPoison(CVE-2025-54136)・CVE-2026-26268(2026-02)と、毒された入力から始まりコード実行に終わる欠陥が、いずれも別々のガードレールを一つずつ破って続いてきた。2.x 系のサンドボックスはその前の波への回答であり、DuneSlide はその回答を外す欠陥にあたる。ガードレールを一枚ずつ足す対症ではなく、指示と書き込みの認可を行動の前に独立検証する層が要る、というのが構造的な含意である。
検出と証明の落差
本事案では、研究側の開示(Cato AI Labs)、CVE 採番と CVSS による深刻度評価、ベンダーの修正(Cursor 3.0)と自社アドバイザリ・NVD 登録という検出の系列が機能し、手口と影響範囲が外部から可視化された。これは検出の典型的成功であり、本 Brief が検出層の役割を否定するものではない。検出は、手口の公表、影響バージョンの特定、パッチ適用の判断に不可欠である。
一方で、検出は「エージェントが今読み込んだ指示が、正規の依頼者に由来する認可された指示か」「これから行う書き込みが、この対象に対して認可されているか」を、エージェントがその指示に従い、その書き込みを行う時点で独立に立証する材料にはならない。プロンプトインジェクションは、悪性コードの署名でも既知の攻撃パターンでもなく、正規のコンテンツに紛れた自然文の指示であり、実行前にそれを「悪意ある指示」と形式的に判定する術は検出側にない。サンドボックスの書き込み許可も、working_directory の値や symlink 解決の成否という表層で切り替わり、対象への認可そのものを見ていない。異常検知が実行の後に発火しても、サンドボックスが外れた後の本人権限コマンドは止まらない。これは検出層の射程外にある、構造的に独立した層の落差である。
事前証明(pre-execution attestation)は、エージェントが読み取った指示に従って行動する経路と、書き込みを許可する経路に、権限・来歴の証明を 1 段挟むことでこの落差を埋める。指示については「この指示は認可された依頼者の意図に由来するか」、書き込みについては「この対象への書き込みは認可された範囲か」を、working_directory の値や symlink の解決結果とは切り離して検証し、証明が伴わなければ実行を事前に block する。事前証明は検出に対する代替ではなく 補完 であり、両層の組み合わせでエージェントの trust boundary が確立される。
事後の検知が証明にならない論点は 「AI 時代のサイバー防衛に残された、最後の層」(Lemma、2026-05)、行動前に独立検証する設計は 「Proof-as-Auth: 鍵を一度も送らずにサインインする」(Lemma、2026-05)を参照。
対応経緯と業界動向
- ベンダー(Cursor): 当初は「脅威モデルが MCP サーバーの悪用を対象にしていない」として受理しなかったが、再エスカレーション後にトリアージし、両件を 3.0(2026-04-02)で修正。symlink 側について自社アドバイザリ(GHSA-3v8f-48vw-3mjx)を公開した。
- 研究(Cato AI Labs): 他のコーディングエージェントでも同種の欠陥を開示中とし、問題は構造的だと主張。「Web を読むエージェントを出す以上、あらゆる入力を敵性と扱うのを既定にするか、パッチの後追いを続けるか」を業界への問いとして提示している。
- 業界横断の論点: MCP 連携先や Web 検索結果といった「エージェントが自分では出どころを選べない入力」を、実行に接続する前にどう扱うか。承認プロンプトやサンドボックスといった単発のガードレールが、注入指示による書き込み一つで外れうることが改めて示された。
エージェントが読む指示の来歴と、その指示が誘導する書き込みの認可を、実行の時点で独立検証する層の不在は、特定ツールの問題ではなく、外部コンテンツを読む AI エージェントを採用する組織横断の運用課題として残っている。
Lemma による分析
本事象で露呈した落差(エージェントが読んだ指示の来歴と、書き込み先の認可を、独立検証から切り離したまま実行する)に対して、Lemma は、エージェントが操作を実行する前に、その操作が認可され正規の来歴を持つことを独立検証可能な暗号証明として要求する設計を提示している。
- 行動前の認可証明(proof-as-auth): エージェントが端末コマンドの実行やファイル書き込みを行う前に、「この操作は、この主体に、このスコープで認可されている」ことを署名付きで証明する。
working_directoryの値や symlink の解決結果を、書き込み許可の終点にしない。 - 書き込み対象の認可スコープ検証: 書き込みを許可する根拠を、攻撃者が誘導できるパス指定・リンク解決の表層ではなく、対象ごとの認可スコープの証明に置く。サンドボックス補助ファイルや起動時ファイルのような「プロジェクト外・特権的な対象」への書き込みは、証明なしには成立させない。
- 指示の来歴バインド: エージェントが行動の根拠とする指示を、その出どころ(正規の依頼者・信頼された入力)に紐付け、外部コンテンツに紛れた注入指示を認可経路から区別する。
- 選択的開示: 「この操作が認可スキーマを満たす」ことだけを最小開示し、内部の鍵・資格情報は環境外に出さない。
これにより、実行の時点で固定された証明が、「この指示は正規に認可され、この書き込みは認可された範囲か」を、エージェントが行動する前に独立検証可能なトレイルとして機能させる。検出(事後の開示・パッチ・ベンダーリサーチ)は発覚後の是正に、事前証明(実行前の認可・来歴検証)はエージェント操作の独立検証に、それぞれ相補的に働く。
設計と適用範囲は、Pillar 03 — エージェント権限証明 および Trust402 を参照のこと。
Sources
- Cato Networks(研究・一次): “DuneSlide: Two Critical RCE Vulnerabilities in Cursor” — https://www.catonetworks.com/blog/duneslide-two-critical-rce-vulnerabilities/
- The Hacker News: “Critical Cursor Flaws Could Let Prompt Injection Escape Sandbox and Run Commands”(2026-07-01)— https://thehackernews.com/2026/07/critical-cursor-flaws-could-let-prompt.html
- CSO Online: “Sandbox bypass flaws in Cursor IDE highlight prompt injection as an RCE vector” — https://www.csoonline.com/article/4191923/sandbox-bypass-flaws-in-cursor-ide-highlight-prompt-injection-as-an-rce-vector.html
- Cursor(ベンダーアドバイザリ): GHSA-3v8f-48vw-3mjx(CVE-2026-50549、symlink 検証のフォールバック)— https://github.com/cursor/cursor/security/advisories/GHSA-3v8f-48vw-3mjx
- NVD: CVE-2026-50549 — https://nvd.nist.gov/vuln/detail/CVE-2026-50549
Brief 配布について
本資料は公開情報の構造化分析であり、特定組織への監査・診断・推奨ではありません。
(c) 2026 FRAME00, INC. — Built for decisions that matter.