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)
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.
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."
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).| Level | PIT Code | Technique |
|---|---|---|
| 1 Beginner | PIT-N-06 | Indirect Input — "Additionally" embedding |
| 2 Novice | PIT-T-06 | End Sequences — markup injection to break context |
| 3 Intermediate | PIT-T-06+ | Field asymmetry — markup in title bypasses body sanitization |
| 4 Advanced | deliberate-misspellings | Homoglyph substitution + true misspellings of repo names |
| 5 Elite | PIT-T-03+ | Misspellings + binary/base64/URL encoding layered |
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-secrets → int3rnal-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.
Research these techniques in the Arcanum PI Taxonomy — a structured classification system for prompt injection attacks used by AI red teamers and penetration testers.