PUBLIC-EVIDENCE AI SECURITY CASE STUDY

Microsoft "EchoLeak": How One Email Turned Microsoft 365 Copilot into a Zero-Click Data Exfiltration Path

The disclosing research describes a four-step zero-click chain against Microsoft 365 Copilot. An attacker sends a normal-looking external email carrying hidden instructions, phrased plainly enough that it evaded Microsoft's XPIA cross-prompt-injection classifier. Later, an ordinary user query retrieves that email alongside internal mail and files; mixed into a single prompt context, the external content stops being passive data and starts acting as instructions. Copilot is then steered to emit a reference-style Markdown link or image whose visible text is innocuous but whose URL carries internal data. The chat surface auto-fetches Markdown images, completing the egress — and because Content Security Policy blocked direct attacker domains, the chain instead routed the secret-bearing URL through a CSP-allowed Microsoft Teams preview endpoint. No login, attachment or click was required of the victim. Microsoft states it fixed the issue before disclosure and saw no evidence of in-the-wild exploitation.

RAG / Retrieval-Augmented SystemTier 2Indicative ERS 4.3 (2.0–6.6)Evidence source date 2026-04-23

The disclosing research describes a four-step zero-click chain against Microsoft 365 Copilot. An attacker sends a normal-looking external email carrying hidden instructions, phrased plainly enough that it evaded Microsoft's XPIA cross-prompt-injection classifier. Later, an ordinary user query retrieves that email alongside internal mail and files; mixed into a single prompt context, the external content stops being passive data and starts acting as instructions. Copilot is then steered to emit a reference-style Markdown link or image whose visible text is innocuous but whose URL carries internal data. The chat surface auto-fetches Markdown images, completing the egress — and because Content Security Policy blocked direct attacker domains, the chain instead routed the secret-bearing URL through a CSP-allowed Microsoft Teams preview endpoint. No login, attachment or click was required of the victim. Microsoft states it fixed the issue before disclosure and saw no evidence of in-the-wild exploitation.

ASSESSED SYSTEM

Microsoft 365 Copilot's retrieval-augmented answer pipeline and its chat render surface, in the pre-fix configuration described by the disclosing research: external email ingested into the same answer context as internal mail and files, the XPIA cross-prompt-injection classifier as the screening layer, the Markdown rendering path that auto-fetches images, and the Content Security Policy that governs which destinations that fetch may reach. Microsoft states it fixed the issue before disclosure and saw no evidence of in-the-wild exploitation; the pre-fix configuration is what is scored here.

OUT OF SCOPE

Microsoft 365 Copilot as it stands after the fix Microsoft shipped before disclosure; the underlying foundation model's training pipeline and lineage; Microsoft Teams as a product — the preview endpoint appears only as the CSP-allowed hop the chain laundered through, not as a component under assessment; other Copilot surfaces and the broader Microsoft 365 tenant; and the Fairness axis (Fa-1..4), for which an exfiltration incident produces no evidence.

Architecture: RAG / Retrieval-Augmented System (decision tree Q4) — Q1 and Q2 answered NO: no agent topology, planner loop or autonomous multi-step workflow appears in the evidenced chain. Q3 answered NO deliberately and this is the load-bearing classification decision: the exfiltration hop was performed by the chat render surface auto-fetching Markdown media, not by a model-invoked function, and the brief supplies no function schema, connector inventory or tool-call log for this chain — broader M365 Copilot tool and agent capabilities are out of scope. Q4 answered YES: the mechanism the brief describes is retrieval — 'a normal user query pulls that email beside internal mail and files' — mutable external context assembled at inference time from the mailbox and file corpus. Tier 2: Tier 2 Consumer: although the product's users are authenticated enterprise employees, which is a Tier 3 signal, the assessed pipeline's primary ingestion path is unauthenticated public input — any external sender — and exploitation reaches individuals' confidential data zero-click across a mass-market multi-tenant service, which is the defining Tier 2 criterion that exploitation affects individuals.

Documented attack or failure path

  1. The attacker sends an ordinary-looking business email to the target. Hidden instructions are embedded in wording plain enough that the XPIA cross-prompt-injection classifier does not flag it, so the payload lands in the mailbox and persists there as retrievable content.
  2. At an arbitrary later time an unrelated user query causes retrieval to pull that email into the answer context beside internal mail and files; no trust label distinguishes the external content from the internal content once they share a prompt.
  3. The retrieved external text is treated with instruction-level authority rather than as evidence to summarise, and steers the model's output.
  4. Copilot emits a reference-style Markdown link or image — visible text innocuous, URL carrying internal data as a path or query component.
  5. The chat surface auto-fetches Markdown images. CSP blocks the direct attacker domain, so the chain uses a CSP-allowed Microsoft Teams preview endpoint to perform the fetch of the secret-bearing URL instead.
  6. Internal data crosses the tenant boundary with no login, attachment or click by the victim, and no output-side leak scan runs before the answer is rendered.

