Skip to main content
AI & Technology

Prompt Injection: The Vulnerability That Can't Be Patched

Prompt injection is not a bug waiting for a fix. It is what happens when instructions and data travel in the same channel — and three separate standards bodies have now said in writing that it may never be fully solved.

13 min read
Share:
Trays of lead printing type in a wooden case, every letter cast from the same metal regardless of what word it will form
Thomas Quine (CC BY 2.0, via Wikimedia Commons) — cropped

Most software vulnerabilities are bugs. Someone made a mistake, the mistake gets found, a patch ships, and the problem is over.

Prompt injection is not that. It is a consequence of how large language models work, and in December 2025 the UK's National Cyber Security Centre published a blog post whose title is the entire argument: Prompt injection is not SQL injection (it may be worse).

Their reasoning is one sentence long. In a database, you can force the engine to treat user input as data and never as a command. In a language model you cannot, because — in the NCSC's words — "there's no distinction made between 'data' or 'instructions'; there is only ever 'next token'."

That is why this article does not end with a fix. It ends with containment, which is what the people who study this professionally now recommend.

What Prompt Injection Actually Is

OWASP, which maintains the standard risk list for LLM applications, defines it plainly:

"A Prompt Injection Vulnerability occurs when user prompts alter the LLM's behavior or output in unintended ways."

It is listed as LLM01 — the number one risk in the OWASP Top 10 for LLM Applications, and it has held that position across editions.

The crucial part is that the model is not broken when this happens. It is doing exactly what it was built to do: read all the text in front of it and predict what should come next. It simply has no mechanism for deciding that one part of that text has authority and another part does not.

Direct and Indirect — The Second One Is the Dangerous One

OWASP splits the risk in two, and the distinction matters more than it first appears.

Direct injection is someone typing an instruction into the chat box that changes how the model behaves. This is the version most people have seen, and it is largely a content-moderation problem: the attacker and the victim are the same person.

Indirect injection is the model processing external content — a webpage, a document, an email, a calendar invite — that contains instructions. Here the attacker and the victim are different people. You ask your assistant to summarise your inbox. An email in that inbox contains text addressed not to you but to the model. The model reads it, because reading it is the job.

Comparison of direct prompt injection, where the user types a malicious instruction themselves, and indirect prompt injection, where instructions are hidden in external content such as an email or webpage that the model reads on the user's behalf
In direct injection the attacker is the user. In indirect injection the attacker is someone who got text in front of the model.

Indirect injection is the one that scales, because the attacker never needs access to your account. They only need to get text somewhere your assistant will read.

Why "It's Just SQL Injection for AI" Is Wrong

This comparison is everywhere, and it is the reason a lot of people assume a fix is coming. It is worth understanding precisely why it fails.

SQL injection was a catastrophe for roughly a decade, and then it largely stopped being one. The fix was parameterised queries: the query structure is sent to the database separately from the user's values. As the NCSC puts it, the input arrives in a form where "the database engine can never interpret it as an instruction."

That is not a filter. It is not a cleverer blocklist. It is an architectural separation — two channels, one for commands, one for data, enforced by the engine itself.

A language model has one channel. The system prompt, your question, the retrieved document and the email it just read all arrive as the same thing: tokens in a context window. There is no field to put the untrusted part in. The NCSC's summary of the mechanism is worth repeating because it is the whole problem:

"under the hood of an LLM, there's no distinction made between 'data' or 'instructions'; there is only ever 'next token'."

Diagram contrasting a database with two separate channels for query structure and user data, against a language model where the system prompt, user question and retrieved content all arrive as tokens in a single context window
The defence that solved SQL injection was separation. There is nothing to separate here.

There is a neat irony in the official record. When the first major real-world case was catalogued, the US National Vulnerability Database filed it under CWE-74 — the same injection family as SQL injection. The classification is right. The remedy does not transfer.

If you want the mechanics of why everything ends up in one place, that is the subject of what a context window is and why it matters.

What It Looked Like in Production

