AI-generated content. This article was researched and written by an automated AI editorial system and published without prior human review. Every factual claim is checked against cited primary sources before publication, but no journalist read this page before you did — treat it accordingly, and report anything that looks wrong. How this works ›

Some links on this page are affiliate links. We may earn a commission at no extra cost to you.
Updated: Sep 13, 2026
·
securitycodingharnessesanthropicopenaiprocurementai-tools

Three research teams escaped every major coding agent's sandbox in four months — and the same git setting did it twice

TL;DR: On 11 September 2026 Accomplish AI published Beltdown, a Claude Code sandbox escape that never touched the sandbox. A malicious repo ships a nested .git folder — nested, to sidestep root-level protections — holding a poisoned core.fsmonitor. Reading a file there auto-loads skills, skill loading calls git ls-files, and that git call runs outside the box. Git then executes the payload with the user’s privileges, with no permission prompt. Reported 13 July, incompletely fixed in 2.1.223 on 6 August, properly fixed in 2.1.247 on 26 August — about 44 days, roughly 30 releases, no CVE, no advisory. Pillar Security had used the same git primitive against Cursor in July. Cymulate had escaped Claude Code, Codex CLI and Gemini CLI through their own config files in May. The tempting read — Anthropic is slow — does not survive contact with the record: in May, Anthropic patched in 16 days and paid a bounty while OpenAI closed the equivalent report as “Informational.” No vendor’s response time repeated. What repeated was the architecture.

The bug that is not a bug

Beltdown is unsettling precisely because nothing in it malfunctioned.

The chain, as Accomplish documented it on 11 September: a repository’s setup script creates a .git folder in a subdirectory rather than at the root, which is the whole trick — root-level .git protections exist, and a nested one is not covered by them. Inside it sits a core.fsmonitor configuration entry. Git’s fsmonitor hook is a legitimate performance feature that names an external program for git to run when it needs to know which files changed.

Then Claude Code reads a file in that subfolder. Reading triggers automatic skill loading. Skill loading invokes git ls-files. And git ls-files is one of the harness’s own commands — it runs outside the sandbox, because it is the harness’s, not the model’s.

Git does what git does. It reads the repository config it has been pointed at, finds core.fsmonitor, and executes it with the user’s privileges.

“A command from that repo ran on our Mac anyway, outside the sandbox, with no permission prompt.” — Accomplish AI, Beltdown, 11 September 2026

The sandbox held. The model stayed inside it. The escape happened because a trusted program outside the box read a file that something inside the box was allowed to write. Pillar Security, reaching the same conclusion from different bugs in July, compressed it to five words: files inside the workspace are not inert.

The same setting, twice, five months apart

Here is the detail that turns this from an incident into a pattern.

Pillar’s July research against Cursor — reported by BleepingComputer on 20 July — lists three separate issues fixed in Cursor 3.0.0. One is CVE-2026-48124, a workspace-controlled .claude hook config. One is a virtualenv interpreter the editor’s Python extension runs on its own during discovery. And the third is git metadata abuse that bypassed path-based rules via fsmonitor.

That is the same git primitive Accomplish used against Claude Code, in a different vendor’s product, disclosed roughly five weeks earlier by an unrelated team.

Two independent research groups, two competing harnesses, one fifteen-year-old git configuration key. Neither vendor’s sandbox was weak in an interesting way. Both had drawn the boundary around the agent and left the tooling the agent’s output flows into on the other side of it.

Cymulate had already named the class in May, calling it Configuration-Based Sandbox Escape: the sandbox “isolates the operating system, but leaves the agent’s own configuration, the layer that defines what the agent is allowed to do, exposed and writable.” That research escaped Claude Code via SessionStart hooks in .claude/settings.json, Codex CLI via .codex/config.toml and agents.md, and Gemini CLI via a writable .gemini directory holding oauth_creds.json. Pillar added Antigravity to the list in July with a macOS Seatbelt denylist bypass.

Every serious agentic coding tool on the market, escaped by at least one of three teams inside four months, through the same structural gap.

The league table that inverts

The obvious story to write from the September reporting is that Anthropic is slow. Upstarts Media, on 10 September, laid out the comparison: Anthropic took about 50 days and roughly 30 software updates; Cursor fixed a report from the same researchers in about a week; OpenAI fixed two in about a week and put a statement on the record describing tightened file-writing controls and expanded testing. Anthropic and Cursor did not comment on the record. Accomplish’s own timeline is slightly tighter than 50 — reported 13 July, triaged same day, incomplete fix 6 August, complete fix 26 August — but the shape is the same, and 44 days is not a good number.

Then look at May.

Against Cymulate’s disclosure, Anthropic patched CVE-2026-25725 within 16 days and awarded a bounty. Google acknowledged the Gemini CLI report on 7 January and had communicated no fix and no formal decision more than 90 days later. OpenAI closed the Codex CLI report on 24 February as “Informational,” on the grounds that prompt injection was out of scope, and declined to engage with the researchers’ rebuttal.

