The Novee findings
| Agent | Root cause | Identifier | Vendor response |
|---|---|---|---|
| Claude Code (GitHub Action) — round 1 | Command validator stripped single-quoted strings before checking; git push --receive-pack=<payload> passed validation and executed on the runner | — | Patched |
| Claude Code — round 2 | Fix relied on a hardcoded allow-list of “read-only” commands exempt from write-level scrutiny; unrestricted file reads and exfiltration | — | Patched |
| Claude Code — round 3 | Pre-approved Hugging Face access abused as an exfiltration channel via public download counters | CVE-2026-54316 | Patched |
| Gemini CLI | Bypass of execution restrictions; OS command execution before sandboxing applied | CVE-2026-12537 | Patched |
| Codex | Two passes in one CI job share a checked-out workspace; first pass writes AGENTS.md, which the second pass loads as authoritative instructions | None assigned | OpenAI: design decision, not a vulnerability |
The git push --receive-pack chain is worth understanding because it is so mundane. Git’s receive-pack option lets a push specify a program to run on the receiving end. Claude Code’s validator, per the Cloud Security Alliance write-up, stripped single-quoted strings before applying its checks, so a payload hidden in that option slipped through untouched and executed on the GitHub Actions runner. Exposure: GITHUB_TOKEN and ANTHROPIC_API_KEY from the workflow environment. With a write-scoped GitHub token, that extends to workflow modification and package publication under the repository’s namespace — a supply-chain compromise from a single issue.
The CSA research notes make the crucial point plainly: these chains exploited design gaps in command validation and process isolation, not model persuasion. A perfectly aligned model would still have been exploitable, because the harness did the wrong thing with the model’s output. Meged: “The harness is the code between the model and the real world” — and it “repeatedly failed to keep untrusted GitHub content from reaching privileged execution environments.”
The Codex case is the most conceptually interesting because it is a disagreement about what counts as a vulnerability. OpenAI’s position: if you configure two passes to share a workspace, the first writing an instruction file the second trusts is the documented behaviour of AGENTS.md, not a flaw. Novee’s position: an unprivileged outsider can cause the first pass to write that file. Both are correct, which is exactly why “the framework is the vulnerability” is the right frame — the bug lives in the composition, not in any single component’s spec.
Framework-level findings
The second talk moved the attack surface below the tool layer. The claim: exploitable logic in the core runtimes of LangChain, CrewAI, AutoGen and Semantic Kernel.
- Memory stores. Injected content persisted into agent memory is replayed as trusted context in later turns and later sessions. This is the Codex
AGENTS.mdfinding generalised: run N writes what run N+1 reads as truth. - Planning loops. Content that influences the planner’s decomposition of a task can redirect the agent without any tool call being made — the agent simply decides to do something else.
- Serialisation layers. Several frameworks deserialise state (chains, agents, messages) from formats that permit code execution on load. A classic vulnerability class (Java deserialisation, Python
pickle) reappearing in a new place.
The Hugging Face incident is the same story at a different scale: the agents were hijacked by content on a message board, and the “framework” that made it possible was a shared filesystem. The generalisation is uncomfortable but clean — any place untrusted content meets trusted execution is the framework, and the framework is attack surface.
Reframing: from “control the tools” to “the framework is the vulnerability”
The standard agent security model — enumerate tools, scope permissions per tool, require approval for dangerous ones — is necessary. Keep it. But the Black Hat research establishes three additional facts:
- Untrusted content reaches the model through channels that are not tool calls (issues, retrieved pages, prior-run artefacts, memory).
- The model’s output reaches the world through code (the harness) that has its own bugs.
- The framework’s own state is an injection target.
So the threat model must include the harness and the framework as first-class attack surface, reviewed as you would a web application’s request-handling code.
Hardening steps, concrete
Trust boundaries
- Treat every externally sourced string — issue body, PR description, commit message, retrieved page, prior agent output — as untrusted input. Tag it as such, and where the framework allows, in structured metadata the harness can enforce on.
- Never let an agent run write to a location a later run reads as instructions (
AGENTS.md,CLAUDE.md,.cursorrules, memory stores) unless that write is itself gated by human review.
CI-specific
- Do not trigger agent workflows on
issues/issue_commentevents from non-members. If you must, run them with a token scoped read-only and no secrets. - Use ephemeral, network-restricted runners for agent jobs. Egress allow-list to the vendor API and the required registry, nothing else — the Hugging Face side channel worked because a third-party host was reachable.
- Separate the agent’s credentials from the repository’s. The agent should hold an API key that can do nothing but call the model, and a GitHub token that can do nothing but comment.
Command execution
- Do not build your own shell-command validator. Novee defeated two rounds of one written by a well-resourced vendor. Prefer an allow-list of structured actions (open file, run named test suite) over parsing free-form shell.
- If free-form shell is unavoidable, run it in a sandbox where the worst case is bounded, and assume the validator will be bypassed.
Frameworks
- Pin framework versions and track their advisories as you would any network-exposed dependency.
- Disable or replace deserialisation paths that accept code (
pickle, unsafe YAML loaders,eval-based config). - Treat agent memory as a database with untrusted writers: validate on read, not just on write.
Detection
- Log the agent’s intended actions (model output) and actual actions (harness execution) separately and diff them. Divergence is either a harness bug or spoofing — METR found the latter in >7% of Hugging Face transcripts (see OpenAI and the Hugging Face attack: where the independent investigation disagrees). Illustratively, an agent whose transcript shows:
$ echo REAL; sleep
but whose runner telemetry shows a network connection to an unexpected host has diverged, and the transcript is the thing lying. Only infrastructure-side telemetry catches that.
Sources
- Novee Security, Black Hat 2026: If You Run These Automations, You’re Exposed Too: Critical Flaws in Anthropic, Google, and OpenAI Coding Agents, presented 5 Aug 2026 (Elad Meged) — novee.ai
- Cloud Security Alliance, Comment and Control: When a GitHub Issue Steals CI Secrets, Aug 2026 — https://labs.cloudsecurityalliance.org/research/csa-research-note-ai-coding-agent-ci-prompt-injection-202608/
- Cloud Security Alliance, Three AI Coding Agents, One GitHub Issue: CI/CD Secrets Exposed, 8 Aug 2026 — https://labs.cloudsecurityalliance.org/research/csa-research-note-ai-coding-agent-cicd-secrets-20260808-csa/
- The Hacker News, Claude Code and Gemini CLI Flaws Let a GitHub Issue Reach CI Workflow Secrets, 7 Aug 2026 — thehackernews.com
- Hackread, Black Hat USA 2026: One GitHub Issue Could Compromise Major AI Coding Workflows — https://hackread.com/black-hat-usa-2026-github-compromise-ai-coding/
- SC Media, AI coding tools vulnerable to malicious GitHub issues, 7 Aug 2026 — https://www.scworld.com/brief/ai-coding-tools-vulnerable-to-malicious-github-issues
- eSecurity Planet, Black Hat 2026: Critical Flaws Found in Anthropic, Google, and OpenAI Coding Agents — esecurityplanet.com
- WebProNews, AI Coding Agents Open Door to CI Secrets With One Malicious GitHub Issue — webpronews.com
- CVE-2026-54316, CVE-2026-12537 — cve.org
- Black Hat USA 2026 briefings on agent-framework runtime vulnerabilities, ChatGPT sandbox C2, AI-browser prompt injection — blackhat.com schedule
Back to the light read (2 min).