Failure AtlasAI Security · Enterprise · 2025

EchoLeak: A Copilot That Could Not Tell Data From Instructions

A researcher sent a victim an email with nothing to click. Hidden text told Microsoft 365 Copilot to gather the company's secrets and send them out. Copilot obeyed.

Failure typeDeterministic (a reproducible zero-click exploit)
Where it failedProcess · Technology
FiledJun 2026
The missing control

Copilot treated the contents of an incoming email as if they were instructions from its user. There was no boundary between trusted commands and untrusted data. The control absent: an architecture that keeps external content as data only, never able to issue instructions or trigger exfiltration.

NIST RMFThreat-model the AI itself. Untrusted input reaching the model is an attack surface.
ISO 42001Security controls scoped to what the AI can read and where it is allowed to send things.
EU AI ActRobustness against manipulation is a stated obligation, not a nice-to-have.
STAMPThe hazard was a missing boundary. Data and instructions shared one channel.
PlainIf an email can tell your assistant what to do, anyone can write that email.

In 2025, researchers at Aim Labs disclosed a vulnerability in Microsoft 365 Copilot that they named EchoLeak, tracked as CVE-2025-32711. It is worth understanding because it was the first zero-click attack of its kind on an AI assistant, and because the flaw is not really a bug in the usual sense. It is the AI doing what it was built to do.

Copilot reads a user’s email, documents, and chats so it can answer questions about them. The attack was simply an email. It contained ordinary-looking text and, woven into it, instructions addressed not to the human but to the AI: gather sensitive information from the user’s files and messages, and send it to an outside address. The victim did not have to open an attachment, click a link, or even read the message. When Copilot later processed the mailbox to do its job, it read the hidden instructions and followed them.

Microsoft fixed it on their side, and there is no sign it was used against real victims. But the shape of it is the point.

Where it failed

The exploit is deterministic in the way that matters: crafted correctly, it works, the same way, every time. The deeper failure is architectural. Copilot had no reliable way to tell the difference between content it was supposed to reason about and instructions it was supposed to obey. To the model, the malicious email and a genuine request from the user arrived through the same door, in the same language, carrying the same weight.

The researchers called the underlying problem a scope violation: untrusted external content was able to act with the authority of the trusted user. The break was in the design. Data and instructions shared a single channel, and the system that connected the model to the company’s files and to the open internet had no boundary that said this input may be read but may never command.

When an assistant cannot tell a request from a document, any document it reads can become a set of instructions.

How it could have been caught

The defenses are about boundaries, not cleverness. Treat anything that arrives from outside as data that can be summarized but never as instructions to act on. Constrain what the assistant is allowed to send, and to whom, so that even a successful injection has nowhere to deliver the loot. And test the system the way an attacker would, by feeding it hostile input and watching what it does, rather than only testing the helpful path. The vulnerability was found by people who went looking for it. The lesson is that someone always will.

What it means for AI

Anyone wiring an AI into real company data and real tools, which is most enterprise AI now, inherits EchoLeak’s lesson. The promise of these assistants is exactly the danger: they read everything, they act on your behalf, and they take instructions in plain language. That combination means the input is the attack surface. A calendar invite, a document, a web page the agent visits, any of it can carry instructions the model cannot distinguish from yours.

This is the question to bring to any vendor or any internal build: what can untrusted input make this system do, and what stops it. The agentic version is worse, because an agent does not just leak, it acts. The boundary has to be designed in from the start. Keep external content as data the system can read but never obey, and limit what it can reach and where it can send. And assume that anything the model can read, an attacker can write, because sooner or later one will.


Back to the Atlas