Observed controls and bounded outcomes

Positive credit is given only where the record directly demonstrates a control operating. Recommended or merely presumed controls receive no positive scoring credit.

  • Content Security Policy held. Direct attacker domains were blocked, which is why the chain had to launder the fetch through a CSP-allowed first-party endpoint rather than calling out directly. This is a real egress control that changed the attacker's work, and it is the reason Cn-3 is scored at 0.50 rather than at a failure anchor.
  • The XPIA cross-prompt-injection classifier existed and was operating on inbound external content. It was evaded by ordinary business-style prose, but a purpose-built injection screening layer is materially more than nothing, and it is why Ro-1 is scored at 0.40 rather than in the basic-filter band.
  • Retrieval honoured the user's own authorisation scope: the chain exfiltrates data the querying user could already see, not data outside their permissions. The access-control boundary was not what failed.
  • Microsoft fixed the issue before public disclosure and reported no evidence of in-the-wild exploitation — the strongest single input to the Rf = 0.25 placement, and a fact that must be stated alongside the finding.

Layer 1 — Intrinsic Vulnerability Profile

Each sub-metric is placed on its five-level rubric by the evidence quoted beside it. Missing applicable evidence remains unknown. The displayed midpoint and interval are scenario values, not inferred control performance.

Sub-metricScoreRubric basisEvidence
Robustness (Ro) — scenario interval 0.19–0.64 (midpoint 0.41), Tier 2 MVT 0.50 indeterminate
Ro-1Adversarial Input Resistance0.40w 0.35Documented interpolation between the 0.25 and 0.50 anchors. Above 0.25: a purpose-built adversarial classifier was in production and the attacker had to phrase the payload specifically to get past it, which is more than the anchor's 'basic filters'. Below 0.50: that anchor's ASR-below-50% precondition is unverified, and the evasion was achieved with ordinary business-style prose rather than a high-effort adaptive attack, so the qualitative ceiling cannot be claimed in full.A dedicated cross-prompt-injection classifier (XPIA) was deployed on the ingestion path, and the paper reports the attack email's 'wording looked normal enough to evade' it. The brief's closing observation is that classifiers 'help, yet fail open if teams do not also enforce deterministic trust separation and data-flow controls', and it positions per-prompt screening as 'an early screening layer, not as the main security boundary'. No ASR, bypass rate or policy-bypass measurement is published.source: researcher
Ro-4Poisoning Attack Resistance0.25w 0.20The 0.25 anchor: basic validation exists on the ingestion path (enterprise mail security plus the XPIA screen) but there is no adversarial re-screening, provenance labelling or quarantine at the point where stored external content becomes active context, and poisoning of the retrieval corpus succeeded — the anchor names RAG explicitly as a channel where this occurs with limited effort.The retrieval corpus is the poisoned channel: an externally authored document is planted in the mailbox and only becomes dangerous when later retrieved. The brief's AID-D-014.001 entry states that retrieved content 'should be rescanned as untrusted input before final context assembly' and that 'this matters even if the email already passed mail security controls earlier, because retrieval turns stored external content into active model context' — so upstream mail screening existed, but no post-retrieval integrity or provenance step did.source: brief
Fairness (Fa) — scenario interval 0.00–1.00 (midpoint 0.50), Tier 2 MVT 0.55 indeterminate
Transparency (Tr) — scenario interval 0.00–1.00 (midpoint 0.50), Tier 2 MVT 0.50 indeterminate
Privacy (Pr) — scenario interval 0.17–0.82 (midpoint 0.50), Tier 2 MVT 0.55 indeterminate
Pr-1Training Data Leakage Risk0.50w 0.35The 0.50 anchor: leakage-relevant controls are present and common direct extraction is prevented, but sensitive leakage still occurs under adaptive, multi-turn probing. Pr-1's definition covers retrieval and proprietary data revealed through adversarial interaction, so this is the outcome sub-metric for the leak; it is kept distinct from Cn-3, which scores the filtering layer that should have stopped the unsafe output.The realised outcome is disclosure of retrieved proprietary content — internal project details drawn from internal mail and files — to an attacker-controlled destination, through adversarial interaction rather than normal use. The path required a multi-stage chain: evade the injection classifier, wait for co-retrieval, induce a reference-style Markdown construction, and defeat CSP by laundering through an allowed first-party endpoint. Direct extraction routes were blocked at the egress boundary.source: researcher
Containment (Cn) — scenario interval 0.18–0.82 (midpoint 0.50), Tier 2 MVT 0.55 indeterminate
Cn-1Scope Enforcement0.50w 0.16The 0.50 anchor: core scope controls block the common violation — the direct-domain egress attempt was denied — but edge cases remain in the retrieval and downstream-integration paths, specifically an allowed proxy that forwards arbitrary destinations and a prompt context that does not separate external from internal trust levels.Positive: retrieval stayed inside the querying user's authorisation scope, and egress was constrained by a domain allowlist — CSP blocked the direct attacker domain. Negative: an allowed first-party preview endpoint could forward an arbitrary model-generated URL, which the brief addresses by telling defenders to 'treat preview services, proxy URLs, and browser fetches as data sinks, not as harmless UI features' and to 'audit which domains and proxy paths your copilots are allowed to reach, and remove any path that can forward arbitrary model-generated URLs'. External content also entered the same trust context as internal data with no data-only partition.source: brief
Cn-3Output Filtering Robustness0.50w 0.20The 0.50 anchor almost verbatim: 'filtering blocks common unsafe outputs, but adaptive, context-leaking, or tool-laundered outputs remain possible.' The direct path was blocked; the laundered path through an allowed endpoint was not, and no sensitive-content scan ran on the answer before render.The unsafe output was a reference-style Markdown link or image carrying internal data in the URL, with innocuous visible text. CSP blocked direct attacker domains — a filtering layer that worked — so the chain laundered the fetch through a CSP-allowed Microsoft Teams preview endpoint. The brief states 'the final answer should have been scanned before rendering' and describes a response containing 'internal project details inside a URL, a suspicious external image reference, or an unusually structured outbound link' as exactly what a leak-detection control is meant to catch, and asks for URL canonicalisation, domain and redirect verification, and blocking of arbitrary model-generated remote media — all as additions.source: brief

