Conventional software keeps instructions and data apart. Code is code, input is input, and a document cannot issue an order. A language model does not have that boundary. Everything it receives arrives as text, and text that looks like an instruction can be followed like one.
That is prompt injection, and OWASP ranks it first in its 2025 Top 10 for LLM applications, as LLM01.
The case that made it concrete
On 12 June 2025 The Hacker News reported a "zero-click" vulnerability that allowed attackers to “exfiltrate sensitive data from Microsoft 365 (M365) Copilot's context sans any user interaction”. It was found by Aim Security, given the identifier CVE-2025-32711, and scored 9.3.
The academic write-up describes it in one line: “EchoLeak (CVE-2025-32711), a zero-click prompt injection vulnerability in Microsoft 365 Copilot that enabled remote, unauthenticated data exfiltration via a single crafted email.”
Read what "zero-click" means here. The victim did not open an attachment or approve anything. The assistant read the mail as part of its ordinary work, and the instruction hidden in it was executed against the data the assistant could already reach.
Microsoft fixed it server-side in the June 2025 Patch Tuesday, and stated that “There is no evidence that the shortcoming was exploited maliciously in the wild.” The response was fast and the outcome was good. The lesson is not that the product was weak; it is that the attack surface exists wherever an assistant reads untrusted text and can reach trusted data.
The dangerous combination is not a clever model. It is a model that reads what strangers send and can reach what only staff should see.
Why retrieval raises the stakes
Retrieval-augmented generation exists to feed the model company documents. That is the feature. It also means every indexed document is model input, and an indexed document can be written by someone outside the company: a supplier's invoice, an emailed contract draft, a CV.
OWASP's list covers the consequences alongside injection itself: sensitive information disclosure at LLM02, excessive agency at LLM06, system prompt leakage at LLM07, and vector and embedding weaknesses at LLM08.
On-premise does not solve this
This has to be said plainly, because the opposite is implied constantly in this market. Local inference protects the data boundary. It stops a document being sent to an external service in normal operation. It does not stop a malicious document from steering the model.
A local model that can read the shared drive and send email has the same structural problem as a hosted one. The perimeter moved; the confusion between instruction and content did not.
What local deployment does change is the exfiltration path. An injected instruction still needs a way out, and EchoLeak's way out was an outbound fetch. A system with no outbound connectivity gives that instruction fewer places to send anything.
What actually reduces the risk
- Keep retrieved content and instructions structurally separate, and treat every document as untrusted
- Give the model the narrowest tool permissions that still do the job
- Enforce the user's own access rights at retrieval time, not after generation
- Validate outputs before another system acts on them
- Constrain where the system may connect, so a successful injection has nowhere to send data
- Test adversarially, with documents written to attack your own assistant
The single rule under all of them: never give an AI system more authority than the task requires. A model that reads documents is one risk. A model that reads documents, sends mail, queries the finance system and runs code is a different category of problem.
With Bastion
What Bastion changes
Bastion is a private AI system delivered as one sealed appliance that runs inside your building. One monthly fee covers the hardware, the model, the hardened operating system and support, and nothing your team types leaves the building.
Bastion does not claim immunity from prompt injection, because no appliance can. What it removes is the easy exit: the unit answers without an outbound internet connection, so an injected instruction has no external endpoint to call.
The permissions, the retrieval rules and the tool access above that are still design decisions, and they are the ones worth spending time on.
Questions this article answers
- What is a prompt injection attack?
- Text that a model reads as an instruction instead of as content. Because a language model receives everything as text, a document, a web page or an email can carry an order the model then follows. OWASP ranks it first in its 2025 Top 10 for LLM applications, as LLM01.
- What was EchoLeak, CVE-2025-32711?
- A zero-click prompt injection in Microsoft 365 Copilot, disclosed by Aim Security in June 2025 and scored 9.3. One crafted email made the assistant exfiltrate data with no user interaction. Microsoft fixed it in the June 2025 Patch Tuesday and said there was no evidence of exploitation in the wild.
- Does running AI on-premise stop prompt injection?
- No. Local inference protects the data boundary, not the boundary between instruction and content. What it removes is the easy exit: an injected instruction still needs somewhere to send data, and a system with no outbound connection gives it nowhere to send it.
On the record
- 1
The Hacker News
Zero-Click AI Vulnerability Exposes Microsoft 365 Copilot Data Without User Interactionread 2026-09-22
- 2
- 3
Read next
- RAG security: what changes when the AI can read your filesThe pipeline, stage by stage, and the security question at each one. Why document-level permissions have to be enforced at retrieval time, why the index is a second copy of your data, and the seven questions to answer before a RAG system goes live.Read the article
- The OWASP Top 10 for LLM applications, read as a buyer's checklistThe ten risks in plain business language, which of them an on-premise deployment touches, which it does not, and the minimum an organisation of thirty people should actually do about them.Read the article