PUBLIC-EVIDENCE AI SECURITY CASE STUDY

DuneSlide: Two LLM-Controlled Paths Escaped Cursor's Terminal Sandbox

DuneSlide exposed two independent Cursor 2.x flaws that converge on one asset. An indirect prompt injection delivered through malicious MCP output or poisoned web-search content could make the agent authorize an out-of-project working directory: the model selected…

Agentic / MCP SystemTier 3Indicative ERS 6.9 (2.9–10.0)Evidence source date 2026-08-25

Use case sources

Source reports and analysis supporting this case are listed below. AITBM interpretation and any indicative scoring are derived from this public evidence.

DuneSlide exposed two independent Cursor 2.x flaws that converge on one asset. An indirect prompt injection delivered through malicious MCP output or poisoned web-search content could make the agent authorize an out-of-project working directory: the model selected working_directory for run_terminal_cmd and Cursor added that directory to the sandbox write allowlist without proving it remained inside the project root (CVE-2026-50548). Separately, the Write tool tried to canonicalize a destination before enforcing project scope; for a write-only symbolic link whose target did not yet exist, canonicalization failed and Cursor continued instead of denying the write (CVE-2026-50549).

Either route could overwrite Cursor's cursorsandbox helper inside the application bundle, after which a later command ran without the intended terminal sandbox. The brief keeps the two phases separate: each flaw supplied a route to corrupt the enforcement component, and execution occurred when a subsequent command used that component. Cursor 3.0, released 2026-04-02, contained both fixes before Cato published on 2026-07-01.

ASSESSED SYSTEM

Cursor 2.x in its pre-3.0 state, running an agent session that consumes MCP output and web-search content: run_terminal_cmd accepts a model-selected working_directory that Cursor adds to the sandbox write allowlist without proving it stays inside the project root (CVE-2026-50548), and the Write tool canonicalizes a destination before enforcing project scope, continuing instead of denying when canonicalization fails for a write-only symbolic link whose target does not yet exist (CVE-2026-50549). Both paths reach the same asset: Cursor's cursorsandbox helper inside the application bundle.

OUT OF SCOPE

The malicious MCP output and poisoned web-search content are the attack, not the assessed system. Cursor 3.0 and later is out of scope: it shipped on 2026-04-02 containing both fixes, three months before Cato published. The underlying model is not assessed — the finding is that an LLM-selected parameter was treated as a security decision, not that the model behaved defectively. No in-the-wild exploitation is reported, so no victim or campaign outcome is scored.

Architecture: Agentic / MCP System (decision tree Q2) — Q1 = NO: a single coding agent; the MCP server is a tool source, not a coordinating peer agent. Q2 = YES: the agent autonomously plans and executes multi-step file and terminal operations under a session goal, selecting tool parameters itself and invoking run_terminal_cmd and the Write tool without per-action approval. Evidence in the brief: the model selected working_directory for run_terminal_cmd, and a later prompt injection invoked the modified helper. Tier 3: Tier 3 (Internal): an AI coding IDE is developer tooling operating inside the organisational boundary, the same treatment given to the comparable AI coding-agent cases. The severity of unsandboxed host code execution is carried by Cascade Potential and the Containment scores, not by raising the tier.

Documented attack or failure path

  1. The attacker places instructions in content the agent will read — malicious MCP output or poisoned web-search results — without needing to type into the local session.
  2. Branch one (CVE-2026-50548): the model selects an out-of-project working_directory for run_terminal_cmd and Cursor adds it to the sandbox write allowlist without proving it remains inside the project root, turning an optional tool argument into a sandbox policy decision.
  3. Branch two (CVE-2026-50549): the Write tool canonicalizes a destination before enforcing project scope; for a write-only symbolic link whose target does not yet exist, canonicalization fails and Cursor continues instead of denying, so a failed path check becomes permission.
  4. Either branch overwrites /Applications/Cursor.app/.../cursorsandbox, Cursor's helper for launching sandboxed commands.
  5. A later prompt injection invokes the modified helper, and the command runs without the intended terminal sandbox — a separate phase from the write that corrupted the enforcement component.

