CompanyScope
by Janus Compliance

AIR-2026-011 · AI Agent Incident Register

DuneSlide: two sandbox flaws let a prompt injection reach full code execution from Cursor's coding agent

Incident: 2026-04-02 · Parties: Anysphere, Inc. (vendor, developer of the Cursor AI coding editor); Cato Networks / Cato AI Labs (researchers who found and reported the flaws); users of Cursor's Agent in Auto-Run mode (potentially exposed; no confirmed victim)

Liability locus: Vendor-borne. the gravity sits upstream with the provider; the deployer is largely a bystander.

Legal analysis by Michael K. Onyekwere, CIPP/E · Janus Compliance · Published 2026-09-05 · Last reviewed 2026-09-05. Analysis of public facts. Not legal advice.

Share this AIR-2026-011 profile:Share on XBluesky

What happened

Cato Networks' AI Labs found two vulnerabilities in Cursor, the AI-powered coding editor built by Anysphere, and named the pair DuneSlide. Cursor's Agent can run terminal commands on a developer's behalf, and when it does, a sandbox is meant to confine any file it writes to the project directory. Both flaws defeated that sandbox.

The first, CVE-2026-50548, exploited the terminal tool's own working-directory setting. The tool accepts a working_directory parameter, and the sandbox added whatever path it was given to its list of writable locations without checking that the path actually stayed inside the project. An attacker did not need to compromise anything to supply that path. Per Cato's reported findings, a prompt injection carried in content the agent was already reading, a connected MCP server or the result of a web search, could steer the agent to set working_directory to a location outside the project and overwrite a file there, including the sandbox's own helper binary or a shell start-up file such as ~/.zshrc.

The second, CVE-2026-50549, exploited a fallback in the sandbox's own safety check. Before allowing a write through a symbolic link, Cursor tries to resolve the link to confirm the real destination is inside the project. When that resolution failed, rather than refusing the write, the sandbox fell back to trusting the original, unresolved link path. An attacker-controlled symlink pointing outside the project was written to as though it were safe.

Both CVEs carry a CVSS score of 9.8, and both required nothing from the user beyond the agent doing what it ordinarily does: reading content it was pointed at. Cato's own description of the trigger is that it fires "when a victim makes an innocuous prompt that inadvertently ingests a threat actor-controlled payload from an untrusted source, such as an MCP server or a web search result."

Cato reported the findings to Cursor, and reporting on the disclosure describes an initial setback: Cursor's first response reportedly declined the reports on the basis that its threat model did not treat misuse of MCP servers, even a standard one such as the official Linear workspace integration, as in scope. Cato escalated, and Cursor reopened the reports days later. Cursor fixed both flaws in version 3.0, released 2 April 2026. The CVE identifiers were assigned in early June 2026, and the research became widely known through tier-1 security press around the start of July. No evidence has surfaced that either flaw was used against a real target. This is a researcher-found and vendor-patched pair of vulnerabilities, not a confirmed breach.

This is not the first sandbox-boundary flaw found in Cursor this year. CVE-2026-22708, reported by Dan Lisichkin of Pillar Security Research and fixed in Cursor 2.3 (published 14 January 2026), showed that certain shell built-ins could bypass the terminal tool's command allowlist entirely, letting a prompt injection poison the shell environment so that a later, individually safe command ran a malicious payload instead. Different mechanism, same category of failure: a boundary that validated some of the ways an attacker-influenced value could reach a privileged operation, and missed others.

The duty engaged

Everything below is a duty analysis on researcher-disclosed, vendor-patched facts, as at 5 September 2026. There is no adjudicated finding, no regulator action, and, on the evidence available, no victim. The value of the entry is in what the flaws show about where the design duty falls, not in a harm that occurred.

A coding agent's sandbox has to validate every path by which an attacker-influenced value can reach a write. A tool that runs terminal commands with elevated trust on a developer's machine, and is explicitly built to ingest untrusted external content, a web search result, an MCP server response, as part of ordinary operation, takes on a duty to treat that content as adversarial the moment it can influence a file-system operation. Both CVEs are the same root failure expressed twice: the sandbox checked some inputs and not others. A working_directory parameter went unchecked in one. A canonicalisation failure defaulted to trust rather than refusal in the other.