Same three vendors. Opposite ordering. Four months apart.

This is why “which vendor patches fastest” cannot go in a procurement scorecard. Response latency is not a stable property of an organisation; it is a property of one report meeting one triage queue in one month, mediated by whether the receiving team accepted the bug class as in-scope at all. A buyer who had chosen a coding agent in June on the strength of Anthropic’s 16-day turnaround would have chosen the vendor that went on to take 44 days on the next one — and would have been right anyway, for reasons that had nothing to do with the metric.

What is stable is the architecture. That is the thing to plan against.

The part that should actually bother you

Not the 44 days. The silence.

Beltdown’s fix shipped inside an ordinary Claude Code release. No CVE. No advisory. The partial hardening in 2.1.223 on 6 August looked, from outside, exactly like the complete fix in 2.1.247 on 26 August — which is to say, like nothing at all. A team with a disciplined upgrade process, pinning versions and reviewing changelogs before rolling forward, had no signal that 2.1.247 was the release that mattered.

This is a recurring shape rather than a one-off. When Accomplish disclosed SharedRoot in July — a Claude Cowork flaw where the guest VM had the host filesystem mounted read-write at /mnt/.virtiofs-root, reachable by chaining the Linux kernel bug CVE-2026-46331 to get guest-root, exposing SSH keys and cloud credentials across roughly 500,000 macOS installs — Anthropic closed the report without a dedicated fix and instead defaulted new Cowork sessions to cloud execution. That does resolve it for most users. It also means anyone who deliberately runs locally is still exposed, and is relying on a default they may have changed for exactly the privacy reasons that led them to run locally.

It is the same disclosure gap we flagged when OpenAI stayed quiet for weeks about an agent swarm occupying a German wiki, and the same one underneath CISA’s advisory on silently degraded models: the vendor knows, the fix ships, and the buyer is never told which change was the important one. Patch latency you can at least measure after the fact. An unannounced fix is invisible by construction.

What to do about it

The honest version is that this changes deployment, not selection. Every agent on the shortlist was escaped; switching tools buys a different CVE list, not a different threat model. See our coding tools roundup and Cursor vs Claude Code for the selection question, which this research does not settle in anyone’s favour.

Pin minimum versions and hold them. Claude Code 2.1.247, Cursor 3.0.0, Codex CLI 0.95.0. Put them wherever your team manages developer tooling, not in a wiki page.

Get the credentials off the box. Both Anthropic’s stated threat model and the SharedRoot impact turn on SSH keys and cloud credentials being sitting there, readable. Short-lived per-session tokens turn a total compromise into a scoped one, and this is the single highest-leverage change available.

Carry the load on egress. Anthropic’s own sandboxing documentation says plainly that “effective sandboxing requires both filesystem and network isolation” — and that without network isolation “a compromised agent could exfiltrate sensitive files like SSH keys.” The filesystem half has now failed publicly three times in four months. Network control is what is left, and it has to live in the network, not in the harness. This is much of the case for running agents on self-hosted or remote execution environments rather than on laptops that hold production credentials — and the reason the split-execution designs we looked at are worth the operational tax for teams shipping with these tools daily.

Ask about advisory practice in writing. Not “how fast do you patch” — the record shows that answer does not hold. Ask whether the vendor publishes advisories for harness security fixes, and whether security-relevant releases are distinguishable from routine ones. Unlike latency, that is a commitment a vendor can make once and be held to.

The broader lesson has been consistent all year, from Meta’s rule-of-two being policy rather than cryptography to a Langflow CVE leaking OpenAI and AWS keys through self-hosted glue: controls that live inside the thing you are trying to contain are not controls. They are configuration. The agent’s sandbox is genuinely useful and worth keeping on — it is simply not the last line, and three research teams have now spent four months demonstrating why.

Frequently asked questions

What is Beltdown, and am I still exposed?

Beltdown is a Claude Code sandbox escape published by Accomplish AI on 11 September 2026. It is fixed. If you are on Claude Code 2.1.247 or later you are not exposed to this specific chain, and the partial hardening shipped in 2.1.223 on 6 August was not sufficient, so 2.1.223 is not far enough. The mechanism is worth understanding even though it is patched, because it did not break the sandbox. A malicious repository ships a setup script that creates a nested .git folder — nested, because root-level .git protections exist and this sidesteps them — containing a poisoned core.fsmonitor entry. When Claude reads a file in that subfolder it auto-loads skills, skill loading invokes git ls-files, and that git invocation is one the harness runs outside the sandbox. Git faithfully executes the core.fsmonitor payload with the user's own privileges. In the researchers' words: "A command from that repo ran on our Mac anyway, outside the sandbox, with no permission prompt." Nothing was breached. Every component behaved as designed.