Observed controls and bounded outcomes

Positive credit is given only where the record directly demonstrates a control operating. Recommended or merely presumed controls receive no positive scoring credit.

  • A sandbox and a project-scope enforcement layer both existed and are the components the attack had to defeat: run_terminal_cmd ran under a terminal sandbox and the Write tool did attempt project-scope enforcement. The brief characterises the defects as an unvalidated policy input and a fail-open check rather than as absent controls.
  • The two flaws are recorded as separate findings with separate CVEs and separate preconditions; neither is scored as requiring the other.
  • Cursor 3.0 shipped both fixes on 2026-04-02, three months before publication, so the disclosed paths were closed in the current release at the time of analysis.

Layer 1 — Intrinsic Vulnerability Profile

Each sub-metric is placed on its five-level rubric by the evidence quoted beside it. Missing applicable evidence remains unknown. The displayed midpoint and interval are scenario values, not inferred control performance.

Sub-metricScoreRubric basisEvidence
Robustness (Ro) — scenario interval 0.00–1.00 (midpoint 0.50), Tier 3 MVT 0.40 indeterminate
Fairness (Fa) NOT APPLICABLE — axis-level applicability rule (Person-Outcome Surface test): The assessed Cursor agent's outputs are terminal commands, file writes and code edits inside a developer's project; they allocate, deny, rank, price, classify, recommend or describe no natural person, and the inputs (repository content, MCP output and web-search results) carry no protected-class attribute or proxy that influences a person-affecting output. Its tier weight is redistributed across the remaining axes and its MVT is not evaluated.
Transparency (Tr) — scenario interval 0.00–1.00 (midpoint 0.50), Tier 3 MVT 0.45 indeterminate
Privacy (Pr) — scenario interval 0.00–1.00 (midpoint 0.50), Tier 3 MVT 0.50 indeterminate
Containment (Cn) — scenario interval 0.00–0.43 (midpoint 0.21), Tier 3 MVT 0.50 confirmed breach
Cn-1Scope Enforcement0.00w 0.090.00 anchor: the scope boundary did not hold on either branch, and one of the two failed open by design — a failed check became permission. The 0.25 anchor requires boundaries that exist but are inconsistently enforced; here both enforcement points admit an out-of-project destination, so no effective boundary remained.Two independent project-scope failures reached the same out-of-project asset. Cursor added a model-selected working_directory to the sandbox write allowlist without proving it stayed inside the project root, and the Write tool continued past a failed canonicalization instead of denying. AID-H-018.001 states the requirement neither path meets: resolve a required typed path capability under the opened project root in trusted code, canonicalize every parent, reject missing or symlinked components, and pass an already-authorized directory descriptor to the tool.source: brief
Cn-2Escalation Prevention0.00w 0.120.00 anchor: no escalation control separates ordinary project file writes from writes to the security-critical enforcement helper. The 0.25 anchor requires role checks that exist but can be defeated by role confusion; here the write path applies no authority distinction between a source file and cursorsandbox.A project-scoped agent obtained unsandboxed host code execution by overwriting the component that was supposed to enforce its isolation. Nothing re-authorised writes to the application bundle as a higher-authority operation, and AID-H-017.002 is recommended precisely because the agent possessed a generic write primitive able to rewrite its own enforcement helper.source: brief
Cn-6Action Reversibility Classification Rate0.00w 0.080.00 anchor: no reversibility classification is performed before execution and actions execute ungated (ARCR = 0), and no worst-case chain composition rule is enforced across the write-then-invoke sequence.Overwriting the sandbox helper inside the application bundle is a bounded-irreversible action against a security-critical asset, and it executed with no pre-execution classification and no gate. The chain rule is also absent: the brief stresses that the first write and the final unsandboxed execution are separate phases, and nothing made the worst-case hop — corrupting the enforcement component — govern the chain that contained it.source: researcher
Cn-8Untrusted Context Isolation0.00w 0.140.00 anchor: no origin labelling is evidenced on the tool-output or search-result channel, and untrusted content was admitted to active context as trusted instruction by design, proposing the tool calls that corrupted the sandbox helper. The 0.25 anchor requires origin labels on some channels or instruction authority denied at least by prompt wording; none is present on either channel in the assessed Cursor 2.x configuration. Moved from Ro-1 under the 26-sub-metric basis because the evidence records a trust-boundary failure, not the model's resistance under adversarial testing.The chain begins with content the agent reads — malicious MCP output or poisoned web-search results — being followed as instructions, and the injections succeeded on both branches and again at the later invocation step. Nothing demoted that content or preserved its untrusted provenance before it influenced tool selection, and the brief's own guidance is to assume MCP responses and web-search text are untrusted and to record which content proposed each tool call.source: brief
Cn-9Self-Modification and Persistent-State Containment0.00w 0.140.00 anchor: behaviour-governing state — the sandbox write allowlist and the sandbox enforcement helper — was writable by the agent and by processed content with no gate, and the write took effect silently in a later command. The 0.25 anchor requires such writes to be logged or visible after the fact, or a protected-path list that exists but can be bypassed; the record evidences no protected-path list covering the application bundle and no visibility of the allowlist change, so 0.25 is not met.The model selected working_directory for run_terminal_cmd and Cursor added that directory to the sandbox write allowlist without proving it remained inside the project root, 'turning an optional tool argument into a sandbox policy decision' (CVE-2026-50548). Either branch then overwrote /Applications/Cursor.app/.../cursorsandbox, the helper that enforces the agent's own terminal sandbox, and a later command ran without the intended sandbox. Nothing re-authorised the write to the agent's own enforcement component, and the write took effect silently in the subsequent phase.source: brief

