Severity Daily

IT and AI security incidents, checked against the primary source

Tag: sandbox escape

  • Cua and AutoAgent take 9.8s for unauthenticated command execution, and Cua’s named fix version changed a bind default, not the authentication

    Cua and AutoAgent take 9.8s for unauthenticated command execution, and Cua’s named fix version changed a bind default, not the authentication

    Two CVEs published minutes into Friday morning describe the same architecture — a sandbox whose job is to run commands for an AI agent, listening on every interface with the authentication check disabled — and neither product has a fix that closes it.

    What happened

    Two records landed in the National Vulnerability Database at 10:16 a.m. UTC on Friday, September 5, 2026, less than half a second apart, from the same CNA and crediting the same researcher. Both carry a CVSS v3.1 base score of 9.8 and a CVSS v4.0 base score of 9.3, both scored by VulnCheck. Both are filed under CWE-306, missing authentication for a critical function. Both have a vulnStatus of Received, meaning NVD has not yet enriched them.

    CVE-2026-86121 covers Cua’s computer-server. The record reads, in full: “Cua computer-server versions before 0.3.42 skip authentication when the CONTAINER_NAME environment variable is unset and bind to all interfaces by default, allowing unauthenticated attackers to execute arbitrary commands.” VulnCheck’s advisory adds that the reachable surface is TCP port 8000, and that an attacker who reaches it gets command execution, arbitrary file read and write, and an interactive PTY shell. Cua is a computer-use agent platform whose README describes building “agents that see screens, click buttons, and complete tasks autonomously”; computer-server is the daemon that carries those actions out inside the VM or container. The repository has 22,200 stars.

    CVE-2026-86124 covers AutoAgent, an LLM agent framework from HKUDS with 9,700 stars and 1,400 forks, described by its authors as a “Fully-Automated and highly Self-Developing framework that enables users to create and deploy LLM agents through Natural Language Alone.” That record reads: “AutoAgent contains an unauthenticated remote code execution vulnerability in the TCP server that binds to all interfaces and executes attacker-supplied commands as root.” VulnCheck’s advisory names two files — autoagent/environment/tcp_server.py, which binds 0.0.0.0 with no authentication check, and autoagent/environment/docker_env.py, which runs the container as root and publishes the port to 0.0.0.0 on the host. The container bind-mounts the user’s workspace directory, so host files are in reach.

    Both were reported in public on June 13, 2026, by the same person: GitHub user geo-chen, credited in both VulnCheck advisories as George Chen. The CVEs published 84 days later. Both upstream issues — trycua/cua#1892 and HKUDS/AutoAgent#96 — were still open when this story was checked on the morning of September 5. The AutoAgent issue states the case plainly: “There is no token, signature, or origin check; the protocol is ‘connect, send command, receive output.’”

    What the fix version fixes

    AutoAgent’s record names no fixed version at all. Its affected range is expressed as a git commit — everything through 16c12b052ef2330a198063c62a07a7f9723031e3 — and VulnCheck’s advisory carries no remediation.

    Cua’s record does name one: 0.3.42, published to PyPI on June 24, 2026, eleven days after the report. VulnCheck’s advisory describes the fix as a bind-address change, and the commit it lists among its references, 59cf25c0ec54, carries the message “chore(python): scope lint baseline (#1846).” The change inside it that matters flips the command-line default from 0.0.0.0 to 127.0.0.1, and rewrites the help string to read “Host to bind the server to (default: 127.0.0.1; use 0.0.0.0 for external access).”

    That addresses the second clause of the CVE description. It does not address the first. Read on the project’s main branch on the morning of September 5 — twice, through two different URL forms, because a claim about what code does not contain deserves more than one look — AuthenticationManager.auth() in computer_server/main.py still carries this:

    # If no CONTAINER_NAME is set, always allow access (local development)

    followed by a return True. The same file’s own entry point still calls uvicorn.run(app, host="0.0.0.0", port=8000); only the CLI wrapper got the new default. Two releases have shipped since the named fix — 0.3.43 and 0.3.45, both on August 28, 2026 — and the current release is 0.3.45.

    Neither CVE carries CISA KEV fields. There is no cisaExploitAdd, no cisaActionDue, no federal deadline, and no report of exploitation from anyone. What there is, in both cases, is a scored, published, unauthenticated path to command execution and a remediation column that does not close it.

    Why it matters

    An affected-version range that reads “less than 0.3.42, fixed in 0.3.42” is a specific promise, and every downstream consumer of that data treats it as one. A software composition analysis tool clears the finding at 0.3.42. A patch-management queue closes the ticket. None of those systems read the description closely enough to notice that it names two conditions and that the fix version resolves one of them.

    The condition it resolves is the easier one. Binding to loopback narrows exposure to whatever else runs on the same host — which, for a machine whose purpose is running agent workloads in containers, is not a small population. The condition it leaves is the one the CWE assignment actually names: with CONTAINER_NAME unset, the authentication function returns true for everyone. Anything that can reach the socket is authorized. The comment beside it says “local development,” and that is a fair description of the intent, but intent is not a control. A default that fails open is a default that fails open on the machines where nobody read the README.

    This is the shape of failure that keeps turning up in agent infrastructure specifically, and it is worth naming why. The product is a machine that runs arbitrary commands on request. Authentication between the orchestrator and the sandbox is, during development, pure friction: the model is on the same host, the loop needs to be fast, and a token check is one more thing to get wrong. So it gets stubbed out behind an environment-variable test, and the stub becomes the default, and the default ships. The desk has now written variations on this in goose’s recipe scanner skipping the two fields that execute commands, in two Postgres MCP servers losing read-only mode on the same day, and in seven AI coding agents running attacker code out of a repository’s .git/config. The common factor is not carelessness. It is that in this category the dangerous capability is the feature, so the guardrail is always something bolted beside it rather than something the design forces.

    AutoAgent’s version field deserves separate attention. Expressing an affected range as a 40-character git commit hash is honest — the project does not cut releases, so there is no version number to name — but it is unusable by every automated consumer downstream. No scanner can compare an installed tree against a commit range. An operator who installed AutoAgent by cloning the repository in July has no mechanical way to learn whether they are inside the affected set, and no upgrade to perform if they are. In practice that record will sit at 9.8 in every feed that ingests NVD and produce no action anywhere, which is the worst combination available: maximum alarm, zero remediation path.

    One detail cuts against the obvious reading of the Cua timeline. The commit that changed the bind default is a lint-baseline chore, not a security commit. Projects fix things for incidental reasons all the time, but it does mean the record’s remediation field points at a change that was never designed to be a remediation — a reasonable explanation for why it covers half the described flaw.

    What to do

    Cua computer-server. Upgrade to 0.3.45, but do not treat the version number as the control. Set CONTAINER_NAME in the environment so the authentication path is actually exercised. Pass --host 127.0.0.1 explicitly rather than relying on the default, and be aware that invoking the server module directly rather than through the CLI still binds 0.0.0.0. Then confirm from another host that TCP port 8000 does not answer.

    AutoAgent. There is no fix to apply. Do not let Docker publish the sandbox port to 0.0.0.0 — bind the published port to 127.0.0.1 in your own compose or run invocation. Review what the container bind-mounts from the host and narrow it. Do not run it on a shared network segment, a cloud instance with a permissive security group, or a machine where a browser is also running.

    Both. Inventory what is listening on port 8000 across your agent hosts and check whether anything there answers a command without credentials. If you have already recorded CVE-2026-86121 as remediated on the strength of a version number, reopen it.

    Sourcing note

    CVE-2026-86121 and CVE-2026-86124 were read from the NVD API by CVE ID; both show published and lastModified of September 5, 2026, at 10:16 a.m. UTC, and both were confirmed to carry no CISA KEV fields. VulnCheck’s own advisory pages for both were read directly for remediation, credit, and technical detail. The upstream issues, trycua/cua#1892 and HKUDS/AutoAgent#96, were read on GitHub; both showed as open. Release dates for cua-computer-server came from the PyPI JSON API. The claim that Cua’s current code still returns true when CONTAINER_NAME is unset was verified by two separate retrievals of computer_server/main.py on the main branch using different URL forms, because a statement about what code lacks is exactly the kind of claim a single summarized fetch gets wrong.

    Not resolved: whether Cua’s maintainers regard the fail-open local-development default as intended behavior rather than a defect. Neither issue showed a maintainer reply in the content retrieved, and the absence of a reply in a rendered issue page is weaker evidence than a reply’s presence — treat it as unconfirmed rather than as silence. Neither vendor was contacted for this story. Star and fork counts are GitHub’s own figures as displayed on September 5, 2026, and are a measure of attention, not of deployment.

  • Seven AI coding agents run attacker code from a repository’s .git/config, and four still have no fix

    Seven AI coding agents run attacker code from a repository’s .git/config, and four still have no fix

    OpenAI published three Codex CVEs on September 1, 2026. A day later, the research behind one of them said Qwen Code, Grok Build, Hermes Agent, and a second path in Claude Code still have no fix.

    What happened

    OpenAI, acting as its own CNA, published three CVE records for its Codex products on September 1, 2026: CVE-2026-19591, CVE-2026-19592, and CVE-2026-19593. On September 2, CISA’s Vulnerability Enrichment program added its own scoring container to CVE-2026-19593, and the same day Manifold Security published the research those records came out of — a writeup it calls GitSpawn, covering eight findings across seven AI coding agents that all turn on the same piece of Git behavior.

    The behavior is not new and is not a bug in Git. An agent opening a workspace wants to know what is in the repository, so it shells out to Git. Any command that refreshes the index — git status, git diff HEAD — runs programs named in that repository’s own .git/config. The key most of these findings turn on is core.fsmonitor, a performance setting that points Git at an external file-watcher binary. A repository shipping a .git/config with fsmonitor set to an attacker’s command gets that command run on the machine of anyone who points an agent at the folder.

    The advisory for the goose agent — GHSA-r5pp-p5r8-466r, carrying CVE-2026-72718, rated 7.0, fixed in goose 1.44.0 — states the consequence plainly: “A malicious repository whose .git/config sets [core] fsmonitor = <command> causes git to execute that command on the host during its index refresh (git diff HEAD). So running goose review inside a malicious repo runs attacker code – no submitted prompt, no model call, no tool approval, no trust prompt. The command executes before goose ever contacts the model.”

    OpenAI’s CVE-2026-19592 is the core.fsmonitor case in Codex: the record says Codex “automatically collected Git repository metadata without disabling the repository-local core.fsmonitor setting,” across Codex CLI 0.102.0 through 0.130.0 and Codex Desktop for macOS and Windows. CVE-2026-19593 is a second route to the same place — a repository config that sets attr.tree together with clean or process filters, which gets Git to run an attacker-controlled program outside the sandbox with the user’s privileges. Its stated workaround is exact about where the trust boundary actually sits: “Until updated, do not open attacker-supplied workspace folders that retain untrusted .git metadata.”

    CVE-2026-19591 is a different flaw in the same batch: Codex’s command-safety parser “interpreted PowerShell’s stop-parsing token (–%) differently than PowerShell itself,” which let file-writing Git operations past the approval prompt. It is credited to Compass Security; CVE-2026-19592 to the System Software and Security Lab at Fudan University and to a researcher working through the Zero Day Initiative. Three sets of reporters, one product, one publication day.

    Two vectors for one delivery path

    OpenAI supplied no CVSS score of its own on CVE-2026-19593. The 9.8 attached to that record comes from CISA’s ADP container, with the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — network attack vector, no user interaction. CVE-2026-19592, scored 7.3 by both OpenAI and CISA, carries CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H — local, privileges required, user interaction required. Both flaws are reached the same way: a person opens a repository someone else prepared. CISA’s SSVC decisions diverge along the same line: CVE-2026-19593 is marked automatable with exploitation “none,” CVE-2026-19592 not automatable with exploitation at “poc.” Nothing here is wrong enough to dispute. It is worth knowing that two scores four points apart describe the same user action.

    Where the record runs out

    Coverage of the research has mapped Manifold’s Claude Code finding to CVE-2026-55607. That record is something else: Anthropic’s own advisory GHSA-7835-87q9-rgvv, “Sandbox Escape via Git Worktree Path Confusion,” affecting @anthropic-ai/claude-code from 2.1.38 up to 2.1.163, fixed in 2.1.163, scored 7.7 on CVSS v4.0 and credited to the researcher metnew. It does involve fsmonitor execution during worktree operations, which is how the two get conflated — but the versions do not line up. Manifold says it reported its core.fsmonitor finding against Claude Code 2.1.193 on June 26, 2026, and that Anthropic fixed it on June 29 in 2.1.196. Neither version is inside CVE-2026-55607’s range.

    Anthropic’s published advisory list for claude-code carries nothing covering 2.1.193 to 2.1.196, and nothing for the second Claude Code path Manifold describes, which it says it reported on July 15, 2026, and re-confirmed as unfixed on 2.1.252 — a report Manifold says was closed as an internal duplicate. On the public record, the patched issue has no advisory and neither does the unpatched one.

    The Hermes Agent finding is in a third state. Manifold cites CVE-2026-71963, assigned by VulnCheck; queried against the CVE Program API on September 2, 2026, that identifier returns a 404. It has been assigned, and no record has been published. Manifold says six attempts to reach the Hermes maintainers produced no triage.

    Why it matters

    The control being bypassed is the one these tools tell users to rely on. Every agent named here ships a workspace-trust prompt or a command-approval step, and the safety story of a coding agent is that nothing runs until you say so. This class of bug runs before the prompt. In the goose case the command executes before the agent has contacted a model at all — no prompt injection, no clever phrasing, no model in the loop. The agent is doing nothing but starting up.

    What makes this worth reading past the individual CVEs is the convergence. Manifold reports that five of its eight submissions came back as duplicates of findings other researchers had filed independently, one of them on the same day. That is not one vendor being careless. It is what happens when seven teams arrive at the same design — ask Git what is in this directory before doing anything else — and Git’s answer has been configurable by the directory since long before any of them existed. Abusing core.fsmonitor for execution is documented red-team tradecraft, with public writeups predating all of these products. The agents did not invent the trick. They enlarged its reach, from something that fires when a developer runs a Git command to something that fires when a developer opens a folder.

    The second thing to take from this is how thin the durable record is. Where the vendor is its own CNA you get records with version ranges you can check, and OpenAI’s three are exactly that. Where it is not, the finding lands in a GitHub advisory a scanner may or may not see, in a VulnCheck assignment with no published record, or nowhere. A team asking “are our developers running a vulnerable agent” has an authoritative answer for Codex and goose, a partial one for Claude Code, and none for Qwen Code, Grok Build, or Hermes Agent. A fix shipping is not the same as a fix being knowable — most recently on Eclipse Theia’s agent-mode workspace escape, where the release that fixed it filed the change as breaking rather than security.

    One caution on scale. The reach figures are Manifold’s: over 77 million npm downloads a month for Claude Code, close to half a million GitHub stars across the projects it discusses. Those are the researcher’s numbers, not checked here, and downloads are not installs. The patch-status claims for the four unfixed agents are single-source too — Manifold says it re-tested them, and no vendor has confirmed or denied.

    What to do

    Codex. Update Codex CLI to 0.131.0 or later; Codex Desktop for macOS to 26.519.22136 or later; Codex Desktop for Windows to 26.519.21041, Microsoft Store package 26.519.2081.0, or later. OpenAI’s stated interim workaround for CVE-2026-19591: “Until updated, do not open or follow instructions from untrusted repositories. On macOS and Linux, keep filesystem sandboxing enabled.”

    goose. Update to 1.44.0 or later, which closes CVE-2026-72718.

    Claude Code. 2.1.163 clears CVE-2026-55607. Manifold’s account puts the core.fsmonitor fix in 2.1.196; there is no Anthropic advisory naming that version, so treat 2.1.196 as the researcher’s figure rather than a vendor-confirmed floor. Manifold reports a second path still reproducing on 2.1.252.

    Qwen Code, Grok Build, Hermes Agent. No fixed version is published. Do not point them at repositories you did not create.

    For everyone else. Stop trusting repository-local Git config. A fresh clone over HTTPS or SSH does not import a remote .git/config; the risk is in folders handed over as archives, shared drives, or copied directory trees that keep .git intact. Before opening one with an agent, check its .git/config for core.fsmonitor, attr.tree, and any filter.*.clean or filter.*.process entry. A one-line grep across your developers’ checkout directories will tell you today whether anything is already sitting there.

    Sourcing note

    Checked against primary sources: the CVE Program API records for CVE-2026-19591, CVE-2026-19592, CVE-2026-19593, and CVE-2026-55607; the NVD record for CVE-2026-19593, which is still “Awaiting Analysis” and carries no CVSS of its own; CISA’s vulnrichment repository, where the ADP container for CVE-2026-19593 was committed on September 2, 2026; the goose advisory GHSA-r5pp-p5r8-466r; Anthropic’s GHSA-7835-87q9-rgvv and the first two pages of its advisory list; and Manifold Security’s writeup. None of these CVEs is in CISA’s Known Exploited Vulnerabilities catalog, and no federal remediation deadline attaches to any of them.

    Not reached: cisa.gov returns 403 to automated fetching, so CISA’s enrichment was read from the cisagov/vulnrichment repository on GitHub — CISA’s own publication channel for that data — rather than from the agency’s website. Unresolved: whether Anthropic considers the core.fsmonitor issue and the still-open second path covered by an existing advisory; whether VulnCheck’s CVE-2026-71963 will be published; and whether Qwen Code, Grok Build, or Hermes Agent dispute Manifold’s re-test results.