logo

Prompt injection is not science fiction

September 15, 2026

Prompt injection is the number one risk for enterprise applications using language models, according to OWASP, which has maintained its top spot in its Top 10 list for the second year running. It's not a theoretical scenario or a laboratory problem: it's a direct consequence of how these systems work.

A language model does not distinguish between the instructions given to it by its developer and the text it processes. Everything arrives as words. If a document the system reads contains something in the form of an instruction, there is a possibility that it will treat it as such.

The dangerous way is the indirect one

The known version —a user writing "ignore your instructions"— is the least worrying, because the attacker has to be present and their permissions are those of any other user.

The version that matters in a business environment is the indirect injectionThe malicious text is not written by the user; it comes within the content that the system processes as part of its normal work.

The usual vectors:

  • A email from a supplier that the assistant reads to extract order data.
  • A PDF —an invoice, a resume, a contract— that the system summarizes.
  • A Web page that the agent consults to complete information.
  • A support ticket written by a client.
  • A form field which is stored and then processed.

In every case, the process is the same: someone external writes text that your system will read and that can influence what it does. And in every case, the potential damage is exactly equal to the scope of the permissions you've granted them.

Why can't it be solved with a filter?

The intuitive answer is to filter out suspicious instructions at the input. This doesn't work reliably, for three reasons:

Language has infinite forms. Any list of prohibited patterns can be rephrased. The instruction can be in another language, paraphrased, or broken down into several sentences.

It may be hidden. Blank text on a blank page in a PDF, metadata, content that the user doesn't see but the system does read.

The filter cannot know the intention. A legitimate email might contain the phrase "please forward this to accounting." The system has no robust way of deciding whether that's an instruction for itself or information for a person.

The operational conclusion is both uncomfortable and clarifying: We have to assume that the injection will happen and design so that it doesn't matter.

The design that contains the problem

Principle

What does it involve?

What it prevents

Minimum permit

The system only accesses what its specific task requires

That an injected instruction reaches external data

Channel separation

External content is never treated as a system instruction

Let a PDF redefine behavior

Whitelist of shares

Only explicitly listed operations are permitted

That something unforeseen happens

Human validation in the irreversible

Payments, external communications, production changes

That the damage materializes without review

Full registration

It records what was entered and what was executed.

That the incident is irreparable

These five are architectural decisions, not tool configurations. And all five cost little if made before building, which is why this article belongs more to a design conversation than a security one.

OWASP adds two related risks to this table that should be mentioned: LLM02, disclosure of sensitive information, and LLM06, excess capacity. The three present the same problem viewed from different angles: what the system can read, what it can do, and who can influence it. We have developed this in Granting permissions to an agent is a risky decision

The case worth keeping in mind

Imagine an assistant that processes invoices arriving in the administration email: it extracts the amount, supplier, and account number, and prepares the payment.

A fraudulent supplier sends an invoice that includes a small instruction at the bottom to the system to use a different account number. If the assistant has permission to prepare payments and no one verifies the account number against the supplier's record, the fraud is executed with the efficiency of an automated system.

Note that in this example the model hasn't failed: it has done exactly what a text asked it to. The flaw lies in the design, which allowed an external text to determine a critical piece of information without verifying it against the source of truth.

Hence the rule we repeat in every project: The model drafts and interprets; the system decides the facts.. Amounts, accounts, statuses, and permissions are checked against the source system; they are never accepted from processed content.

What to ask a supplier

When someone presents an AI-powered solution that reads external content, three questions separate the serious from the improvised:

  1. What happens if the document being processed contains instructions directed to the system? A good response describes restraint, not denial of the problem.
  2. What can the system do in the worst-case scenario? There must be a closed list of shares and a limit on the amount or volume.
  3. Could you reconstruct an incident from a month ago? If there is no record of entries and actions, there is no way to investigate anything.

A provider who responds "our model doesn't fall into that trap" hasn't grasped the risk. Containment doesn't depend on the quality of the model, it depends on the scope that has been granted to it.

Frequently Asked Questions

What is prompt injection?

It is the manipulation of a language model's behavior through text that the model processes as if it were instructions. OWASP ranks it as the top risk in its Top 10 for LLM applications by 2025, because the model does not structurally distinguish between the developer's instructions and the content it analyzes.

This is the relevant variant in business environments: the instructions are not written by the user, but come within the content that the system routinely processes — a supplier email, a PDF, a web page, a support ticket, or a form field.

Not reliably. Language allows for infinite reformulations, instructions can be hidden in invisible text or metadata, and a filter cannot determine intent. The correct approach is to assume it will happen and limit the potential harm through permissions and controls.

With five design principles: minimum permission per task, separation between external content and system instructions, whitelist of allowed actions, mandatory human validation in irreversible operations, and complete logging of inputs and actions performed.

Yes, if the system processes them and has broad permissions. The typical example is an invoice that includes an instruction to change the payment account number. The problem isn't with the model itself, but with the design that allows external text to determine critical data without verifying it against the source.

What happens if the processed content includes instructions directed at the system? What can the system do in the worst-case scenario? And could an incident that occurred a month ago be reconstructed? An answer that denies the possibility of an attack indicates a lack of awareness of the risk.

Does your AI system read content written by third parties? We review scope, permissions, channel separation, and traceability, and tell you what the worst possible scenario is with the current design. Request a review →

Prompt injection attack against an enterprise Artificial Intelligence system
Development using vibe coding and code generated with Artificial Intelligence
Composable architecture for businesses with modular applications, APIs, and AI-powered systems integration.