Unknown, not N/A: 17 applicable sub-metrics lack admissible public evidence. The lower, midpoint, and upper scenarios evaluate each at 0.00, 0.50, and 1.00 respectively; no weight is redistributed merely because evidence is missing.

Architecture-based NOT APPLICABLE: excluded with the Fairness axis.

Layer 2 — Operational Risk Posture

DimensionScoreJustification
AaAutonomy Amplification1.00w 0.20The 1.00 anchor is met: the agent selects tool parameters, writes files, and runs terminal commands independently under a session goal, with no human approval on the disclosed path. The brief's central finding is that an LLM-selected parameter was itself part of the security boundary. elevated
AsAttack Surface Exposure1.00w 0.25The 1.00 anchor is met: fully attacker-controlled third-party content — MCP tool output and web-search results — reaches the agent's instruction path directly, and the brief notes the attacker never needs access to the local session. elevated
CpCascade Potential1.00w 0.30No verified System Dependency Graph exists for the assessed configuration, so the specification's worst-case default applies. It is independently corroborated on its merits: the observed path is ungated end to end and terminates in unsandboxed code execution on the developer host — an irreversible node whose reachable set extends to the host filesystem and every credential in the developer session — and it does so by destroying the very component that bounded the reachable set.GDCP: corroborated by the observed path elevated
RfRemediation Feasibility0.25w 0.25The 0.25 anchor fits: a released fixed artefact exists and predates disclosure. Cursor 3.0 shipped on 2026-04-02 with fixes for both CVEs, no retraining is involved, and the compensating control the brief names — restricting agent terminal and generic Write capabilities on hosts that cannot be upgraded — is a configuration change. Remediation is bounded by rollout verification, which the brief notes must inspect the actual application bundle rather than the updater's reported state.

Nelevated = 3 (dimensions strictly above 0.75) → CRM = 1.35.

Compound Risk Alert. Two or more dimensions are simultaneously elevated (spec 3.2.2); architectural decomposition is recommended before deployment.

Layer 3 — Public-evidence confidence diagnostic