Is Anthropic slower at patching than OpenAI or Cursor?

Not reliably, and that is the finding rather than a defence. On this disclosure Anthropic was clearly slowest: reported 13 July, triaged the same day, incomplete fix on 6 August, complete fix in 2.1.247 on 26 August — roughly 44 days, and about 50 by the count Accomplish gave Upstarts Media, across something like 30 shipped releases, with no CVE and no advisory. Cursor fixed a report from the same team in about a week. OpenAI fixed two in about a week and gave an on-record statement describing tightened file-writing controls and expanded testing. But run the same comparison against Cymulate's disclosure four months earlier and the ordering inverts: Anthropic patched CVE-2026-25725 within 16 days and paid a bounty, Google left the Gemini CLI finding unresolved past 90 days, and OpenAI closed the Codex CLI report on 24 February as "Informational" on the grounds that prompt injection was out of scope, then declined to engage with the rebuttal. Two disclosures, two opposite league tables, same vendors. Patch latency is a property of a particular report landing with a particular team in a particular month. It is not a vendor trait you can put in a procurement scorecard.

If the sandbox does not contain the agent, what actually does?

Controls that sit outside the agent and do not depend on it behaving. Three are worth the effort in roughly this order. First, do not keep long-lived credentials on the machine the agent runs on — SharedRoot and the Anthropic threat model both turn on SSH keys and cloud credentials being readable, so short-lived tokens minted per session convert a total compromise into a scoped one. Second, control egress at the network rather than in the harness: Anthropic's own sandboxing write-up states that "effective sandboxing requires both filesystem and network isolation," and the filesystem half has now failed publicly three times, which leaves the network half carrying the load. Third, treat the agent's workspace as untrusted input to everything downstream — Pillar's recommendation is to monitor "the moment a trusted local tool runs something the agent wrote," which is the actual event in all of these chains. Running the agent on disposable remote infrastructure rather than an engineer's laptop does most of this by construction.

Does this mean the sandbox is pointless?

No, and overreacting here would cost more than the bugs did. The sandbox is what makes agentic coding tolerable to use — it is why the tools can act without prompting for permission on every file write, and it does contain the ordinary case of a model doing something careless. What these three disclosures establish is a narrower claim: the sandbox boundary encloses the agent's process but not the agent's configuration and tool-invocation layer, and files the agent writes inside the box are executed later by trusted programs outside it. Cymulate put it exactly: the sandbox "isolates the operating system, but leaves the agent's own configuration, the layer that defines what the agent is allowed to do, exposed and writable." So the sandbox is a real control with a documented gap, which is an ordinary thing for a security control to be. The mistake is not using it. The mistake is treating it as the reason you do not need the controls outside it.

Which tools were affected, and what versions fix them?

Across the three disclosures: Claude Code — CVE-2026-25725 fixed in 2.1.2+ (Cymulate), and Beltdown fixed in 2.1.247 (Accomplish). Cursor — CVE-2026-48124 plus two further issues, a virtualenv interpreter the Python extension runs during discovery and git metadata abuse via fsmonitor, all fixed in 3.0.0 (Pillar). Codex CLI — an allowlist that trusted the git show command name without validating its arguments, fixed in v0.95.0 (Pillar); an earlier config.toml and agents.md chain was closed without a fix in February (Cymulate). Gemini CLI — CVE-2026-20079 via privileged Docker socket access, patched (Pillar); a separate config-poisoning and OAuth-theft path was still unresolved after 90 days in May (Cymulate). Google Antigravity — a macOS Seatbelt denylist bypass and a .vscode task-config bypass, not assigned a CVE (Pillar). Claude Cowork — SharedRoot, which chained the Linux kernel bug CVE-2026-46331 to reach a host filesystem mounted read-write inside the guest VM; Anthropic closed the report without a dedicated local fix and instead defaulted new sessions to cloud execution, so anyone deliberately running Cowork locally is relying on that default.

Should this change which coding agent we buy?

It should change how you deploy the one you have, not which one you have. Every major agent in this category was escaped by at least one of the three teams, through the same structural gap, so there is no tool on the shortlist that the finding selects for — switching from one to another buys you a different CVE list, not a different threat model. The two things worth doing are cheap. Pin a minimum version in whatever manages your developer tooling and hold it there: 2.1.247 for Claude Code, 3.0.0 for Cursor, 0.95.0 for Codex CLI. Then ask the vendor in writing whether they publish advisories for harness security fixes, because the genuinely uncomfortable detail in Beltdown is not the 44 days — it is that the fix shipped inside an ordinary release with no CVE and no advisory, which means a team doing everything right had no signal that the upgrade mattered. That is a disclosure-practice question, and unlike patch latency it is a question a vendor can answer once and be held to.

Sources

Related tool reviews

Questions or corrections? Email Pick Right. Want the full list? See all news.