In June 2025 a vulnerability in Microsoft 365 Copilot was published as CVE-2025-32711, nicknamed EchoLeak and found by researchers at Aim Security. The NVD description is terse: "Ai command injection in M365 Copilot allows an unauthorized attacker to disclose information over a network."

The severity score is 9.3, critical. But the interesting part is the vector string, because it describes the attack without any marketing language attached:

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N

Read it piece by piece:

  • AV:N — attack vector is the network. Remote.
  • AC:L — attack complexity is low. No special conditions.
  • PR:N — privileges required: none. No account needed.
  • UI:N — user interaction: none. This is the zero-click part, stated by the scoring system rather than claimed by a vendor.
  • S:C — scope changed. The impact crosses a security boundary.
  • C:H — confidentiality impact high.

An attacker sends an email. The recipient does not have to open it, click anything, or reply. When Copilot later processes the mailbox on the user's behalf, it reads the attacker's instructions and acts on them. Microsoft fixed this one server-side and no customer action was required — but the fix was for that specific exfiltration path, not for the class of problem.

Three Bodies, One Conclusion

What makes this more than a researcher's opinion is that the organisations whose job is to write the official guidance have all landed in the same place, independently, in their own published words.

What the Standards Bodies Actually Say

Direct quotations from each organisation's own publication.

SourceOWASPPublicationLLM01, Top 10 for LLM Applications 2025What it saysIt is unclear if there are fool-proof methods of prevention for prompt injection
SourceNISTPublicationAI 100-2, Adversarial Machine LearningWhat it saysThere is no foolproof way as yet to protect AI from misdirection
SourceUK NCSCPublicationBlog, 8 December 2025What it saysThere is only ever next token — no distinction between data and instructions

None of them describes a fix in progress

NIST co-author Apostol Vassilev put the state of the art plainly: available defenses currently lack robust assurances that they fully mitigate the risks.

Three organisations, three methodologies, one conclusion — which is unusual, and worth weighting accordingly.

NIST went further than describing the gap. Its announcement warned readers to be "wary of any who claim otherwise" — and the NCSC gave the same advice in procurement terms: "Beware any that claim they can 'stop' prompt injection."

Why Agents Raise the Stakes

A chatbot that gets talked into saying something foolish is embarrassing. An agent that gets talked into doing something is a different category of problem.

The moment a model can send email, call an API, run code or move money, a successful injection stops being a content failure and becomes an action taken with your credentials. The NCSC's term for this is precise: an "inherently confusable deputy" — software acting on your authority that can be convinced to use it for someone else.

This is why the risk has grown sharply without the underlying vulnerability changing at all. The vulnerability was always there. What changed is what we connected it to. The mechanics of that connection are covered in how the agent loop works and in what the Model Context Protocol is — every tool you expose is a capability an injected instruction can reach.

What Actually Helps

Nobody serious claims these eliminate the problem. They reduce how often it succeeds and how much damage it does when it does, which is the honest goal.

OWASP's recommended measures, condensed:

  1. Constrain the model's behaviour with explicit instructions about its role, scope and limits.
  2. Define and validate output formats with deterministic code, not with the model's own judgement.
  3. Filter inputs and outputs, including semantic checks on whether a response is relevant and grounded.
  4. Apply least privilege — keep tool access and API tokens in application code rather than handing them to the model.
  5. Require human approval for high-risk actions.
  6. Separate and clearly label untrusted external content.
  7. Run adversarial testing regularly, treating the model as an untrusted user.
Four-step containment model for prompt injection: assume the model can be convinced, constrain what it can do with deterministic non-model safeguards, require human approval for consequential actions, and decide whether the remaining risk is acceptable
The goal is not prevention. It is making a successful injection survivable.

The NCSC adds the structural point that ties these together: priority belongs to "deterministic (non-LLM) safeguards that constrain the actions of the system." A filter that asks the model to detect manipulation is asking the confusable component to police itself. A permission boundary enforced in ordinary code is not.