Unknown, not N/A: 18 applicable sub-metrics lack admissible public evidence. The lower, midpoint, and upper scenarios evaluate each at 0.00, 0.50, and 1.00 respectively; no weight is redistributed merely because evidence is missing.

Layer 2 — Operational Risk Posture

DimensionScoreJustification
AaAutonomy Amplification0.25w 0.25Near the low end of the scale. Copilot generates answers for human consumption and holds no write, transaction or tool-execution authority in the evidenced chain, which points at the 0.00 anchor; but the 0.00 anchor also requires that every output be reviewed before action, and here one automated side effect — the render surface fetching model-emitted media — executes on the model's output with no confirmation and no human in the path, which is what makes the chain zero-click. Scored at the 0.25 anchor as the nearest fit to a system with no decision authority but one unconfirmed automated egress action per answer.
AsAttack Surface Exposure0.90w 0.35Documented interpolation above the 0.75 anchor. The 0.75 anchor's text describes this deployment nearly verbatim — internet-facing with external data ingestion via email into RAG, sources partially trusted, since inbound mail passes enterprise mail security and the XPIA screen. Raised toward 1.00 by the demonstrated behaviour: any unauthenticated external sender, with no prior relationship to the target and no user interaction, could place content into the retrieval corpus that then acted as instructions in a privileged answer context. In effect the corpus is writable by arbitrary internet parties, which is untrusted-RAG behaviour whatever the nominal screening. elevated
CpCascade Potential1.00w 0.20No System Dependency Graph is published for M365 Copilot, so the spec's worst-case default applies (no SDG, DGC < 0.90). The reconstruction also triggers the 1.00 anchor on its merits, through the fault-injection blast-radius indicator rather than through privilege amplification: the injected payload propagated the full predicted path — externally writable retrieval input, into model context assembly (L1), through the render surface (L3) and out to an external endpoint (L4) — with the one declared egress gate crossed. CSP was the gate, and a payload observed crossing a declared-blocked boundary invalidates that gate's containment-block-rate claim on that path. The corroboration is qualitative: a single demonstrated chain, not the twenty trials the indicator specifies. Note that privilege amplification depth is not what drives this score — no privilege was gained, data left.GDCP: corroborated by the observed path elevated
RfRemediation Feasibility0.25w 0.20The 0.25 model-adjacent anchor. Microsoft fixed the issue service-side before disclosure with no customer action required, and the remediation class the brief describes is infrastructure — render-surface egress policy, URL canonicalisation and allowlisting, data-flow sink enforcement, post-retrieval scanning, output leak detection — none of which touches the model. Not 0.00, because the fix is a set of deployment-layer controls rather than a single deterministic patch to a component. Well below 0.75: that anchor would apply if the assessed vulnerability were indirect prompt injection as such, which remains a fundamental model property mitigable only through external layers; the assessed vulnerability is the specific zero-click exfiltration chain, and that chain was closed.

