Claude Cowork Sandbox Escape: How SharedRoot Let an AI Agent Access Files Outside Its VM
Researchers connected one folder to a fresh Claude Cowork session, sent a single short message, and watched their AI agent walk straight out of its “sandboxed” Linux virtual machine — into the host Mac’s SSH keys, cloud credentials, and everything else the logged-in user could touch. Anthropic reviewed the report and closed it as “Informative.” Here’s exactly how it worked, and why that response is more defensible than it sounds.
How this was reported: This article is based on the original technical disclosure published by Accomplish AI security researcher Oren Yomtov on July 23, 2026, reproduced with his exact technical explanation and design recommendations. It is supplemented by reporting from The Hacker News, CyberSecurityNews, GBHackers, and AI Weekly.
A note on the source: Accomplish AI builds a competing product that runs AI coding agents on company endpoints, and their blog post ends with a pitch for their own architecture. That commercial context doesn’t change the accuracy of the technical chain they documented — which is corroborated by multiple independent outlets — but it’s worth knowing going in.
What the Researchers Actually Did
Oren Yomtov, principal security researcher at Accomplish AI, described the test plainly in his own writeup: “We connected a folder to a fresh Claude Cowork session, sent one short message, and watched the agent escape the sandbox. From inside the VM it reached the host Mac and read and wrote files all over it, far outside the folder we’d connected, with no permission prompt anywhere. SSH keys, cloud credentials, anything the user’s account can touch.”
They named the attack chain SharedRoot. According to Accomplish, roughly 500,000 macOS users running Claude Cowork locally were exposed before Anthropic’s newer default — cloud-based execution instead of a local VM — sidestepped the specific path they found.
What “Sandboxed” Was Supposed to Mean
Claude Cowork’s design, on paper, is careful. The macOS app runs under your normal user account, but the actual agent work happens somewhere else entirely: a Linux virtual machine, spun up through Apple’s own Virtualization framework. Inside that VM, each session gets a disposable, unprivileged user account, restricted by a seccomp filter — a Linux kernel feature that limits which system calls a process is allowed to make. The folders you explicitly connect are brokered in as mounts by a root-level daemon called coworkd.
That’s the promise: an unprivileged user, restricted system calls, and only the folders you chose to hand over, visible inside the VM. Yomtov’s own framing of why that boundary matters is worth reading directly: “Untrusted input isn’t an edge case for an agent, it’s the main case. You want it reading the repo you didn’t write and the PDF someone emailed you. So the boundary is the only thing standing between ‘the model did something silly’ and ‘the model had my cloud credentials.'”
A different, separate sandbox escape incident from the same week — OpenAI’s own internal model breaking out of an evaluation environment. Included for context on how common this failure pattern has become across the industry, not as coverage of the Claude Cowork case specifically. Independent production, not affiliated with Wangdoo.
The One Detail That Changed the Outcome
Here’s the part that determined how the rest of the chain played out. The entire host Mac filesystem — the real root directory of your actual computer — was mounted read-write inside that Linux VM, at a path called /mnt/.virtiofs-root. Visible only to whichever account held root privileges inside the guest VM, but present in full. Not the connected folder. Not a scoped subset. The whole machine.
What this actually means
The isolation boundary Cowork’s design was meant to provide — that an agent could only reach what a user explicitly connected — depended entirely on the session user inside that VM never becoming root. The moment anyone found a way to escalate privileges inside the guest, the entire host machine was already present, fully writable, one step away.
How the Escape Actually Worked, Step by Step
Yomtov’s writeup walks through six distinct steps, and the striking part is how few of them involved anything resembling a conventional “hack.” Reproduced and explained in order:
- Start as the unprivileged session user. No exploit needed here — this is simply Cowork doing its normal job on whatever content it was given.
- Get elevated capabilities inside a new namespace. The session user calls a standard Linux function (
unshare) to create a fresh user namespace. Inside that new namespace, the same user is treated as root, with a full set of Linux capabilities — including one calledCAP_NET_ADMIN. The guest VM allowed unprivileged users to create these namespaces at all, which Yomtov notes plainly wasn’t a bug: “It’s a kernel feature that could have been turned off, but left on.” - Reach vulnerable kernel code. With that networking capability in hand, the session configures a traffic-control action using a kernel module called
act_pedit— normally used for advanced network packet editing, something a sandboxed coding assistant has no real reason to touch. Merely referencing the module was enough to make the kernel automatically load it, over a communication channel the sandbox’s security filter happened to permit. - Turn a known bug into a write primitive. That freshly loaded module was vulnerable to CVE-2026-46331, nicknamed “pedit COW” — a publicly disclosed Ubuntu kernel bug from June 2026. It allowed the session to corrupt the cached, in-memory copy of a file it could read but not normally modify, without ever touching the file’s actual bytes on disk — which is part of what made the attack quiet.
- Turn that into full root inside the guest. This is the step where Yomtov says it stops being purely a kernel bug and becomes a design failure. The
coworkddaemon runs as root, and in the ordinary course of its work, it re-executes a helper program — the same helper the session had just poisoned in memory. Because the process launching that helper was already root, a Linux protection calledNoNewPrivs— designed specifically to stop privilege escalation across this kind of handoff — had nothing left to block. The session user was now root inside the guest VM. - Walk out through the open door. Guest-root could see
/mnt/.virtiofs-root— the entire host filesystem, mounted read-write. From there, it read and wrote files across the real Mac directly, with the full permissions of whichever person was logged in.
Accomplish ran the complete chain end-to-end on their own test machine. It worked.
Why the Kernel Bug Isn’t Really the Point
This is the argument Yomtov makes most forcefully, and it’s the part that elevates this from a routine “vulnerability found, vulnerability patched” story into something more useful. act_pedit is one specific bug. But the broader category it belongs to — Linux’s networking subsystem throwing off exactly this shape of privilege-escalation flaw — recurs on a regular basis. Patch this particular module and, in his words, “the chain re-arms on the next one, with everything above the kernel untouched.”
He backs that up with a striking data point about the current pace of this category of research: by one analysis he cites, mainline Linux kernel privilege-escalation advisories are running at roughly 2.3 times the prior year’s rate, and the gap between a fix landing publicly and a working exploit appearing has collapsed to a matter of hours. His conclusion: “You’re structurally one bug behind, all the time.”
The Four Fixes That Would Have Stopped It — Any One of Them
Rather than simply flagging the CVE, Yomtov’s disclosure lays out four independent design decisions, each of which alone would have broken this specific chain — and, more usefully, each of which closes off an entire category of future kernel bugs rather than just this one:
Four ways to have stopped this cold
1. Don’t hand out unprivileged user namespaces at all. A single kernel setting disables the very first step of the chain — the session user never becomes root inside any namespace, and never obtains the network capability the rest of the attack depends on.
2. Make the sandbox’s filter default to deny, not allow. Cowork’s seccomp filter blocked a handful of specific actions and let everything else through — including exactly the namespace and networking calls this chain needed. Flipping that posture, blocking those calls specifically and only allowlisting what’s actually required, closes the path.
3. Stop unused kernel modules from auto-loading. Yomtov notes Cowork already does this for a different module, to close a previous CVE — the same fix, applied consistently to every unused module including this one, would have blocked step three entirely, and blocks the next similar bug too.
4. Don’t mount the whole host into the VM. This is the one Yomtov calls most important. Scope the shared mount to only the folders actually connected, rather than the entire host root. Even a full guest-root compromise then has nowhere further to go.
Why Anthropic Closed the Report as “Informative”
Accomplish reported the full chain to Anthropic. Anthropic’s response, according to Yomtov’s own account, was to close it as “Informative” rather than treat it as a standalone vulnerability requiring a dedicated fix — citing two specific reasons: the underlying kernel CVE fell within the disclosure programme’s standard exclusion window for bugs published in the prior 30 days, and the four hardening recommendations were categorised as defense-in-depth measures rather than a discrete vulnerability in Cowork itself.
Yomtov’s own reaction to that decision is notably measured rather than combative: “That’s a reasonable call for a bounty program. But a program’s scope and your exposure on your own laptop are different questions.” He’s making a specific, narrower point — that relying on upstream kernel fixes to arrive on their own schedule means, from an end user’s perspective, “the strength of the box is tied to a patch race you don’t run and can’t win.”
What actually protects you right now
Anthropic’s current default for Claude Cowork uses cloud-based execution rather than a local VM, and this specific local escape path does not apply to that mode. If you’re running Cowork locally on macOS rather than through cloud execution, Yomtov’s research points to a practical mitigation: avoid connecting folders you don’t want an agent to be able to reach beyond, since the escape’s final steps depend on the host filesystem being present inside the VM at all. Where possible, prefer cloud execution over local sessions until scoped, read-only host mounts become the default.
My Take — Mr Wangdoo
What stands out to me about this disclosure isn’t the exploit chain itself — six steps, one CVE, competently documented, the kind of thing security researchers publish regularly. It’s how unusually generous Yomtov is toward the vendor’s response, and how that generosity is actually the more interesting story than the bug.
Most security disclosures I read fall into one of two registers: breathless alarm, or quiet technical detail with an implied “and this is scandalous” left for the reader to infer. This one does neither. Yomtov explicitly calls Anthropic’s “Informative” classification a reasonable call for a bug bounty programme, while still making a sharp, separate point that a programme’s scope and an individual user’s actual exposure are two different things that shouldn’t be confused with each other. That’s a more useful distinction than most security writing bothers to draw, and it’s worth sitting with: a company can make a defensible policy decision about what its bounty programme covers, and that decision can still leave real users carrying real risk in the gap.
The four-fixes framing is the part I’d want any engineering team building on top of AI agents to actually internalise, regardless of which vendor they use. Patching one CVE fixes one CVE. Yomtov’s argument — that Linux kernel privilege-escalation bugs in this exact shape are arriving at more than twice last year’s rate, with exploit code often following within hours of disclosure — means any sandbox whose safety depends on “the guest kernel stays clean” is making a bet it will eventually lose, repeatedly, on a schedule it doesn’t control. The fixes that actually matter are the ones that hold even when the next kernel bug — not this one, the next one — inevitably shows up. That’s a more durable way to think about AI agent security than chasing each new CVE as it lands, and it’s the one lesson from this disclosure that applies well beyond Claude Cowork specifically.
Frequently Asked Questions
What is SharedRoot?
SharedRoot is the name security researchers at Accomplish AI gave to an attack chain that let an AI agent running in Claude Cowork’s Linux virtual machine escape that VM entirely and access the host Mac’s real filesystem — including SSH keys, cloud credentials, and any file the logged-in user’s account could touch. The root cause was that Cowork’s VM had the entire host filesystem mounted read-write inside it, combined with a chain of kernel-level steps that let the agent’s session escalate from an unprivileged user to full root access inside the guest VM.
Is Claude Cowork still vulnerable to this right now?
Anthropic’s current default configuration for Claude Cowork uses cloud-based execution rather than a local virtual machine, and this specific local escape path does not apply to that mode. Anthropic reviewed the disclosure and closed it as “Informative” rather than issuing a dedicated code fix, citing bug bounty programme policy around recently published kernel CVEs and classifying the researchers’ hardening recommendations as defense-in-depth rather than a standalone vulnerability in the product itself.
Why didn’t Anthropic just patch it?
According to the researchers’ own account, Anthropic gave two reasons: the underlying kernel vulnerability fell within their disclosure programme’s standard exclusion window for bugs published within the prior 30 days, and they categorised the suggested hardening changes as defense-in-depth measures rather than a discrete flaw requiring an urgent fix. The researchers themselves described this as a defensible policy decision for a bug bounty programme, while still arguing that it doesn’t fully address the practical exposure faced by individual users running local sessions.
What is a sandbox escape, in plain terms?
A sandbox is a restricted, isolated environment meant to contain a program — in this case, an AI agent — so that even if something goes wrong or the agent is manipulated by malicious content, the damage stays confined to that isolated space. A sandbox escape is when that containment fails and the program gains access to the broader system outside the boundary it was supposed to be restricted to. In this case, the “sandbox” was a Linux virtual machine, and the escape gave the AI agent access to the real Mac computer running underneath it.
What should I do if I use Claude Cowork locally on my Mac?
If you’re running Cowork through cloud-based execution rather than a local session, this specific escape path doesn’t apply to you. If you do run local sessions, avoid connecting folders containing sensitive data you wouldn’t want an agent to potentially reach beyond, since the escape depends on the host filesystem being accessible from inside the VM. Keeping your macOS and any related software updated is good general practice, though the researchers’ point is precisely that patching individual kernel bugs doesn’t close the underlying architectural gap on its own.
Does this affect other AI coding agents besides Claude Cowork?
This specific disclosure covers Claude Cowork’s implementation, but the researchers frame the underlying lesson as broader: any AI agent sandbox whose security depends entirely on the guest operating system’s kernel staying free of privilege-escalation bugs is relying on an assumption that doesn’t hold reliably, given how frequently this category of Linux kernel vulnerability is currently being discovered. Anyone evaluating AI coding agent platforms with local sandboxing should ask specifically how the host filesystem is scoped within any virtual machine boundary, rather than assuming “it runs in a VM” is sufficient on its own.
Sources
- SharedRoot: Escaping the Claude Cowork Sandbox — Oren Yomtov, Accomplish AI, July 23, 2026 (primary source: full technical chain, exact quotes, four design recommendations)
- Claude Cowork Flaw Could Let AI Agent Escape Its VM and Access Mac Files — The Hacker News, July 23, 2026 (independent confirmation, 500,000 user estimate)
- Claude Cowork Sandbox Escape Flaw Lets AI Agent Read SSH Keys and Cloud Credentials From Host — CyberSecurityNews (technical architecture breakdown)
- Accomplish AI finds SharedRoot escape in Claude Cowork on Mac — AI Weekly (Anthropic response analysis, mitigation context)