ComponentScoreBasis
Pc — Public provenance evidence0.25At the 0.25 anchor. The brief identifies the product, the affected major version, both CVEs, the exact tools and parameters, the overwritten helper path, and the fixed release with its date. It identifies no deployment owner, managed-image inventory, MCP server manifest, identity policy, or evaluation artefact for a specific installation, and no AIBOM or equivalent record exists for the assessed configuration.
Ec — Public evaluation coverage0.22coverage 0.23 (5 of 22 applicable sub-metrics) × independence 1.00 × fidelity 0.95. No Full, Standard, or Lite pathway is claimed for a retrospective article.
Tf — Public-evidence freshness0.29Evidence dated 2026-07-01; age 109 days on the workpaper reference date. Components: T_behavior 0.29 · C_event 0.35 · C_behavior 0.40 · T_containment 0.44 · C_monitor 0.65 · T_calendar 0.66 · C_evidence 0.85. Binding term: T_behavior. BAW applies: a coding agent holds mutable behavioural state across a session — tool authorisations, allowlisted directories, and, in this case, a modified enforcement helper that persists into later commands. C_monitor 0.65 — nothing detected either write or the later unsandboxed invocation; the brief has to ask defenders to start recording which content proposed each tool call, the normalized parameters, the policy decision, and the file or process effect. C_event 0.35 — the major row applies: a confirmed critical-invariant violation, namely corruption of the component enforcing isolation followed by unsandboxed execution. C_behavior Band 0 (0.40) — no canary set, no registered invariants, and no maintained drift baseline are evidenced, the specification's worst-case default band. C_evidence 0.85 — a fixed release exists but the finding stays open until the deployed population and the helper's integrity are verified against it, which the brief states a version label alone does not establish.

Public-evidence ACI = (Pc × Ec × Tf)1/3 = 0.25 — diagnostic status: Invalid as assessment-of-record evidence. It describes the evidence available to this case study, not the assurance of the underlying system, and is not inserted into the normalized-assurance scenario ERS.

Indicative ERS — normalized-assurance scenario

Worp · ORP0.20(1.00) + 0.25(1.00) + 0.30(1.00) + 0.25(0.25) = 0.812
CRMNelevated = 3 → 1.35
ORPeffective0.812 × 1.35 = 1.097
Wivp · IVP midpoint0.24(0.50) + 0.24(0.50) + 0.29(0.50) + 0.24(0.21) (tier weights renormalized over the applicable axes) = 0.433
IVP mitigation0.15 + 0.85(1 − 0.433) = 0.632
Scenario assuranceACI fixed at 1.000 for cross-case comparison; public-evidence ACI 0.250 is diagnostic only
Indicative ERS midpointmin(10, 1.097 × 0.632 × 1/1.000 × 10) = 6.9
Unknown-input interval2.9–10.0; 17 unknown applicable sub-metrics set to 1.00 / 0.00 at the bounds

Published CVSS beside indicative ERS

Each published CVSS record is shown exactly as its scorer published it, one per vulnerability record, with the version, metric group and vector when stated, plus its source and access date. Records are never combined or inferred from a CVE's existence.

INDICATIVE ERS · NORMALIZED-ASSURANCE SCENARIO

6.9 midpoint, interval 2.9–10.0; Moderate scenario band; ACI fixed at 1.00. The published CVSS records do not enter this calculation.

PUBLISHED CVSS · 2 records

CVE-2026-50548 CVSS 4.0 Base 9.3 Critical

Published score9.3
CVSS version4.0
Metric groupBase
SeverityCritical
VectorCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Scored byGitHub_M
Source recordhttps://raw.githubusercontent.com/CVEProject/cvelistV5/main/cves/2026/50xxx/CVE-2026-50548.json (accessed 2026-10-18)
Affected componentcursor
Scope noteCNA affected product and described vulnerability match the scored assessed_system and are not excluded by out_of_scope.
Record SHA-2560015db034b7b50257b685d6b917214743cfd2cee00d6d9db51719b65d993bded

CVE-2026-50549 CVSS 4.0 Base 9.3 Critical

