Coding-agent CI harnesses broke on the same trust boundary three different ways, and the two findings that matter most carry no CVE at all
A validator that strips quoted text before inspecting it, and an agent instruction file rewritten between two passes of one shared checkout
Defender actions
- Audit any CI workflow where two or more agent passes share a single checkout: the Codex fix was to split the passes into separate jobs each with its own checkout, and that change has to be made in your own pipelines because no vendor patch reaches them.
Analysis
Three AI coding-agent CI harnesses were broken in different ways by the same underlying question: what, inside an automated pipeline, is the agent allowed to treat as authoritative? Novee Security tested each against the vendor's own public repository in default configuration (Novee Security, 2026-08-05).
The Claude Code Action work is best read as three successive rounds of patch-and-bypass, and only the last of them carries an identifier. Round one turned on an ordering mistake in defensive code: the command-injection validation pipeline strips single-quoted content before inspecting a command, a sensible-looking measure to avoid false positives on shell metacharacters inside string literals. That means an injected payload placed inside single quotes is examined only after the interesting part has been removed. A validator that sanitises its input before deciding whether the input is dangerous is checking something other than what will execute. Round two was an asymmetry in the allowlist itself, where commands classed as read-only were exempted from path checking, so a read-only utility could be pointed at any file on the runner. Neither round carries a CVE. The identifier belongs to the third round, and Anthropic's own advisory states what it covers: "Because the hostname huggingface.co was pre-approved as a bare hostname for the WebFetch tool, any path on that domain (including attacker-controlled model repositories) was auto-approved without a permission prompt or being subject to --allowedTools restrictions." The advisory records the affected range as 0.2.54 up to 2.1.163 and the fix in 2.1.163 (Anthropic, 2026-06-13). Google's advisory for the Gemini CLI findings, which OSV aliases to CVE-2026-12537 (OSV, 2026-04-24), describes two hardening changes rather than the researchers' chain: headless mode no longer trusts the workspace folder automatically, because untrusted contents "could lead to remote code execution via malicious environment variables in the local .gemini/ directory", and "the Gemini CLI policy engine now evaluates tool allowlisting under --yolo mode", which it previously ignored. It rates the issue Critical, CVSS 10.0, and fixes it in @google/gemini-cli 0.39.1 and run-gemini-cli 0.1.22 (Google, 2026-04-24).
Both of those were patched weeks to months before the write-up appeared, so for those two vendors the action is a version check, not an incident. Their mechanics are still worth carrying, because the lesson generalises to anyone building command allowlists rather than merely consuming these products. In the Gemini CLI finding, where the environment was sanitised only for a child process, the write-up's phrasing of the step that reached the runner's secrets is worth quoting for how narrow the distinction is: "cat /proc/$PPID/environ reads the parent, not self, and pulls from the process that still holds every single thing the isolation was built to keep away." (Novee Security, 2026-08-05) Novee chains that read with a shell allowlist that was never enforced at runtime; Google's advisory covers the allowlist and folder trust but does not describe the parent-process read.
The third finding is the one that is genuinely current, and it has no CVE because, as the researchers observe, nobody files one for newly documented behaviour. In an OpenAI Codex workflow, two agent passes ran over a single shared checkout, and the agent's own default instruction file sat in that checkout outside the protected-metadata set. That file "is loaded from disk on every single invocation and injected as instructions the model treats as authoritative", so a first pass induced to modify it dictates what the second pass believes it has been told to do. The fix was structural rather than a patch: "3 Days after our report they fixed it and the two passes on openai/codex were split into separate jobs, each with its own checkout." That change landed in the vendor's own repository. It does not propagate to anyone else's pipeline, because the flaw is not in a shipped component: it is in a workflow shape.
Cited evidence
It is loaded from disk on every single invocation and injected as instructions the model treats as authoritative
3 Days after our report they fixed it and the two passes on openai/codex were split into separate jobs, each with its own checkout
Because the hostname huggingface.co was pre-approved as a bare hostname for the WebFetch tool, any path on that domain (including attacker-controlled model repositories) was auto-approved without a permission prompt or being subject to --allowedTools restrictions.
If used with untrusted directory contents, this could lead to remote code execution via malicious environment variables in the local .gemini/ directory.
the Gemini CLI policy engine now evaluates tool allowlisting under --yolo mode
The gate only runs at registration; nothing enforces the restriction once the tool is live.
Updates3
Google rates the flaw CVSS 10.0, the maximum score, in its own advisory, with a network-reachable, no-privilege, no-interaction CVSS 3.1 vector, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H, and the fixes in @google/gemini-cli 0.39.1 and run-gemini-cli 0.1.22 (Google, 2026-04-24). OSV maps that advisory to CVE-2026-12537 (OSV, 2026-04-24). Triage should follow that zero-click, unauthenticated rating.
Google's own advisory, GHSA-wpqr-6v78-jr5g, rates the flaw Critical, CVSS 10.0, with a network-reachable, no-privilege, no-interaction vector, and fixes it in @google/gemini-cli 0.39.1 and run-gemini-cli 0.1.22 (Google, 2026-04-24). OSV maps that advisory to CVE-2026-12537 (OSV, 2026-04-24). Google's advisory carries only that network-reachable 10.0 rating, not the 7.8 rating with a local, user-interaction vector shown earlier, so triage follows Google's rating.
Google's advisory, which OSV aliases to CVE-2026-12537 (OSV, 2026-04-24), covers two hardening changes: headless mode no longer trusts the workspace folder automatically, because untrusted contents "could lead to remote code execution via malicious environment variables in the local .gemini/ directory", and "the Gemini CLI policy engine now evaluates tool allowlisting under --yolo mode" (Google, 2026-04-24). It does not describe the read of the parent process's environment that the researchers used to reach the runner's secrets (Novee Security, 2026-08-05).
Sources4
Revision history
- Published 2026-08-10T0411Z-intel
- Correction 2026-08-28T0409Z-intel
CVE-2026-12537 (Google Gemini CLI) carries two sharply divergent official severity ratings: the assigning CNA rates it CVSS 4.0 10.0 CRITICAL with no user interaction and no authentication required, while NVD's own CVSS 3.1 assessment is 7.8 with a local vector and user interaction required. Both ratings are now recorded here; the CNA's unauthenticated zero-click rating is the more severe and should drive triage.
Changed: cves body
- Correction 2026-09-30T0639Z-audit
The severity of CVE-2026-12537 came from the NVD record rather than a cited advisory, and showed a 7.8 rating with a local, user-interaction vector beside the 10.0. The rating, vector and fixed versions now cite Google's own advisory, which gives only the network-reachable 10.0, with OSV kept for the CVE alias. The 7.8 figure is removed from the text and the structured score, and a self-reference to other coverage is removed from the text.
Changed: cves body sourcing_note sources
- Improvement 2026-10-21T0800Z-audit
CVE-2026-12537 is now described by what Google's advisory covers: headless mode trusting the workspace folder (remote code execution through environment variables in the local .gemini/ directory) and the tool allowlist ignored under yolo mode. The advisory does not describe the researchers' read of the parent process's environment.
Changed: actions body evidence summary title
AI-generated · no human review · this permalink is the shareable record for the finding · verify operationally critical claims against the linked primary source.