← Back to GitLost Lab

GitLost — GitHub Agentic Workflows Prompt Injection

PIT-N-06 Indirect Input PIT-I-19 Sensitive Data Exfiltration PIT-I-20 Unauthorized Action Execution PIT-T-06 End Sequences PIT-T-03 Binary Streams deliberate-misspellings (NEW)

What Happened

In July 2026, security researchers at Noma Security disclosed a vulnerability in GitHub's Agentic Workflows feature — an AI-powered preview capability that uses large language models (Claude or Copilot) to automatically triage, analyze, and respond to issues in GitHub repositories.

An unauthenticated attacker could post a crafted but innocent-looking issue in a public repository. The issue body contained hidden prompt injection instructions, often introduced with a natural connecting word like "Additionally" — making the malicious instruction appear to be a legitimate part of a bug report or feature request.

When the Agentic Workflow AI read the issue body, it followed the injected instructions. The agent called its read_repo tool on private repositories within the same organization and posted the private repo contents as a public comment on the issue — leaking sensitive data to anyone who could view the public issue.

Impact

Why It Matters

This vulnerability demonstrates the confused deputy problem in AI agents. The agent has legitimate cross-repo access — that is by design, so it can help with issues that span multiple repositories. The vulnerability is that the agent cannot distinguish "content the user wrote about their problem" from "instructions the agent should follow."

This ambiguity is the root cause of indirect prompt injection. The injection does not arrive through a direct chat prompt. It arrives as data — text in an issue body — that the AI processes alongside its instructions. The AI has no way to know which parts of the data are "content to analyze" and which parts are "commands to execute."

Taxonomy Classification

PIT-N-06Indirect Input
The GitHub issue body is the injection surface — public content that the agentic workflow reads as data. Alias: Indirect Prompt Injection (Greshake et al.), XPIA (Microsoft).
PIT-I-19Sensitive Data Exfiltration
The agent reads private repo files and posts contents as a public comment. Alias: Sensitive Information Disclosure (OWASP LLM02:2025).
PIT-I-20Unauthorized Action Execution
The injection causes the agent to call read_repo on a private repo — a confused-deputy abuse of the agent's standing privileges. Alias: Excessive Agency (OWASP LLM06:2025), AI Agent Tool Invocation (MITRE ATLAS AML.T0053).
PIT-T-06End Sequences
Used in levels 2+ to close the issue content boundary and inject separate instructions. Using HTML/XML closers to end context, injecting synthetic role markers.
PIT-T-03Binary Streams
Used in level 5 — encoded payloads (URL encoding, base64, binary) that bypass surface-level filters but get decoded during agent processing.
PIT-I-27Cross-Tenant Data Leakage (related)
The attacker accesses data from a context they do not have direct access to — the private repos — by exploiting the agent's access. Same concept, different boundary.

Level-by-Level Technique Mapping

LevelPIT CodeTechnique
1 BeginnerPIT-N-06Indirect Input — "Additionally" embedding
2 NovicePIT-T-06End Sequences — markup injection to break context
3 IntermediatePIT-T-06+Field asymmetry — markup in title bypasses body sanitization
4 Advanceddeliberate-misspellingsHomoglyph substitution + true misspellings of repo names
5 ElitePIT-T-03+Misspellings + binary/base64/URL encoding layered

Deliberate Misspellings as a Filter-Bypass Technique

Levels 4 and 5 of this lab teach a technique that has been a fixture of adversarial input for decades and is now emerging as a real-world LLM attack vector: deliberate misspellings.

The pattern is simple. A keyword filter (the "denied terms" list) is looking for the exact string internal-secrets. An attacker who types intrnl secrts or int3rnal-s3cr3ts produces a string the filter does not match — but the LLM reading the input still semantically recognizes it as the repo name. The filter is brittle; the LLM is fuzzy. That asymmetry is the bypass.

This shows up in many places:

Two distinct sub-techniques:

Homoglyph substitution. Replace a letter with a visually similar character from a different alphabet or a digit/letter that looks like the original. Examples: internal-secretsint3rnal-s3cr3ts (3→e), arch1tecture-docs (1→l, but here standing in for "i"), fnanclals (1→l, 4→a, 1→l). The filter checks the surface text — 3 is not the same character as e, so it doesn't match the denied term. The LLM normalizes homoglyphs as part of its reading and recognizes the underlying word.

True misspellings (typos). Misspell the word in ways a human might accidentally do, but the attacker is doing it on purpose. Examples: intrnl secrts (vowels dropped), archtcture-dcs (missing letters), inrternal secrets (doubled letter), intenral secrets (transposed), intrnul secruts (vowel swap). The filter checks the surface text — none of these are the exact denied term. The LLM has been trained on far more misspelled text than any filter has been calibrated against, so it recognizes the underlying word.

The defense, in real systems, is to apply normalization to the input before filtering — homoglyph substitution, vowel dropping, repeat collapsing, and edit-distance matching. But this has a cost: filters become more permissive and may produce false positives. The right balance depends on what the LLM downstream will actually recognize. In practice, the LLM is the source of truth, and the filter should match what the LLM will see, not what the user typed.

Levels 4 and 5 of this lab let you practice both homoglyph substitution and true misspellings. The lab's misspelling detector uses Levenshtein-2 with homoglyph normalization and vowel/hyphen dropping — a deliberately generous matcher, because the real LLM downstream is even more generous. Try intrnl secrts at L4 and see.

Defenses

Cross-Reference

Research these techniques in the Arcanum PI Taxonomy — a structured classification system for prompt injection attacks used by AI red teamers and penetration testers.

This is a simulated training environment. No real GitHub repositories, organizations, or data were involved. The "GitHut" organization, repositories, and agentic workflow are fictional educational simulations. No real accounts, data, or services are affected.