Published score9.3
CVSS version4.0
Metric groupBase
SeverityCritical
VectorCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Scored byGitHub_M
Source recordhttps://raw.githubusercontent.com/CVEProject/cvelistV5/main/cves/2026/50xxx/CVE-2026-50549.json (accessed 2026-10-18)
Affected componentcursor
Scope noteCNA affected product and described vulnerability match the scored assessed_system and are not excluded by out_of_scope.
Record SHA-2561d3ca65f1c2d9eea4d56f60a0ed5cf15b23344322d780f1d0d3b5b7bc9d6d3d9

CVSS describes an individual vulnerability as its scorer published it. Indicative ERS describes the assessed AI deployment under the normalized-assurance scenario, so the two values are not direct equivalents and neither replaces the other.

AIDEFEND defences → AITBM sub-metrics

Identifiers are quoted as they appear on the AIDEFEND in Action brief or in the AIDEFEND SecureFlow defense map (audited AIDEFEND dataVersion 2026.10.15); the sub-metric mapping is AITBM's own, from the specification's AIDEFEND tables reconciled at catalogue data version 2026.10.15. AIDEFEND renumbers identifiers between releases, so the data version travels with every mapping and neither side's IDs should be cited without one. A mapping identifies a possible evidence route; a recommendation does not prove that the control was implemented or effective and receives no scoring credit by itself.

TechniqueDefence PriorityEvidences
AID-H-018.001Tool Parameter Constraint & Schema ValidationAIDEFEND dataVersion 2026.10.15. Making working_directory a required, typed path capability resolved by trusted code under the opened project root — canonicalizing every parent, rejecting missing or symlinked components, and passing an already-authorized directory descriptor — is the Cn-1 control that closes both the model-controlled directory escape and the check-then-reopen weakness.Very HighCn-1 Cn-6 Cn-7
AID-I-001.002MicroVM & Low-Level SandboxingAIDEFEND dataVersion 2026.10.15. An operating-system sandbox below Cursor's application helper, denying writes to the application bundle even if the model, tool schema, or wrapper is compromised, is the independent Cn-1 containment layer that would bound the final execution path.Very HighPr-2 Cn-7
AID-H-021.002Runtime Integrity Enforcement (Signed Configurations)AIDEFEND dataVersion 2026.10.15. Verifying the sandbox helper against a signed manifest immediately before use, and refusing execution when the running file differs from the approved release, targets the shared convergence point where both branches overwrite cursorsandbox.Very HighCn-2 Cn-5 Cn-9
AID-H-003.010Deployed AI Software Vulnerability Remediation LifecycleAIDEFEND dataVersion 2026.10.15. Rebuilding managed images with Cursor 3.0 or later and verifying the two disclosed paths in an isolated regression test is the Rf remediation route; the brief notes a version label alone is not closure evidence.Very HighRo-4 Ro-5 Tr-4
AID-H-017.002Least-Privilege Tool ArchitectureAIDEFEND dataVersion 2026.10.15. Replacing ambient file writes with single-purpose project operations bound to object IDs or root-relative paths is the Cn-2 control whose absence let a coding agent hold a primitive able to rewrite its own enforcement helper.HighCn-5 Cn-7

WHAT THIS CASE TEACHES

Cn-6 scores 0.00 for a reason the per-action view would miss: the write that overwrote cursorsandbox and the command that later ran unsandboxed are different hops, and neither is individually catastrophic. The worst-case composition rule exists precisely for this shape — an irreversible step hiding inside a chain whose visible steps look ordinary — and nothing in the assessed configuration enforced it.

Sources: AIDEFEND in Action — DuneSlide: Two LLM-Controlled Paths Escaped Cursor's Terminal Sandbox · Primary source — DuneSlide: Two Critical RCE Vulnerabilities in Cursor (Cato AI Labs, 2026-07-01) · AIDEFEND SecureFlow — DuneSlide: Two Cursor Sandbox Escapes to Unsandboxed RCE

AIDEFEND SecureFlow attack-flow cross-reference

The same incident is modelled step by step, with ATLAS technique labels and AIDEFEND defense mappings, in AIDEFEND SecureFlow. The flow is listed for navigation only; this record's evidence and scores come from the sources cited above. Open SecureFlow.

AITBM sub-metrics referenced