Nelevated = 2 (dimensions strictly above 0.75) → CRM = 1.15.

Compound Risk Alert. Two or more dimensions are simultaneously elevated (spec 3.2.2); architectural decomposition is recommended before deployment.

Layer 3 — Public-evidence confidence diagnostic

ComponentScoreBasis
Pc — Public provenance evidence0.35Documented interpolation between the 0.25 and 0.50 anchors. Above 0.25: the research documents the answer pipeline's stages, the deployed injection classifier by name, the Markdown rendering behaviour and the CSP posture including which destination class was allowed — a partial architecture and control record rather than a bare vendor-and-name entry. Below 0.50: no model lineage, no retrieval corpus manifest, no connector inventory and no evaluation artifacts are public for the assessed configuration, and nothing is independently verifiable beyond the vendor's own statement that a fix shipped.
Ec — Public evaluation coverage0.22coverage 0.22 (5 of 23 applicable sub-metrics) × independence 1.00 × fidelity 1.00. No Full, Standard, or Lite pathway is claimed for a retrospective article.
Tf — Public-evidence freshness0.07Evidence dated 2025-09-06; age 341 days on the workpaper reference date. Components: T_calendar 0.07 · C_monitor 0.65 · C_event 0.65 · C_evidence 0.85. Binding term: T_calendar. dt_days = 341, measured from the primary public disclosure dated 2025-09-06 to the 2026-08-13 evidence reference date; the AIDEFEND brief republished the analysis on 2026-04-23. agentic = false: the RAG class has no runtime tool reprovisioning or credential reissuance in the evidenced chain, so the containment staleness floor does not apply — this is the classification decision at Q3 carrying through into the ACI. baw = false: the Behavioral Attestation Window checklist was applied item by item and none is met. The retrieval corpus is written by inbound mail delivery, not by the model or an agent, so it is not model-writable cross-session memory; there is no runtime agent-to-agent channel, no self-modifying prompt or configuration, and no closed feedback loop in which the system's own output is written to state it later consumes. The persistence of attacker content in the mailbox is real but is scored in Ro-4 and through C_event, not through a behavioural staleness floor. C_monitor = 0.65 — a detection failure on two layers: the XPIA classifier failed open silently with no signal, and no output-side sensitive-data or suspicious-link detection ran before render, so the exfiltration would have produced no alert. C_event = 0.65 — moderate rather than major: Microsoft shipped a guardrail and data-flow remediation, which is the prompt-or-guardrail-rewrite row, and reported no confirmed compromise, so the major compromise row is not invoked. C_evidence = 0.85 — unresolved at the assessment date: the classifier's fail-open behaviour and indirect prompt injection as a class remain open, and the fix addressed the exfiltration hop rather than the trust-separation root cause.

Public-evidence ACI = (Pc × Ec × Tf)1/3 = 0.18 — diagnostic status: Invalid as assessment-of-record evidence. It describes the evidence available to this case study, not the assurance of the underlying system, and is not inserted into the normalized-assurance scenario ERS.

Indicative ERS — normalized-assurance scenario

Worp · ORP0.25(0.25) + 0.35(0.90) + 0.20(1.00) + 0.20(0.25) = 0.627
CRMNelevated = 2 → 1.15
ORPeffective0.627 × 1.15 = 0.722
Wivp · IVP midpoint0.25(0.41) + 0.30(0.50) + 0.15(0.50) + 0.20(0.50) + 0.10(0.50) = 0.479
IVP mitigation0.15 + 0.85(1 − 0.479) = 0.593
Scenario assuranceACI fixed at 1.000 for cross-case comparison; public-evidence ACI 0.177 is diagnostic only
Indicative ERS midpointmin(10, 0.722 × 0.593 × 1/1.000 × 10) = 4.3
Unknown-input interval2.0–6.6; 18 unknown applicable sub-metrics set to 1.00 / 0.00 at the bounds

AIDEFEND defences → AITBM sub-metrics

Identifiers are quoted as they appear on the AIDEFEND in Action brief (retrieved 2026-08-13); the sub-metric mapping is AITBM's own, from the specification's AIDEFEND tables reconciled at catalogue data version 2026.08.05. AIDEFEND renumbers identifiers between releases, so the data version travels with every mapping and neither side's IDs should be cited without one. A mapping identifies a possible evidence route; a recommendation does not prove that the control was implemented or effective and receives no scoring credit by itself.