They also warn specifically against deny-list filtering — blocking known bad phrasings. There are unlimited ways to phrase an instruction, and the attacker gets to iterate.

How to Read a Vendor's Security Claim

Four questions, drawn from what these organisations actually recommend:

  1. Do they say "stop" or "reduce"? Both the NCSC and NIST single this out. A vendor claiming prevention is either misinformed or hoping you are.
  2. Are the safeguards deterministic or model-based? Code that enforces a boundary behaves predictably. A model asked to spot manipulation can be manipulated.
  3. What can the system do at its most compromised? Assume the injection succeeded. List what it can reach. That list is your risk.
  4. Is a human in the loop for consequential actions, and is that genuine review or a dialog people click through?

The Bottom Line

Prompt injection is not a bug with a patch pending. It is the direct consequence of a design in which instructions and data are the same substance, and the organisations that write security guidance — OWASP, NIST and the NCSC — have each said in print that they do not know of a complete fix.

That does not make language models unusable. It makes them a component whose compromise you plan for rather than rule out, the way systems are designed around any component that can fail — and it puts this firmly among the security topics worth understanding properly rather than the ones worth panicking about.

The NCSC's closing position is the one worth carrying, because it is the part most coverage leaves out: if you have reduced the risk as far as your design allows and the remaining exposure is still more than the system can absorb, then "it may not be a good use case for LLMs." Deciding that in advance is cheaper than discovering it from a CVE.

Frequently Asked Questions

Can prompt injection be fixed?

No complete fix is known, and the three organisations that publish guidance on it all say so explicitly. OWASP states it is unclear whether fool-proof prevention methods exist. NIST says there is no foolproof way as yet to protect AI from misdirection. The NCSC explains why: a language model has no internal distinction between data and instructions. Individual exploits get patched, as the Copilot vulnerability was. The underlying class does not.

Is prompt injection the same as jailbreaking?

They overlap but are not identical. Jailbreaking usually means getting a model to ignore its own safety policies — the attacker and the user are the same person, and the harm is mostly to the model's operator. Prompt injection includes that, but the serious case is indirect injection, where instructions hidden in external content hijack a session belonging to someone who has no idea it happened.

Why can't the model just be told to ignore instructions in documents?

Because that instruction is itself text in the same context window, carrying no special authority. You are asking the model to weigh your sentence against the attacker's sentence, and nothing in its architecture guarantees yours wins. It helps at the margin, which is why OWASP lists it, but it is a preference rather than a boundary.

Does this mean I shouldn't use AI assistants?

No. It means the sensible question is what the assistant can reach. An assistant that drafts text and has no tools has a small blast radius. One that can send email, move money or execute code on your behalf needs real permission boundaries and human approval on consequential actions. Match the containment to what a successful injection would let it do.

How do I know if a product is actually protected?

You can't verify it fully from outside, but the language is a reliable filter. Both NIST and the NCSC advise treating claims of prevention as a warning sign — NIST says be wary of anyone claiming otherwise, the NCSC says beware anyone claiming they can "stop" it. Vendors who describe how they reduce risk, where their deterministic limits sit, and what an attacker could reach at worst are describing a real design.

Is this risk getting worse?

The vulnerability has not changed; the exposure has. Connecting models to tools, inboxes, browsers and payment systems turns a wrong answer into a wrong action taken with your credentials. NIST's 2025 edition of its adversarial machine learning taxonomy added coverage of agent security for exactly this reason. The direction of travel is more capability, which means more to contain.

Sources

CybersecurityArtificial Intelligence & LLMs#artificial intelligence#cybersecurity#large language models#ai agents
Share:
Rows of black server cabinets in a data center hall, with power conduit and cable trays running overhead

AI & TechnologyGuide

How Much Energy Does One AI Query Actually Use?

The number almost everyone quotes for an AI query was never a measurement — and it was never even about energy. Here is what the measured figures say, what they leave out, and which number actually matters.

Oct 28, 202613 min