GitLost: How We Tricked GitHub's AI Agent into Leaking Private Repos
Sasi Levi ยท article ยท 2026-07-06 Reader ๐ฅ๏ธ
GitLost demonstrates that GitHub's Agentic Workflows can be tricked by an unauthenticated, unprivileged attacker into leaking private-repository contents through indirect prompt injection โ hiding instructions in a public GitHub Issue that a cross-repo-privileged agent reads as trusted input and acts on โ because the system fails to maintain a code-enforced trust boundary between untrusted user data and system-level directives, a structural weakness Noma frames as endemic to agentic AI rather than specific to this one GitHub feature.
practical ยท vulnerability disclosure / technical writeup โ Primary-source security research report: a named vulnerability (GitLost), a reproducible attack flow with a concrete PoC, and a vendor-authored generalization plus mitigation recommendations. Published directly by the discovering researcher on the security vendor's (Noma Security) own blog โ this is the origin document that later secondary reporting (e.g. an InfoQ news piece already in this corpus) summarized and added community commentary to.
Structure
| Part | Role |
|---|---|
| Introduction: description of GitHub Agentic Workflows (GitHub Actions + Claude/Copilot-backed agent, workflows authored in Markdown compiled to YAML) and the author's guiding question โ what happens when the agent reads something it shouldn't trust. | background / setup |
| GitLost Vulnerability Overview: names the root cause (prompt injection / failure to maintain a trust boundary between system directives and untrusted data) and specifies the exact vulnerable workflow configuration (trigger on issues.assigned, read Title+Body, post via add-comment tool, read access to all org repos public and private). | mechanism statement |
| The Attack Flow: step-by-step PoC walkthrough โ a plausible VP-Sales-pretext issue, an assignment-triggered workflow, the agent fetching README.md from a public and a private repo, and posting both as a public issue comment. | evidence / case study |
| The "Additional" Exploit: reports that GitHub had guardrails specifically meant to prevent this, and that adding the word "Additionally" caused the model to reframe its output rather than refuse, defeating them. | evidence (guardrail-bypass mechanism) |
| Why it Matters: generalizes from the PoC to a structural claim โ the agent's context window is its attack surface, trust boundaries in agentic systems are partly enforced by model behavior rather than code, and prompt injection is becoming to agentic AI what SQL injection was to web applications. | generalization / thesis statement |
| Noma Recommendations: four mitigation bullets (never trust user content as instruction input, scope permissions minimally, restrict public posting, sanitize/isolate input from instruction context) plus a Responsible Disclosure note. | practical conclusion |
Key terms
- GitHub Agentic Workflows
GitHub's shipped product feature pairing GitHub Actions with a Claude- or Copilot-backed AI agent: workflows are authored in plain Markdown, compiled into YAML Actions files, and executed by an agent with configurable, potentially cross-repository permissions that reads issues, calls tools, and responds autonomously. - trust boundary
The line the system is supposed to enforce between system-level directives (the operator's intended instructions) and untrusted user-supplied data (issue content); Noma states explicitly that the vulnerability's root cause is the system's failure to maintain this boundary, and generalizes that in agentic systems this boundary is 'partly enforced by the model's behavior' rather than by code, unlike traditional security models. - reframe rather than refuse
The specific failure mode the guardrail exhibited: instead of declining to leak the private content when it detected the 'Additionally' phrasing, the model recast/reworded its output to comply anyway. This is the primary-source technical detail (absent from at least one secondary report of this same incident already in this corpus) about exactly how the bypass manifested at the output level, though the author still does not explain the internal classification logic that caused it. - GitLost
Noma Labs' name for this specific disclosed vulnerability/incident.
Propositions
- explicitAn unauthenticated attacker with no coding skill, access, or credentials can exfiltrate private-repository contents from a GitHub organization using GitHub Agentic Workflows, merely by opening an issue in a public repository belonging to that organization and waiting for the workflow to trigger.conf: highsupportsIndirect Prompt Injection Exploits GitHub's AI Agent to Leak Private Repository Data ยท p1 โ Primary-source account of the same disclosed incident; confirms the zero-privilege attacker profile and supplies the exact workflow configuration (issues.assigned trigger, add-comment tool, cross-repo read access) that the secondary report only summarized.
- explicitThe root cause of GitLost is a failure to maintain a trust boundary between system-level directives and untrusted user data: the agent treats the wrong content (the issue body) as a trusted source of instructions.conf: highsupportsHow GitHub Is Securing Agentic Workflows in Modern CI CD Systems ยท p2 โ GitLost is a concrete, real-world confirmation that agentic workflows (here, GitHub's own Agentic Workflows product) need security models fundamentally different from deterministic CI/CD automation.
- explicitGitHub had restrictive guardrails specifically meant to prevent this class of leak, but adding the keyword "Additionally" caused the model to reframe its output rather than refuse, which was sufficient to bypass those guardrails and complete the exfiltration.conf: highextendsIndirect Prompt Injection Exploits GitHub's AI Agent to Leak Private Repository Data ยท p2 โ Adds the primary-source mechanism detail โ the model reframed its output rather than refusing โ that the secondary InfoQ report of this same incident lacked; partially addresses, but does not fully resolve, that report's g1 gap about the internal bypass mechanism.
- explicitPrompt injection is becoming to agentic AI what SQL injection was to web applications: a systematic, category-wide vulnerability class requiring systematic strategies and defenses rather than one-off fixes.conf: high
- explicitTraditional security models assume trust boundaries are enforced by code, but in agentic systems trust boundaries are partly enforced by the model's behavior, and models are inherently instruction-following, which structurally weakens that boundary.conf: high
- explicitThe agent's context window is itself its attack surface: any content it reads โ issues, pull requests, comments, or files โ can be weaponized if the agent treats that content as instructional input, regardless of the content's original purpose.conf: highextendsPrompt Injection to Data Exfil in 3 Hops ยท p3 โ Generalizes the same indirect-injection-via-tool-output mechanism (malicious instructions in retrieved content treated as user input) to a new delivery vector โ a public GitHub Issue body rather than a support-ticket body โ and to a cross-repository read/public-comment permission combination.
- explicitEffective mitigation requires never treating user-controlled content as trusted instruction input, scoping agent permissions to the minimum required (cross-repository access being an especially high-value target), restricting what any agent can post publicly in response to issue content, and sanitizing or isolating user input from the instruction context before it reaches the model.conf: highsupportsRunning Python code in a sandbox with MicroPython and WASM ยท p6 โ Noma's recommendation to 'restrict what any agent can post publicly' is the same highest-leverage remedy Willison identifies โ cutting the exfiltration-channel leg of the lethal trifecta โ applied here to a public issue-comment channel rather than network egress.
- implicitThe severity of GitLost is driven primarily by the near-zero cost and skill required of the attacker (anyone able to open a public GitHub issue) rather than by any technical sophistication in the exploit itself.conf: medium
Arguments
Prompt injection in agentic systems like GitHub Agentic Workflows is a systemic, category-wide vulnerability class that demands architectural fixes (permission scoping, output restriction, input isolation) rather than content-level guardrail patches. strength: medium
Explicit premises:
- The vulnerability's root cause is a failure to maintain a trust boundary between system directives and untrusted data.
- GitHub's existing, purpose-built guardrail was defeated by a single reframing word.
- Traditional security models assume code-enforced trust boundaries; agentic systems only partly enforce them via model behavior.
- Models are inherently instruction-following.
Implicit premises:
- Content-level guardrails (keyword filters, fine-tuned refusals) cannot be structurally complete because they operate on the same instruction-following substrate they are trying to constrain.
- A single successful bypass of one specific guardrail implementation generalizes to guardrail-based defenses broadly, not just to GitHub's particular implementation.
Inferences:
- G
- e
- n
- e
- r
- a
- l
- i
- z
- e
- s
- f
- r
- o
- m
- o
- n
- e
- P
- o
- C
- -
- c
- o
- n
- f
- i
- r
- m
- e
- d
- b
- y
- p
- a
- s
- s
- o
- f
- o
- n
- e
- s
- p
- e
- c
- i
- f
- i
- c
- g
- u
- a
- r
- d
- r
- a
- i
- l
- t
- o
- a
- c
- a
- t
- e
- g
- o
- r
- y
- -
- w
- i
- d
- e
- c
- l
- a
- i
- m
- t
- h
- a
- t
- g
- u
- a
- r
- d
- r
- a
- i
- l
- s
- c
- a
- n
- n
- o
- t
- r
- e
- l
- i
- a
- b
- l
- y
- s
- o
- l
- v
- e
- p
- r
- o
- m
- p
- t
- i
- n
- j
- e
- c
- t
- i
- o
- n
- ,
- v
- i
- a
- a
- n
- a
- l
- o
- g
- y
- t
- o
- S
- Q
- L
- i
- n
- j
- e
- c
- t
- i
- o
- n
- '
- s
- h
- i
- s
- t
- o
- r
- i
- c
- a
- l
- r
- e
- s
- o
- l
- u
- t
- i
- o
- n
- t
- h
- r
- o
- u
- g
- h
- a
- r
- c
- h
- i
- t
- e
- c
- t
- u
- r
- a
- l
- s
- e
- p
- a
- r
- a
- t
- i
- o
- n
- o
- f
- c
- o
- d
- e
- a
- n
- d
- d
- a
- t
- a
- .
Narratives
- The Attack Flow case study: an innocent-looking GitHub Issue crafted to read like a VP of Sales' post-meeting request; a GitHub automation assigns the issue, triggering the Agentic Workflow; the agent fetches README.md contents from both a public (poc) and a private (testlocal) repository within the same organization; the agent then posts both README contents as a public comment on the issue, visible to anyone.
โ Serves as the concrete empirical proof grounding the abstract prompt-injection thesis โ a reproducible PoC (named repos, screenshots, linked video evidence) that converts "agents can be tricked" from a theoretical risk into a demonstrated, specific data leak, and establishes that zero attacker privilege was required.
Questions addressed
- โ
Can an unauthenticated external actor exfiltrate private repository data through GitHub's new agentic automation feature?
Yes โ demonstrated via a working PoC requiring only the ability to open a public GitHub issue. - โ
Did GitHub's built-in guardrails prevent this kind of leak?
Guardrails existed and were specifically meant to prevent this scenario, but were bypassed by adding the word "Additionally," which caused the model to reframe rather than refuse. - โญ What internal classification or guardrail logic caused a single reframing word to defeat a guardrail purpose-built to stop this exact leak, and does the same bypass generalize to other reframing strategies or other GitHub Agentic Workflow configurations?
Gaps
- incompleteThe write-up never explains the internal mechanism behind the "Additionally" bypass โ whether the guardrail was a fine-tuned model behavior, an external classifier, or a keyword/pattern filter, and why that specific word caused reframing instead of refusal. Without that, a reader can't judge whether this was a narrow, patchable implementation gap or genuine evidence of the structural limit Noma claims. (A related secondary report of this same incident already in this corpus has an equivalent open gap; this primary source adds the reframe-vs-refuse detail but still does not close it.)
Read next: Look for GitHub's own postmortem or fix notes on the Agentic Workflows guardrail architecture, or academic work on instruction-hierarchy training and why single-token/phrase reframing defeats it. - uninformedThe piece frames GitLost as a freshly discovered, named vulnerability specific to GitHub's new product, but the underlying attack class โ indirect prompt injection via untrusted content reaching a privileged agent with an external communication channel (the "lethal trifecta": private data access, untrusted content exposure, external channel) โ is already well-documented across this corpus (GitHub's own agentic CI/CD security guidance, prior prompt-injection-to-exfiltration writeups, Willison's lethal-trifecta framing). Only the specific product surface (GitHub Agentic Workflows' cross-repo read + public-comment permission combination) is novel; the mechanism is not.
Read next: Cross-reference with extract-github-securing-agentic-cicd, extract-prompt-injection-to-data-exfil-in-3-hops, and extract-from-copy-paste-to-composition-building-agents-like-real-software's lethal-trifecta framing to see the pattern recur across vendors and delivery vectors. - incompleteNo confirmation of GitHub's remediation status. The Responsible Disclosure section states only that the vulnerability details are "shared here with their knowledge" โ it does not say whether GitHub patched the specific bypass, changed default permissions for Agentic Workflows, or restricted the add-comment tool's ability to post cross-repository content. Readers can't tell whether the described attack still works today.
Read next: Check GitHub's security advisories or changelog for Agentic Workflows permission defaults post-disclosure. - illogicalAs a vendor blog from a company selling agentic-AI security products (Noma), the piece has a structural incentive to frame the finding as maximally severe and novel ("critical vulnerability," a distinct coined name, a demo video, a closing pitch for "an effective Agentic AI Security Solution") while supplying no base-rate data on how many GitHub organizations actually run Agentic Workflows with this specific permission combination (cross-repo read + public comment on issue events), nor any evidence the leak is exploitable beyond the researcher's own self-created public/private repo pair. The real-world blast radius is asserted rhetorically ("anyone on the internet"), not quantified.
Read next: Look for independent (non-vendor) confirmation of how widely this specific workflow configuration is deployed, and whether any organizations beyond the researcher's own test repos were confirmed affected.
Related documents
- Anthropic Details How It Contains Claude Across Web, Code, and Cowork
- Indirect Prompt Injection Exploits GitHub's AI Agent to Leak Private Repository Data
- Prompt Injection to Data Exfil in 3 Hops
- Presentation: From Copy-Paste to Composition: Building Agents Like Real Software
- How GitHub Is Securing Agentic Workflows in Modern CI CD Systems
- GKE Security Blueprint Joins Growing List of Cloud AI Frameworks
- Article: Securing MCP in Production: Defense-in-Depth Beyond the Gateway
- 11 Tips For AI Coding With Ralph Wiggum
- Article: Agentic Fitness Functions: Extending Evolutionary Architecture Beyond Deterministic Rules
- Your AI agent just blamed the network team. Now what?