The reported initial rejection is the sharper point, and it needs the right amount of caution attached to it. If accurately reported, Cursor's first response treated a standard, vendor-endorsed integration, the official Linear MCP server, as outside its own threat model for prompt injection. That is precisely the assumption indirect prompt injection is built to defeat: trusting a source's identity does not make its content safe once an agent parses that content into instructions. This detail comes from a single tier-1 outlet's account of Cato's disclosure; Cato's own post could not be reached to verify it directly, and it is recorded here with that caveat rather than as an established fact.

Fail-open design is the second, narrower lesson. CVE-2026-50549's fallback, treat the unresolved path as safe when resolution fails, is a fail-open choice in a security boundary. A sandbox whose default behaviour on an error condition is to permit rather than refuse converts an edge case into an exploit.

Data protection exposure is downstream and conditional, not direct. No unauthorised access to any real system is confirmed here, so no breach-notification duty is engaged on the facts as they stand. But any organisation running Cursor with Auto-Run enabled on a project that touches personal data was, for the life of these two flaws, one prompt injection away from an attacker with code execution on that machine. Article 32's security-of-processing obligation falls on that organisation as controller or processor for its own choice to run an unpatched, internet-facing tool in that mode. It does not touch the vendor directly, and it did not require any confirmed exploitation to be a live risk while the flaws were unpatched.

The liability chain

The allocation here runs to the vendor, on the same reasoning the register applied to EchoLeak: the deployer is a bystander to a flaw in the product's own security boundary.

Anysphere carries the gravity, as the designer of the sandbox that failed. The specific choices that let each flaw through, trusting a user-suppliable working-directory value without a boundary check, and falling back to trust rather than refusal when symlink resolution fails, were Anysphere's engineering decisions. The risk that a coding agent would be pointed at attacker-controlled content through the integrations it is built to support is not a remote or unforeseeable one. It is the entire premise of prompt injection as a named risk category, and it was foreseeable to the party that built the sandbox and chose which inputs to validate.

A developer using Cursor as intended did nothing wrong. Connecting a standard MCP server, having the agent read a web page, and running the agent in Auto-Run mode are all ordinary, vendor-supported uses. Nothing about typical use required a security-aware developer to do anything differently to be exposed. That is why the gravity does not travel downstream to the user.

If Cato's account of the initial rejection is accurate, it bears on how promptly and in good faith the vendor treated a good-faith report, not on where the underlying liability falls. The flaw existed from the point the sandbox shipped with these gaps. A slow or reluctant response to a correct report would extend the window of exposure, but it does not shift responsibility for the design choice itself.

What would have prevented it

Mapped controls

Sources


Cite this entry as AIR-2026-011 (https://companyscope.io/register/air-2026-011). Entry IDs are stable; corrections publish as dated addenda on this page.

Share this AIR-2026-011 profile:Share on XBluesky

Talk to Michael about your agent deployment — or your AI vendor governance more broadly

CompanyScope's public profiles cover the general picture. Michael runs Janus DPO-as-a-Service for businesses that need ongoing AI vendor governance, and writes one-off CIPP/E-reviewed Vendor Risk Notes for specific procurement decisions. Tell him what you're actually trying to clear.

A sentence or two is plenty.

Your context goes only to Michael. We don't share with the vendor or anyone else. Privacy notice.

Subscribe to the AI Agent Incident Register

Every new Register entry delivered with the legal analysis: the incident, the duty engaged, who is liable across the chain, and what governance would have prevented it. Written by Michael K. Onyekwere, CIPP/E. Free.

Subscribe — free

Delivered via Compliance Engineering on Substack, which handles your subscription and consent. Unsubscribe any time. Privacy notice.

This analysis is the work Janus Compliance does for clients before the incident. For a fixed-scope read of your own EU AI Act Article 50 exposure, see the Article 50 teardown; for ongoing agent governance, Janus DPO-as-a-Service. New entries are delivered free through Compliance Engineering on Substack. Browse the full register or the vendor compliance index.