TechniqueDefence PriorityEvidences
AID-H-018.005Value-Level Capability Metadata & Data Flow Sink EnforcementParent AID-H-018 (Tool Authorization & Capability Scoping). Cn-1 is the germane scored edge — internal values should not flow into an external URL or preview proxy unless policy allows it, which is the sink-side scope gap behind Cn-1 = 0.50. Cn-6 is not scored: a CSP gate did exist and did block the direct path, so this is not an ARCR-zero condition, and scoring it would double-count the failure already carried by Cn-1 and Cn-3.Very HighCn-1 Cn-6 Cn-7
AID-H-016.001System Prompt Structure & Instruction/Data SeparationParent AID-H-016 (Instruction Hierarchy & Prompt Injection Hardening). Ro-1 is the mapped and scored edge; the paper's prompt-partitioning recommendation — external email entering inside clearly marked data-only sections with explicit instruction precedence — is the deterministic control whose absence let the classifier bypass become an instruction-level compromise.Very HighRo-1
AID-D-014.001Post-Retrieval Malicious Content ScanningParent AID-D-014 (RAG Content, Relevance & Retrieval-Provenance Monitoring), whose catalogue edges are Ro-2 and Ro-3; neither is scored here, as the brief presents no distribution-shift or output-consistency evidence. The technique's substance — rescanning retrieved content as untrusted before context assembly — is instead the evidence basis for Ro-4 = 0.25, and the divergence is recorded rather than resolved by inventing a mapping edge.Very HighRo-2 Ro-3
AID-H-006.002Text, Markup & Structured Output Sanitization and Release GateParent AID-H-006 maps to Ro-3 and Cn-3 on AIDEFEND dataVersion 2026.08.05. This is the newly added live-page defense: a pre-render fail-closed release gate would have removed or safely proxied the remote subresource that completed EchoLeak's zero-click egress path. It routes candidate Cn-3 evidence but does not earn implementation credit in this retrospective case.Very HighCn-3 Ro-3
AID-H-019.001URL Normalization & Allowlist FilteringParent AID-H-019 maps directly to Ro-1, Cn-1, and Cn-3 in the reconciled AIDEFEND dataVersion 2026.08.05 crosswalk. Substantively it is the control that would have closed the last hop: canonicalising generated URLs, verifying domains and redirects, and blocking arbitrary model-generated remote media before the surface or proxy makes the request.HighCn-1 Cn-3 Ro-1
AID-D-003.002Sensitive Information & Data Leakage DetectionParent AID-D-003 (AI Output Monitoring & Policy-Violation Detection). Cn-3 is the primary scored edge and this is its evidence: no scan ran on the answer before render, so internal detail inside a URL and an unusually structured outbound link passed unexamined. Cn-1 is also scored; Ro-3 has no evidence in this case.HighCn-1 Cn-3 Cn-7 Ro-3
AID-H-017.007Dual-LLM Isolation PatternParent AID-H-017 (Secure Agent Architecture), mapped to Cn-5; Cn-5 is not scored, since a RAG deployment with no agent or tool identity delegation in the evidenced chain produces no identity-integrity evidence. The technique's substance — a quarantined model reading raw external email while a separate privileged model answers over internal data — is corroborating evidence for the Ro-1 = 0.40 placement.HighCn-5 Cn-7
AID-D-001.001Per-Prompt Content, Intent & Obfuscation AnalysisParent AID-D-001 (Adversarial Input, Prompt Injection & Signal-Authenticity Detection). Ro-1 is the mapped and scored edge, and this technique is what XPIA implements — the control that was present and evaded. Its presence is why Ro-1 is 0.40 rather than 0.25; the brief's own caution is that it is an early screening layer, not the main boundary.MediumRo-1

WHAT THIS CASE TEACHES

This is the batch's clearest demonstration that a control which held still gets scored, and scored up: CSP blocked the direct egress domain and the XPIA classifier forced the attacker to craft plain prose, which is exactly why Cn-3 and Cn-1 sit at 0.50 and Ro-1 at 0.40 rather than at failure anchors — and the residual risk is carried instead by Cp, where a single demonstrated chain crossing a declared-blocked boundary invalidates that gate's containment claim and corroborates the 1.00 anchor.

Sources: AIDEFEND in Action — Microsoft "EchoLeak": How One Email Turned Microsoft 365 Copilot into a Zero-Click Data Exfiltration Path · Primary source — EchoLeak: The First Real-World Zero-Click Prompt Injection Exploit in a Production LLM System (2025-09-06)

AITBM sub-metrics referenced