Product1 distinct publisher3 min readUpdated
CVE-2026-22708 let injected text rewrite a Cursor agent's environment, so an approved "git branch" ran something else. It worked with an empty allowlist too.
The Product Desk · Product desk
Compiled by The Product DeskSomething wrong?How this is made
On January 14, 2026, researchers at Pillar Security disclosed CVE-2026-22708, a flaw in Cursor: with the agent in Auto-Run Mode and an allowlist enabled, a handful of shell built-ins executed without appearing in that allowlist and without asking for approval [1]. That matters because a list of commands the agent may run unprompted is the safety model most teams running a coding agent have today, resting on the assumption that anything dangerous surfaces as a prompt you can refuse [2].
The mechanics are short. Programs read settings from their environment at startup, and git consults one called PAGER to decide which program displays its output, while Python consults PYTHONWARNINGS [3]. The commands that change those settings, which Pillar's research names as export, typeset and declare, are shell built-ins rather than programs sitting on disk, and the checker was looking for programs on disk [4]. So the whole attack is two lines: set PAGER to the attacker's command, which runs silently, then let the developer approve git branch, which they will [5]. Git looks up PAGER to work out how to show the branch list, finds the payload there, and runs that instead [6].
No memory corruption was involved and no permission was escalated, according to Docker's account of the disclosure [7]. The developer saw an accurate prompt, approved a command that was genuinely harmless, and got arbitrary code execution, because the meaning of the command had been changed a minute earlier by something they were never shown [7]. Anything that can get text in front of the agent, a README, a dependency, an issue comment, is enough to change the variable [8].
The detail that settles the argument about tuning these lists: Pillar notes the attack still worked with a completely empty allowlist, the most restrictive setting on offer [9]. An allowlist with zero entries and an allowlist with ninety entries produce the same outcome here, so no configuration of the mechanism is a mitigation [10]. Cursor rated the flaw High and patched it in version 2.3 [11], and its documentation now describes the allowlist as best-effort and warns that bypasses are possible [12]. Pillar's position is more direct: hand agents full command execution inside an isolated environment, and deprecate allowlists altogether [13].
None of the underlying trick is new. Pillar's write-up points back to Elttam's 2020 research showing environment variables could be turned into code execution [14], which sat unremarked for six years [15] until agents started approving commands on a developer's behalf. The structural problem, as Docker's series frames it, is that the agent runs as you, with your filesystem permissions and your credentials, and nothing sits between the model's decision and the shell's execution [16]. Docker sells the conclusion it wants here, containment at the boundary rather than at the command line [17], and its own post concedes there are two things its sandboxes do not contain in this case [18], which the excerpt we have does not enumerate.
Watch whether other agent vendors follow Cursor in reclassifying allowlists as best-effort rather than a control, since that is a documentation change with procurement consequences [12]. Watch also whether approval moves off the laptop: Docker's pitch is that kits, organisation policy and audit logs cover what a per-laptop allowlist misses [19], and any team relying on per-developer configuration has no record of what was approved or why.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
On January 14, 2026, researchers at Pillar Security disclosed CVE-2026-22708, a flaw in Cursor: when the agent ran in Auto-Run Mode with an allowlist enabled, a handful of shell built-ins executed without appearing in that allowlist and without asking for approval.
Programs read settings from their environment when they start up: Git checks one called PAGER to work out which program displays its output, and Python checks one called PYTHONWARNINGS.
The commands that change those environment settings, named in Pillar's research as export, typeset and declare, are shell built-ins rather than programs sitting on disk, and the checker was looking for programs on disk, so they went through without being surfaced.
The attack is two lines: export PAGER="open -a Calculator", which runs silently and is never surfaced for approval, followed by git branch, which the developer is asked about and approves.
Git looked up PAGER to work out how to show the branch list, found the attacker's command sitting in it, and ran that instead.
No memory corruption was involved and no permission was escalated; the developer was shown an accurate prompt, approved a command that was genuinely harmless, and got arbitrary code execution anyway, because the meaning of that command had been changed a minute earlier by something they were never shown.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Specific and internally consistent, but single-publisher and second-hand
The mechanism is unusually well-specified for a secondary account: a named CVE, a disclosure date, named built-ins, named environment variables, a reproducible two-line payload, a vendor severity rating and a fix version. Against that, every element reaches us through one vendor blog; Pillar's advisory, Cursor's advisory and Elttam's 2020 research are cited but not supplied, so nothing is independently corroborated inside the cluster.
Vendor remediation confirmed, deployment reach unknown
There are real, discrete downstream actions: a High rating, a patch in Cursor 2.3, and a documentation change reclassifying the allowlist as best-effort. What is absent is any measure of scale - no patch release date, no upgrade rates, no count of affected installs, no evidence of exploitation in the wild, and no data behind the assertion that most teams run such allowlists.
Sound core finding wrapped in horror-story and product framing
The technical core is neither overstated nor sensational - it is a narrow, patched, name-matching flaw, and the article says plainly that no memory corruption or privilege escalation was involved. The overstatement sits in the packaging: a 'Horror Stories' series frame, an argument that allowlists should be deprecated industry-wide, and a claim that Docker kits, organisation policy and audit logs cover the gap, all advanced without evidence and by a party selling the containment layer. The promised discussion of what Docker Sandboxes do not contain is absent from the supplied text.
Vendor content marketing where the flaw motivates the product
Docker publishes this as episode five of a recurring series whose stated purpose is to show 'how Docker Sandboxes contain agent execution at the boundary rather than at the command line'. The failure analysed is precisely the failure the advertised product claims to solve, and the recommended controls (isolation, kits, organisation policy, audit logs) map to Docker's commercial surface. The cited researcher, Pillar Security, also has a disclosure-visibility interest. This does not impugn the technical detail, which is specific and checkable, but it fully explains the framing and the absence of competing isolation options.
Believe the mechanism; discount the prescription
Confidence is held up by the falsifiable specificity of the technical account - CVE number, disclosure date, named built-ins, exact payload, fix version - and by the fact that the vendor documentation change corroborates the finding's seriousness from outside the researcher's own claim. It is held down by single-publisher sourcing, strong commercial incentive, missing primary documents, unquantified exposure, and an unevidenced remedy-coverage assertion.
build
The command injection fix Cursor writes still runs your code1 distinct publisher
security
Google's reference agent approved a $10,000 refund on a $149 order, on purpose1 distinct publisher
build
Before you spend quota on an agent skill, make it pass an eval harness1 distinct publisher
build
Waku 0.1.0 bets the product is the control plane, not another coding agent1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 18, 2026